El estado de AVPlayer siempre AVPlayerStatusReadyToPlay

Estoy usando AVPlayer para reproducir audio desde una URL

En ViewDidLoad:

self.playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:imageText]]; self.player = [AVPlayer playerWithPlayerItem:playerItem]; [player addObserver:self forKeyPath:@"status" options:0 context:nil]; [player play]; 

Observador

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (object == player && [keyPath isEqualToString:@"status"]) { if (player.status == AVPlayerStatusReadyToPlay) { //[playingLbl setText:@"Playing Audio"]; NSLog(@"fineee"); [playBtn setEnabled:YES]; } else if (player.status == AVPlayerStatusFailed) { // something went wrong. player.error should contain some information NSLog(@"not fineee"); NSLog(@"%@",player.error); } else if (player.status == AVPlayerItemStatusUnknown) { NSLog(@"AVPlayer Unknown"); } } } 

pero el jugador a veces está atascado y no reproduce el audio, pero también el estado es AVPlayerStatusReadyToPlay. Nunca va dentro de AVPlayerStatusFailed o AVPlayerItemStatusUnknown. Como quiero manejar el error de AVPlayer, también debe entrar dentro de estos. ¡¡Por favor ayuda!!

Debe observar el estado de CurrentItem. AVPlayer falló debido a AVPlayerItem falló, si algo salió mal, comienza desde AVPlayerItem luego AVPlayer.

tratar:

 [item addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil]; 

en su observeValueForKeyPath:

 if (object == audioPlayer.currentItem && [keyPath isEqualToString:@"status"]) { if (audioPlayer.currentItem.status == AVPlayerItemStatusFailed) { NSLog(@"------player item failed:%@",audioPlayer.currentItem.error); } } 

Puede ver el event handling AVPlayer o utilizarlo directamente desde HysteriaPlayer , mi proyecto de código abierto.