AVQueuePlayer当前项目已更改

时间:2018-08-21 16:46:14

标签: swift avfoundation avplayer avplayeritem avqueueplayer

我正在使用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)")
        }    
    }
}

2 个答案:

答案 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
  }

我刚刚证实它可以正常工作

This may also be helpful