How can I check if my AVPlayer is buffering?

后端 未结 10 1073
后悔当初
后悔当初 2020-12-01 06:02

I want to detect if my AVPlayer is buffering for the current location, so that I can show a loader or something. But I can\'t seem to find anything in the documentation for

10条回答
  •  遥遥无期
    2020-12-01 06:48

    You can observe the values of your player.currentItem:

    playerItem.addObserver(self, forKeyPath: "playbackBufferEmpty", options: .New, context: nil)
    playerItem.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: .New, context: nil)
    playerItem.addObserver(self, forKeyPath: "playbackBufferFull", options: .New, context: nil)
    

    then

    override public func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) {
        if object is AVPlayerItem {
            switch keyPath {
                case "playbackBufferEmpty":
                   // Show loader
    
                case "playbackLikelyToKeepUp":
                    // Hide loader
    
                case "playbackBufferFull":
                    // Hide loader
            }
        }
    }
    

提交回复
热议问题