You can add an observer when AVPlayer receives an empty buffer:
[[self.tracksPlayer currentItem] addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil];
And an observer, so you know when AVPlayer is buffered enough to keep up:
[[self.tracksPlayer currentItem] addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil];
Then just check this in your KVO callback:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (object == [self.tracksPlayer currentItem] && [keyPath isEqualToString:@"playbackBufferEmpty"]) { if ([self.tracksPlayer currentItem].playbackBufferEmpty) { NSLog(@"Buffer Empty"); } } else if (object == [self.tracksPlayer currentItem] && [keyPath isEqualToString:@"playbackLikelyToKeepUp"]) { if ([self.tracksPlayer currentItem].playbackLikelyToKeepUp) { NSLog(@"LikelyToKeepUp"); } } }
source share