¿Cómo get una callback de AVQueuePlayer / AVPlayerItem cuando la networking se activa (y está list para reproducirse)?

Tengo un AVQueuePlayer audio basado en AVQueuePlayer que necesita ejecutarse en segundo plano. El jugador debe continuar corriendo hasta que termine de jugar toda la list. Por supuesto, tendrá que detenerse si la connection de networking se vuelve mala, pero se reanudará automáticamente cuando vuelva la connection de networking.

Para esto, estoy monitoreando

  • AVPlayerItem.status
  • AVPlayerItem.playbackLikelyToKeepUp
  • AVPlayer.currentItem
  • AVPlayer.status
  • AVPlayer.error

usando KVO. Por ejemplo, si la connection de networking se recupera de un error temporal, espero que currentAVPlayerItem.status convierta en AVPlayerStatusItemReadyToPlay , que se informará a mi reproductor y puedo emitir [AVQueuePlayer play] en ese momento.

Este mecanismo (lógica) parece funcionar en algunos casos, pero con bastante frecuencia en un entorno sin connection, AVPlayerItem.status convierte en AVPlayerItemStatusFailed , cuyo elemento AVQueuePlayer parece saltarse automáticamente. Como resultado, la queue terminará vacía y no se podrá recibir callback desde AVPlayerItem .

Tenía la esperanza de que alguna propiedad en AVPlayer cambiara cuando la connection de networking se AVPlayer / se recupere, pero nada parece cambiar ( status , error , etc.).

Obviamente, puedo controlar Reachability , pero eso no funciona cuando la aplicación se ejecuta en segundo plano.

¿Cómo puedo saber cuándo vuelve a aparecer la networking y AVQueuePlayer se puede reproducir nuevamente en esta situación?

Puede que sea solo un novato en esta área. Si alguien puede darme una idea general de cómo él / ella logra una experiencia de reproducción continua de AVQueuePlayer sin que los problemas de connection de networking temporal lo detengan por completo, ¡sería una gran ayuda también!

Puede monitorear AVPlayerItemPlaybackStalledNotification para saber cuándo el elemento terminó de reproducir su búfer pero no el file completo:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AVPlayerItemPlaybackStalledNotification:) name:AVPlayerItemPlaybackStalledNotification object:playerItem]; 

Una vez que haya suficiente búfer para continuar, debería recibir una notificación enviada a playbackLikelyToKeepUp que parece que ya está monitoreando.