Закрытие AVPlayerViewController не «убивает» объект — он сохраняется

Я воспроизводю видео, которые входят в комплект моего приложения.

Они правильно играют.

Однако, когда я вызываю, чтобы отклонить AVPlayerViewController, он явно удаляется из иерархии представлений, но если я выключу устройство iOS и снова включу его, на экране блокировки появится элемент управления мультимедиа, показывающий это видео и «воспроизведение». ' кнопка.

Если вы коснетесь воспроизведения, вы получите только звук, а не видео.

Моя проблема в том, что я не понимаю, почему «увольнение» не полностью «убивает» игрока, когда я закончу с этим.

Вот код презентации:

let path = Bundle.main.path(forResource: filename, ofType: type)

let url = NSURL(fileURLWithPath: path!)

let player = AVPlayer(url: url as URL)

NotificationCenter.default.addObserver(self,
                                       selector: #selector(VideoLibraryViewController.didFinishPlaying(notification:)),
                                       name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
                                       object: player.currentItem)

self.playerController = AVPlayerViewController()

self.playerController?.player = player

self.playerController?.allowsPictureInPicturePlayback = true

self.playerController?.showsPlaybackControls = YES

self.playerController?.delegate = self

self.playerController?.player?.play()

self.present(self.playerController!, animated: true, completion : nil)

Вот код увольнения:


// Delegate can implement this method to be notified when Picture in Picture will start.
func playerViewController(_ playerViewController: AVPlayerViewController, willEndFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator)
{
    self.playerController?.dismiss(animated: NO, completion: nil )
}

А вот что осталось в общесистемном медиаплеере, который отображается на экране блокировки/в центре управления:

введите здесь описание изображения


person iOSProgrammingIsFun    schedule 28.09.2019    source источник


Ответы (1)


ТОЛЬКО SDK для iOS 13: Вот решение, но ответ заключается в том, что, несмотря на отклонение AVPlayerViewController, объект AVPlayer, о котором он знает, является постоянным, и для него необходимо установить значение nil.

private func killVideoPlayer()
{ 
    self.playerController?.player?.pause()
    self.playerController?.player  = nil

    self.playerController?.dismiss(animated: YES, completion: { self.playerController = nil })
}

Предыдущие SDK, это все еще не работает.

Также не устанавливается для AVAudioSession.active значение false...?!?! Все еще нужно решение SDK до iOS 13.

person iOSProgrammingIsFun    schedule 29.09.2019