当状态为AVKeyValueStatusFailed时,重新加载AVAsset中的键

mpl*_*ert 5 avfoundation ios avasset

我正在做以下事情:

  • AVAsset使用给定的URL 创建新的.该URL指向远程Web服务器上的视频.
  • 尝试tracks通过调用加载属性loadValuesAsynchronouslyForKeys:completionHandler:
  • 初始请求失败,因为不存在互联网连接
  • 我注意到请求通过调用失败了 statusOfValueForKey:error:
  • 然后我等待连接重新出现(使用一些可达性代码).一旦它,我loadValuesAsynchronouslyForKeys:completionHandler:再次打电话.

这是问题开始的地方.我想这AVAsset会继续并试图重新加载track属性,因为它之前失败了.但是,这似乎不会发生.statusOfValueForKey:error:仍然会返回AVKeyValueStatusFailed,虽然有可用的互联网连接,视频可播放.

有没有办法重置此给定属性的状态并尝试另一个加载?还有另一种解决方法吗?

Jes*_*sse 2

  1. 您是要创建新的 AVURLAsset 还是只是重复使用前一个?
  2. 在完成处理程序中,loadValuesAsynchronouslyForKeys:completionHandler:您是否分派回主线程?

如果您准备重试时再次调用此方法(或类似的方法),会发生什么情况。

- (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];
             });
         }];
    }
}
Run Code Online (Sandbox Code Playgroud)