简体   繁体   English

检测AVPlayer和AVQueuePlayer KVO之间的差异

[英]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”并得到AVPlayerAVQueuePlayer

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM