关闭 AVPlayerViewController 不会“杀死”对象 - 它会持续存在
Posted
技术标签:
【中文标题】关闭 AVPlayerViewController 不会“杀死”对象 - 它会持续存在【英文标题】:Dismissing AVPlayerViewController doesn't 'kill' the object - it's persisting 【发布时间】:2019-09-28 17:02:38 【问题描述】:我正在播放我的 app bundle 中的视频。
他们正在正确播放。
但是,当我调用关闭 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 )
以下是锁定屏幕/控制中心显示的系统级媒体播放器中剩余的内容:
【问题讨论】:
【参考方案1】:仅限 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 8 - 关闭全屏 AVPlayerViewController 时将方向更改回纵向
检测 AVPlayerViewController 完成按钮点击?
AVPlayerViewController 上没有“完成”按钮
在 AVPlayerViewController 中禁用手势识别器
如何拦截在AVPlayerViewController中点击完成按钮?
如何设置画中画的初始位置? (AVPictureInPictureController / AVPlayerViewController)