我正在使用QueuePlayer播放歌曲列表,并且正在播放歌曲。我的问题是,每当当前项目更改时,我都试图跟踪。 我尝试将观察者添加到QueuePlayer,但这不起作用。观察功能没有被调用。任何帮助将不胜感激
观察者
queuePlayer.currentItem?.addObserver(self, forKeyPath: "currentItem", options: [.new, .old], context: nil)
}
倾听观察者 //项目更改时不会被呼叫
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "currentItem" {
if let oldItem = change?[NSKeyValueChangeKey.oldKey] as? AVPlayerItem {
print("Old item : \(oldItem)")
}
if let newItem = change?[NSKeyValueChangeKey.newKey] as? AVPlayerItem {
print("New item : \(newItem)")
}
}
}
答案 0 :(得分:1)
您的代码正在观察currentItem
的{{1}}属性。
要观察queuePlayer.currentItem
的{{1}}属性,应该是
currentItem
或者更好,用于编译时检查……
queuePlayer
答案 1 :(得分:0)
如果您需要知道某个项目何时完成播放,可以执行类似的操作。
在您的
viewdidload()
内,添加观察者
NotificationCenter.default.addObserver(self, selector: #selector(itemDidPlayToEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
@objc func itemDidPlayToEnd() {
//your item played to end
}
我刚刚证实它可以正常工作