Изображение в картинке в iOS 11.3 и iOS 11.4 - PullRequest
0 голосов
/ 28 ноября 2018

Попытка заменить текущий 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)
                })
            }
        }
}
...