Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reloading keys in AVAsset when status is AVKeyValueStatusFailed

I'm doing the following:

  • Create a new AVAsset with a given URL. That URL points to a video on a remote web server.
  • Attempt to load the tracks property by calling loadValuesAsynchronouslyForKeys:completionHandler:
  • The initial request fails, because no internet connection exists
  • I notice that the request failed by calling statusOfValueForKey:error:
  • I then wait for the connection to re-appear (using some reachability code). As soon as it does, I call loadValuesAsynchronouslyForKeys:completionHandler: again.

Here's where the problems begin. I would imagine that the AVAsset goes ahead and attempts to reload the tracks property since it failed previously. However, this does not seem to happen. statusOfValueForKey:error: will still return AVKeyValueStatusFailed, although a working internet connection is available and the video is playable.

Is there a way to reset the state for this given property and to attempt another load? Is there another way to work around this?

like image 852
mplappert Avatar asked Nov 02 '22 07:11

mplappert


1 Answers

  1. Are you creating a new AVURLAsset or just reusing the previous one?
  2. In the completion handler for loadValuesAsynchronouslyForKeys:completionHandler: are you dispatching back to the main thread?

What happens if you call this method again (or something similar) when you're ready to retry.

- (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];
             });
         }];
    }
}
like image 149
Jesse Avatar answered Nov 15 '22 05:11

Jesse