AVURLAsset拒绝加载video

我试图加载video文件到我的iPad应用程序作为一个AVURLAsset ,使用asynchronous加载的东西,等待它准备好了。 问题是,当我运行它,我得到一个完全通用的“失败”的错误消息,我不知道该怎么办。 如果我把它交给MPMoviePlayerController ,video就可以工作,但是AVURLAsset似乎拒绝与它有任何关系。

码:

 asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:[docPath stringByAppendingPathComponent:@"video.mov"]] options:nil]; [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ [self composeIfReady]; }); }]; 

 - (void)composeIfReady { NSError *error = nil; if([asset statusOfValueForKey:@"tracks" error:&error] == AVKeyValueStatusFailed) NSLog(@"error loading: %@", [error description]); if(error == nil) NSLog(@"okay awesome"); } 

输出:

 error loading: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation couldn't be completed. (AVFoundationErrorDomain error -11800.)" UserInfo=0x1696f0 {NSUnderlyingError=0x169a40 "The operation couldn't be completed. (OSStatus error -12936.)"} 

顺便说一下,-11800是“未知错误”的错误代码。 一种死胡同。 有任何想法吗? 在我尝试加载资产之前,是否应该设置一些内容?

解决了。 技巧:使用fileURLWithPath:而不是URLWithString: fileURLWithPath: 显然差别真的很重要。

如果任何人在使用fileURLWithPath之后仍然有问题,请尝试在time数组中使用int(s)来请求NSTimeIntervals。

这不起作用:

  NSMutableArray *playbackTimes = [NSMutableArray array]; for (int i = 0; i <= 10; i ++) { [playbackTimes addObject:@(i)]; } [self.videoPlayer requestThumbnailImagesAtTimes:playbackTimes timeOption:MPMovieTimeOptionNearestKeyFrame]; 

这工作:

  NSMutableArray *playbackTimes = [NSMutableArray array]; for (int i = 0; i <= 10; i ++) { [playbackTimes addObject:@((NSTimeInterval)i)]; } [self.videoPlayer requestThumbnailImagesAtTimes:playbackTimes timeOption:MPMovieTimeOptionNearestKeyFrame]; 

如果您正在使用-[NSURL fileURLWithPath:]创buildURL并仍然得到相同的错误。

检查AVURLAssetReferenceRestrictionsKey ,你的本地m3u8可能无法播放,如果它包含远程资源。

将值设置为@(AVAssetReferenceRestrictionForbidNone)应解决问题。