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]);
}
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 AVPlayerItem
s built from AVMutableComposition
instances.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With