AVQueuePlayer / AVPlayer download notification?

I have an AVQueuePlayer (which obviously extends AVPlayer ) that loads a playlist of streaming audio. Streaming works fine, but I would like the activity indicator to show that user sound is loading. The problem is that I cannot find any such notification in AVQueuePlayer (or AVPlayer ) that will indicate when the sound buffer has finished loading / is ready to play (and it does not seem to be a delegate method). Any thoughts?

+6
source share
1 answer

You will need to use KVO to do this.

For each item added to the queue, you can configure observers as follows:

 item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://somefunkyurl"]] retain]; [item_ addObserver:self forKeyPath:@"status" options:0 context:nil]; [item_ addObserver:self forKeyPath:@"playbackBufferEmpty" options:0 context:nil]; 

Now you can evaluate the status of this element in the observer method;

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([object isKindOfClass:[AVPlayerItem class]]) { AVPlayerItem *item = (AVPlayerItem *)object; //playerItem status value changed? if ([keyPath isEqualToString:@"status"]) { //yes->check it... switch(item.status) { case AVPlayerItemStatusFailed: NSLog(@"player item status failed"); break; case AVPlayerItemStatusReadyToPlay: NSLog(@"player item status is ready to play"); break; case AVPlayerItemStatusUnknown: NSLog(@"player item status is unknown"); break; } } else if ([keyPath isEqualToString:@"playbackBufferEmpty"]) { if (item.playbackBufferEmpty) { NSLog(@"player item playback buffer is empty"); } } } } 
+26
source

Source: https://habr.com/ru/post/903242/


All Articles