【问题标题】:Detect difference between AVPlayer & AVQueuePlayer KVO检测 AVPlayer 和 AVQueuePlayer KVO 之间的区别
【发布时间】:2016-09-30 12:10:22
【问题描述】:

我有一个AVPlayer 用于在线音频流和AVQueuePlayer 用于离线队列以播放多首歌曲。

我的代码

self.myQueuePlayer?.addObserver(self, forKeyPath: "timedMetadata", options: NSKeyValueObservingOptions.new, context: nil)

myPlayer.currentItem?.addObserver(self, forKeyPath: "timedMetadata", options: [.new,.old,.initial], context: nil)

我如何观察“timedMetadata”的 KVO 并获取它是 AVPlayer 还是 AVQueuePlayer

【问题讨论】:

    标签: ios iphone swift avplayer key-value-observing


    【解决方案1】:

    您可以使用上下文参数来区分不同的 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
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 2013-06-10
      • 2018-01-16
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      相关资源
      最近更新 更多