AVPlayerViewController показывает черный экран несколько раз - PullRequest
0 голосов
/ 04 июня 2018

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

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

Я проверил 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
    }

Вот функция add:

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
    }
}

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

1 Ответ

0 голосов
/ 16 июня 2018

Через столько времени .. Я нашел решение.

Проблема заключалась в том, что я не чистил 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
}

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

...