AVPlayerViewController несколько раз показывает черный экран

Я создаю плеер, и в большинстве случаев он работает нормально.

В некоторых ситуациях (я не понял почему) видео на экране остается черным, а кнопка воспроизведения ничего не делает.

Я проверил URL-адрес, все в порядке, проблема не в этом.

В моем viewController я могу вызывать этот блок кода несколько раз с разными URL-адресами, поэтому я «перезапускаю» AVPlayerViewController.

    // Create an var in class...

    // ....

    self.videoPlayerViewController?.player?.pause()
    self.videoPlayerViewController = AVPlayerViewController()
    self.videoPlayerViewController?.player = viewModel.avPlayer

    if let avController = self.videoPlayerViewController {
        self.add(avController, in: self.playerView)
        avController.player?.play()
    } else {
        // Error
    }

Это функция добавления:

extension UIViewController {

    func add(_ viewController: UIViewController, in view: UIView) {
        viewController.view.frame = view.bounds
        addChildViewController(viewController)
        view.addSubview(viewController.view)
        viewController.didMove(toParentViewController: self)
        view.clipsToBounds = true
    }
}

Кто-то знает, что не так? Заранее спасибо!!


person Rafaela Lourenço    schedule 04.06.2018    source источник


Ответы (1)


Спустя столько времени .. Я нашел решение.

Проблема была в том, что я не чистил AVPlayer внутри AVPlayerController. И я также добавил новый экземпляр внутри DispachQueue.

Это новый код:

self.videoPlayerViewController?.player?.pause()
self.videoPlayerViewController?.player = nil
self.videoPlayerViewController = nil
self.videoPlayerViewController = AVPlayerViewController()
self.videoPlayerViewController?.player = viewModel.avPlayer

И после того, как я добавил в viewController:

if let avController = self.videoPlayerViewController {
     DispatchQueue.main.async { [weak self] in
         if let strongSelf = self {
             strongSelf.add(avController, in: strongSelf.playerView)
             avController.player?.play()
         }
     }
} else {
    // Error
}

Я надеюсь, что это могло помочь кому-то!!

person Rafaela Lourenço    schedule 16.06.2018