iosavplayerbuffering

How can I check if my AVPlayer is buffering?


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 AVPlayer.


Solution

  • 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<Void>) {
        if object is AVPlayerItem {
            switch keyPath {
                case "playbackBufferEmpty":
                   // Show loader
    
                case "playbackLikelyToKeepUp":
                    // Hide loader
    
                case "playbackBufferFull":
                    // Hide loader
            }
        }
    }