2016-09-30 27 views
1

我有一個AVPlayer在線音頻流& AVQueuePlayer用於離線隊列播放多首歌曲。檢測AVPlayer和AVQueuePlayer之間的區別KVO

mycode的

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

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

我怎樣才能觀測志願爲 「timedMetadata」 &得到的是它AVPlayerAVQueuePlayer

回答

0

您可以使用上下文參數不同志願的對象來區分:

// 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 
     } 
    } 
}