Увольнение AVPlayerViewController не «убивает» объект - оно сохраняется - PullRequest
1 голос
/ 28 сентября 2019

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

Они воспроизводятся правильно.

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

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

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

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

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

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

enter image description here

1 Ответ

1 голос
/ 29 сентября 2019

ТОЛЬКО для iOS 13 SDK: вот решение, но ответ таков: несмотря на то, что 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 ...?!?!Все еще нужно предварительное решение iOS 13 SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...