AVPlayerItemDidPlayToEndTimeNotification 未触发
Posted
技术标签:
【中文标题】AVPlayerItemDidPlayToEndTimeNotification 未触发【英文标题】:AVPlayerItemDidPlayToEndTimeNotification not firing 【发布时间】:2015-11-23 12:31:04 【问题描述】:我正在使用 AVPlayer 从 url 播放视频。 AVPlayerItemDidPlayToEndTimeNotification 未触发。我已经设置了断点来检查。下面是我的代码 sn-p:-
@IBAction func playButtonClicked(sender: UIButton)
let url:NSURL = NSURL(string: self.currentSelectedContent.link)!
moviePlayer = AVPlayer(URL: url)
playerViewController = AVPlayerViewController()
playerViewController.player = moviePlayer
self.presentViewController(playerViewController, animated: true)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "moviePlayBackFinished", name: AVPlayerItemDidPlayToEndTimeNotification, object: self.moviePlayer)
self.playerViewController.player?.play()
func moviePlayBackFinished()
self.playerViewController.dismissViewControllerAnimated(true, completion: nil)
【问题讨论】:
【参考方案1】:根据文档,观察到的对象必须是 AVPlayerItem
实例,而不是 AVPlayer
本身。尝试将self.moviePlayer
更改为self.moviePlayer.currentItem
。
【讨论】:
终于找到正确答案了,这个好难找!非常感谢!【参考方案2】:AVPlayer 的 actionAtItemEnd 属性是 KVO 兼容的:
moviePlayer.addObserver(self, forKeyPath: "actionAtItemEnd", options: [], context: nil)
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>)
if keyPath == "actionAtItemEnd"
//
print("FINISH")
https://developer.apple.com/documentation/avfoundation/avplayer/1387376-actionatitemend
https://developer.apple.com/documentation/avfoundation/avplayeractionatitemend
【讨论】:
【参考方案3】:这对我有用:
NotificationCenter.default.addObserver(self,
selector:#selector(didEndPlayback),
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object:nil)
【讨论】:
什么是NativeVideoPlayer
?
抱歉,这是我用于我的一个项目的代码。编辑了我的答案。您必须编写任何要在触发通知时调用的选择器。请注意,对象nil
在这里,因为这样它将为每个项目触发。如果您只需要单个项目,当然可以在此处指定单个播放器项目。
在我的情况下它不起作用。我只是想播放该项目一次,但它是无限循环播放的
didEndPlayback
选择器中的代码看起来有些问题。您可以分享代码以获得更多帮助。
就我而言,有多个播放器,每个播放器播放一个文件。我不明白为什么会这样。但就我而言,我用我自己的替换了现有的播放器处理程序实现。这些实现之间的主要区别 - 我没有明确使用AVPlayerItem
- 播放器直接用文件名初始化。以上是关于AVPlayerItemDidPlayToEndTimeNotification 未触发的主要内容,如果未能解决你的问题,请参考以下文章