[英]Detect difference between AVPlayer & AVQueuePlayer KVO
I have a AVPlayer
for online audio stream & AVQueuePlayer
for offline queue to play multiple songs. 我有一个用于在线音频流的
AVPlayer
和用于离线队列的AVQueuePlayer
来播放多首歌曲。
MyCode mycode的
self.myQueuePlayer?.addObserver(self, forKeyPath: "timedMetadata", options: NSKeyValueObservingOptions.new, context: nil)
myPlayer.currentItem?.addObserver(self, forKeyPath: "timedMetadata", options: [.new,.old,.initial], context: nil)
How can I observer KVO for "timedMetadata" & get is it AVPlayer
or AVQueuePlayer
? 我如何观察KVO的“timedMetadata”并得到
AVPlayer
或AVQueuePlayer
?
You can use the context argument to distinguish between different KVO objects: 您可以使用context参数来区分不同的KVO对象:
// class
private var playerContext = 0
private var queuePlayerContext = 0
func setup() {
self.myQueuePlayer?.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: &queuePlayerContext)
myPlayer.currentItem?.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: &playerContext)
}
override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard let context = context else {
return
}
if keyPath == "timedMetadata" {
switch context {
case &queuePlayerContext:
print("queuePlayer")
case &playerContext:
print("playerContext")
default:
break
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.