Recarga de keys en AVAsset cuando el estado es AVKeyValueStatusFailed

Estoy haciendo lo siguiente:

  • Cree un nuevo AVAsset con una URL determinada. Esa URL apunta a un video en un server web remoto.
  • Intenta cargar la propiedad tracks llamando a loadValuesAsynchronouslyForKeys:completionHandler:
  • La request inicial falla porque no existe connection a Internet.
  • Noto que la request falló al llamar statusOfValueForKey:error:
  • Luego espero a que la connection vuelva a aparecer (usando algún código de accesibilidad). Tan pronto como lo haga, loadValuesAsynchronouslyForKeys:completionHandler: nuevamente.

Aquí es donde comienzan los problemas. Me imagino que AVAsset sigue adelante e intenta volver a cargar la propiedad de pistas ya que falló anteriormente. Sin embargo, esto no parece suceder. statusOfValueForKey:error: todavía devolverá AVKeyValueStatusFailed , aunque hay una connection a Internet disponible y el video se puede reproducir.

¿Hay alguna forma de restablecer el estado de esta propiedad dada y de intentar otra carga? ¿Hay otra forma de solucionar esto?

  1. ¿Estás creando un nuevo AVURLAsset o simplemente reutilizando el anterior?
  2. En el manejador de finalización para loadValuesAsynchronouslyForKeys:completionHandler: ¿estás enviando de vuelta al hilo principal?

¿Qué sucede si vuelve a llamar a este método (o algo similar) cuando esté listo para volver a intentarlo?

 - (void)setContentURL:(NSURL *)contentURL { if (_contentURL != contentURL) { _contentURL = contentURL; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:_contentURL options:nil]; NSArray *requestedKeys = [NSArray arrayWithObjects:ISIVideoPlayerControllerTracksKey, ISIVideoPlayerControllerPlayableKey, nil]; [asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler: ^{ dispatch_async(dispatch_get_main_queue(), ^{ [self prepareToPlayAsset:asset withKeys:requestedKeys]; }); }]; } }