Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AVPlayerStatus vs AVPlayerItemStatus

The issue is that player.status returns AVPlayerStatusReadyToPlay a full 2 seconds before player.currentItem.status returns AVPlayerItemStatusReadyToPlay. Does anyone have any helpful explanations as to why this is happening?
This is just sample code to show the basic idea of what's happening so if there are any typos or whatever please ignore them.

- (void) someMethod
{    
    player = [[AVPlayer alloc] initWithURL:someValidURL];
    [player play];

    NSTimer *timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(checkStatus:) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}

- (void) checkStatus: (NSTimer *)timer
{
    NSLog(@"player status: %i", player.status]);
    NSLog(@"player item status: %i", player.currentItem.status]);
}
like image 870
SteveB Avatar asked Oct 25 '22 11:10

SteveB


1 Answers

In our experience building Ultravisual the AVPlayerStatus and AVPlayerItemStatus are only kind of related to each other, and often depend on async states -- ie, the implementations tend to be heavily multithreaded, and are often buggy or poorly defined.

We found AVPlayerItemStatus to be the most reliable indicator of actually really ready to play, but there were some gotchas especially when dealing with AVQueuePlayer or AVPlayerItems built from AVMutableComposition instances.

like image 161
damian Avatar answered Nov 03 '22 01:11

damian