Noa*_*oon 40 video avfoundation ipad ios4 ios
我正在尝试将视频文件加载到我的iPad应用程序中AVURLAsset,使用异步加载的东西等待它准备好.问题是,当我运行它时,我得到一个完全通用的"失败"错误消息,我不知道该怎么做.如果我把它交给一个视频MPMoviePlayerController,但是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是"未知错误"的错误代码.有点死路一条.有任何想法吗?在我尝试加载资产之前,我应该设置一些东西吗?
Noa*_*oon 116
解决了.诀窍:使用fileURLWithPath:,而不是URLWithString:.显然,差异确实非常重要.
如果任何人在使用fileURLWithPath后仍然遇到此问题,请尝试在时间数组中请求NSTimeIntervals(如果您使用的是int).
这不起作用:
    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:]创建URL并仍然得到相同的错误.
检查AVURLAssetReferenceRestrictionsKey,如果本地m3u8包含远程资源,则可能无法播放.
设置值@(AVAssetReferenceRestrictionForbidNone)应解决问题.
| 归档时间: | 
 | 
| 查看次数: | 30288 次 | 
| 最近记录: |