У меня есть собственная камера, которая может записывать видео и делать фотографии. Проблема в том, что после записи и нажатия viewController с предварительным просмотром записанного видео, воспроизведение останавливается через несколько секунд. Таким образом, поток:
- Пользовательская камера открыта;
- Я записал видео;
- Контроллер с предварительным просмотром записанного видео. (с помощью pushViewController (controller, animated: true));
- Воспроизведение видео;
- Через N секунд (1-2 се c) видео по какой-то причине остановилось.
Код:
- didFinishRecordingTo outputFileURL:
if let error = error {
// handle error
return
}
if let currentBackgroundRecordingID = backgroundRecordingID {
backgroundRecordingID = UIBackgroundTaskIdentifier.invalid
if currentBackgroundRecordingID != UIBackgroundTaskIdentifier.invalid {
UIApplication.shared.endBackgroundTask(currentBackgroundRecordingID)
}
}
// open viewController and play recently recorded video from temporary files.
setupVideoBackground () -> Конфигурация для AVPlayer, вызываемая в viewDidLoad / viewWillAppear:
let player = AVPlayer(url: url)
player.actionAtItemEnd = .none
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.frame
playerLayer.videoGravity = .resizeAspectFill
self.view.layer.insertSublayer(playerLayer, at: 0)
player.seek(to: .zero)
player.play()
Контроллер push-представления:
let vc = TestController()
vc.url = url!
self.navigationController?.pushViewController(vc, animated: true)
Примечание: одна странная вещь: если я использую pushViewController с animated: false, проигрыватель будет воспроизводить полное видео, а если с animated: правда, видео будет остановлено через несколько секунд. Кроме того, контроллер текущего представления работает отлично.
Примечание 2. Если я вызову функцию setupVideoBackground () с задержкой 0,5 секунды с помощью DispatchQueue, видео не остановится.
Не понимаю, почему видео воспроизводится правильно после pushViewController(vc, animated: false)
и перестает воспроизводиться после pushViewController(vc, animated: true)