关闭 AVPlayerViewController 不会 'kill' 对象 - 它会持续存在
Dismissing AVPlayerViewController doesn't 'kill' the object - it's persisting
我正在播放我的应用程序包中的视频。
他们播放正确。
但是,当我调用关闭 AVPlayerViewController 时,它显然已从视图层次结构中删除,但是,如果我关闭 iOS 设备并再次打开它,在锁定屏幕上有一个显示该视频和 'play' 按钮的媒体控件。
如果您点击播放,您只会看到音频而不会看到视频。
我的问题是我不明白为什么 'dismiss' 在我完成后 'killing' 播放器不完整。
演示代码如下:
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 )
}
这是在锁定屏幕/控制中心上显示的全系统媒体播放器中剩余的内容:
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 解决方案。
我正在播放我的应用程序包中的视频。
他们播放正确。
但是,当我调用关闭 AVPlayerViewController 时,它显然已从视图层次结构中删除,但是,如果我关闭 iOS 设备并再次打开它,在锁定屏幕上有一个显示该视频和 'play' 按钮的媒体控件。
如果您点击播放,您只会看到音频而不会看到视频。
我的问题是我不明白为什么 'dismiss' 在我完成后 'killing' 播放器不完整。
演示代码如下:
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 )
}
这是在锁定屏幕/控制中心上显示的全系统媒体播放器中剩余的内容:
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 解决方案。