Изображение в картинке в iOS 11.3 и iOS 11.4

Попытка заменить текущий AVPlayerItem другим AVPlayerItem в плеере в режиме PiP. У меня проблема с iOS 11.3 и iOS 11.4. Всякий раз, когда новый элемент проигрывателя создается с новым видео и пытается воспроизвести, Player удаляется. Его странное поведение. Кто-нибудь сталкивался с подобной проблемой?

Принятый подход: 1. Создан просмотр таблицы со списком URL-адресов видео 2. Создан экземпляр AVPlayerViewController() 3. В tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) пытается заменить AVPlayerItem новым URL-адресом видео.

Прикрепление кода для получения дополнительной информации

        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
                let videoURL = NSURL(string: self.videosListArray[indexPath.row])

                if playerViewController.player != nil {
                    playerViewController.player!.replaceCurrentItem(with: AVPlayerItem (url: videoURL! as URL))
                } else {
                  let player = AVPlayer(url: videoURL! as URL)
                    playerViewController.player = player
                    self.present(playerViewController, animated: true){
                        self.playerViewController.delegate = self
                        self.playerViewController.player!.play()
                    }
                }
            }
    //Below implementation is for making the user to select other videos from tableview. 
    func playerViewControllerWillStartPictureInPicture(_ playerViewController: AVPlayerViewController) {
            playerViewController.allowsPictureInPicturePlayback = true
            playerViewController.player!.play()
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
                playerViewController.dismiss(animated: true, completion: nil)

            }
        }


    func playerViewController(_ playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) {
        let currentViewController = navigationController?.visibleViewController
        if currentViewController != playerViewController {
            if let topViewController =
                navigationController?.topViewController {

                topViewController.present(playerViewController,
                                          animated: false, completion: {()
                                            completionHandler(true)
                })
            }
        }
}

0 ответов

Другие вопросы по тегам