ios avplayer trigger streaming is out of buffer

Adam Tang picture Adam Tang · Jul 30, 2011 · Viewed 17.6k times · Source

I want to reconnect to the server when the streaming buffer is empty.

How can I trigger a method when the AVPlayer or AVPlayerItem buffer is empty?

I know there are playbackLikelyToKeepUp, playbackBufferEmpty and playbackBufferFull methods to check the buffer status, but those are not callbacks.

Are there any callback functions, or any observers I should add?

Answer

sciasxp picture sciasxp · Aug 25, 2011

you can add observer for those keys:

[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil];
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil];

The first one will warn you when your buffer is empty and the second when your buffer is good to go again.

Then to handle the key change you can use this code:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {
    if (!player)
    {
        return;
    }

    else if (object == playerItem && [keyPath isEqualToString:@"playbackBufferEmpty"])
    {
        if (playerItem.playbackBufferEmpty) {
            //Your code here
        }
    }

    else if (object == playerItem && [keyPath isEqualToString:@"playbackLikelyToKeepUp"])
    {
        if (playerItem.playbackLikelyToKeepUp)
        {
            //Your code here
        }
    }
}