AVPlayer видео из временного каталога после записи останавливается воспроизведение через несколько секунд - PullRequest
1 голос
/ 10 февраля 2020

У меня есть собственная камера, которая может записывать видео и делать фотографии. Проблема в том, что после записи и нажатия viewController с предварительным просмотром записанного видео, воспроизведение останавливается через несколько секунд. Таким образом, поток:

  1. Пользовательская камера открыта;
  2. Я записал видео;
  3. Контроллер с предварительным просмотром записанного видео. (с помощью pushViewController (controller, animated: true));
  4. Воспроизведение видео;
  5. Через N секунд (1-2 се c) видео по какой-то причине остановилось.

Код:

  1. 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)

1 Ответ

0 голосов
/ 10 февраля 2020

Решение 1: Итак, проблема была в viewDidDissapear на экране камеры. Был cameraSession.stopSession(). Каждый раз, когда вызывается stopSession, avplayer перестает играть. Я не знаю, почему и как AVCaptureSession.stopSession() относится к AVPlayer, но удаление cameraSession.stopSession() из viewDidDissapear устранило проблему.

Решение 2: Вы можете установить AVAudioSession категории до .playAndRecord и видео будет воспроизводиться правильно:

try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .videoRecording, options: [.mixWithOthers])

...