Add and remove observer from multiple AVPlayerItem on UITableViewCell

后端 未结 2 1465
醉酒成梦
醉酒成梦 2021-01-16 02:33

i am trying to make a table view that plays multiple videos with AVPlayer and AVPlayerItem and i needed to addObserver to each AVPlayerItem

2条回答
  •  渐次进展
    2021-01-16 02:47

    So the best solution that ever worked for me is to subclass the AVPlayerItem and use protocol to delegate back to any class that conforms to AMPlayerItemDelegate

    here is how i did it

    protocol AMPlayerItemDelegate {
        func playbackLikelyToKeepUp()
    }
    
    class AMPlayerItem: AVPlayerItem {
    
       var delegate : MyPlayerItemDelegate?
    
       init(URL: NSURL) {
           super.init(asset: AVAsset(URL: URL) , automaticallyLoadedAssetKeys:[])
           self.addMyObservers()
       }
    
       deinit {
           self.removeMyObservers()
       }
    
       func addMyObservers() {
           print("Adding")
           self.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: [.New], context: nil)
       }
    
       func removeMyObservers() {
           print("Removing")
           self.removeObserver(self, forKeyPath: "playbackLikelyToKeepUp", context: nil)
       }
    
       override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) {
           if keyPath == "playbackLikelyToKeepUp" {
               self.delegate?.playbackLikelyToKeepUp()
           }
       }
    
    }
    

提交回复
热议问题