AVPlayer не может загрузить файл .mov, сохраненный после повторного запуска приложения через xcode

У меня есть это приложение, основная цель которого - записать видео с помощью AVFoundation, а затем сохранить делегат выходного файла.

При первом обычном запуске приложение могло правильно записать и сохранить видео, и я мог загрузить полученный URL-адрес выходного файла в Avplayer, который у меня есть на следующем контроллере просмотра.

AVPlayer будет нормально работать, если Xcode не будет повторно запущен. Под повторным запуском я имею в виду повторное нажатие Command + R или нажатие кнопки Play в xcode, чтобы восстановить повторный запуск.

Что происходит, когда я снова запускаю приложение, так это то, что я все еще могу видеть файлы и перечислять их с помощью печати, но когда я пытаюсь получить доступ к записанному файлу, приложение больше не будет воспроизводить видео. Казалось бы, видео не загружалось должным образом или что-то еще, даже если оно уже работало ранее. После этого я все еще мог записывать новые и воспроизводить только что записанные, но не старые файлы.

Старые файлы до пересборки приложения выглядели так в AVPlayer  вот как это будет выглядеть, я просто взял его из другого stackoverflow, который показывает то же представление, но проблема в другом

Также AVPlayer успешно вернет статус .readyToPlay моему наблюдателю.

Я не понимаю, как мне продолжать исправлять это.

if let videoPreviewController = storyBoard.instantiateViewController(withIdentifier: "VideoPreviewController") as? VideoPreviewController {


                    let url = NSURL(fileURLWithPath: "file:///var/mobile/Containers/Data/Application/61E182ED-D490-4C7D-BAB7-C90D095C7E43/Documents/Thursday,%208%20June%202017%20at%201:47:51%20PM%20Philippine%20Standard%20Time.mov")
                    videoPreviewController.player = AVPlayer()
                    let playerItem = AVPlayerItem.init(url: url as URL)
                    videoPreviewController.player?.replaceCurrentItem(with: playerItem)

                    videoPreviewController.report = relationship
                    videoPreviewController.appointment = self.appointment
                    navigation.pushViewController(videoPreviewController, animated: true)
                }

person Jojo Narte    schedule 08.06.2017    source источник
comment
Пожалуйста, покажите нам код, который вы используете для загрузки URL фильма.   -  person Mozahler    schedule 08.06.2017
comment
@Mozahler Я отредактировал сообщение, чтобы использовать код для загрузки URL.   -  person Jojo Narte    schedule 09.06.2017
comment
OK. Это было прекрасно. К сожалению, пути меняются при повторном запуске приложения, поэтому вам нужно запросить путь перед извлечением файла. Смотрите мой ответ ниже.   -  person Mozahler    schedule 09.06.2017


Ответы (1)


Ваша проблема в этой строке:

  let url = NSURL(fileURLWithPath: "file:///var/mobile/Containers/Data/Application/61E182ED-D490-4C7D-BAB7-C90D095C7E43/Documents/Thursday,%208%20June%202017%20at%201:47:51%20PM%20Philippine%20Standard%20Time.mov")

Этот путь будет меняться каждый раз, когда вы перезапускаете приложение - вы не можете его жестко запрограммировать. Вы должны запросить у ОС путь к папке с документами и добавить к ней свое имя файла.

let userDocumentsURL =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

let fileName = "Thursday,%208%20June%202017%20at%201:47:51%20PM%20Philippine%20Standard%20Time.mov"

let movieURL = userDocumentsURL.appendingPathComponent(fileName)

И, кстати, вероятно, именно так вы в первую очередь сохранили файл ... получите путь, добавьте свое имя файла и сохраните его.

person Mozahler    schedule 09.06.2017
comment
На самом деле я сохранил полный путь к файлу в базе данных, я просто изменил код сверху, чтобы сократить и подчеркнуть суть. Я понятия не имею, как изменится путь, но я изменю свой код в соответствии с этой идеей. Я дам Вам знать. - person Jojo Narte; 09.06.2017
comment
OK. Не нужно сохранять весь путь к БД. Вы можете сохранить часть ниже .... / Documents /, поскольку некоторые из папок выше Documents могут изменяться со временем. - person Mozahler; 09.06.2017
comment
Это был действительно полезный помощник, я смог заставить его работать теперь, когда я просто сохранял путь после документов. Не знал, что пути меняются, пока ты мне не сказал. Спасибо. - person Jojo Narte; 09.06.2017