我从ALAssetsLibrary中提取所有视频资源(基本上是从本机相机应用程序录制的所有内容)。然后,我在每个视频资产上运行枚举,对每个视频执行此操作:
// The end of the enumeration is signaled by asset == nil.
if (alAsset) {
//Get the URL location of the video
ALAssetRepresentation *representation = [alAsset defaultRepresentation];
NSURL *url = [representation url];
//Create an AVAsset from the given URL
NSDictionary *asset_options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
AVAsset *avAsset = [[AVURLAsset alloc] initWithURL:url options:asset_options];//[AVURLAsset URLAssetWithURL:url options:asset_options];
//Here is the problem
NSLog([NSString stringWithFormat:@"%i", [avAsset.tracks count]]);
NSLog([NSString stringWithFormat:@"%f", CMTimeGetSeconds(avAsset.duration)]);
}
NSLog报告我从ALAsset获得的AVAsset有0个音轨,持续时间为0.0秒。我检查了网址,它的“资产 - 库://asset/asset.MOV?id = 9F482CF8-B4F6-40C2-A687-0D05F5F25529& ext = MOV”似乎是正确的。我知道alAsset实际上是一个视频和正确的视频,因为我已经显示了alAsset.thumbnail,并且它显示了视频的正确缩略图。
这一切让我相信avAsset的初始化出现了问题,但对于我的生活,我无法弄清楚出了什么问题。任何人都可以帮助我吗?
更新
我想我已经确认ALAssetRepresentation给我的网址是错误的,这很奇怪,因为它给了我正确的缩略图。我在下面添加了这段代码:
NSLog([NSString stringWithFormat:@"%i", [url checkResourceIsReachableAndReturnError:&error]]);
NSLog([NSString stringWithFormat:@"%@", error]);
它给了我这个:
0
Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn’t be completed. (Cocoa error 4.)" UserInfo=0x19df60 {}
我仍然不确定会导致什么。我唯一注意到的是网址,“资产库://asset/asset.MOV?id = 9F482CF8-B4F6-40C2-A687-0D05F5F25529& ext = MOV”与我所看到的不同因为我一直在寻找这个。我在其他地方看到的那个看起来更像是“assets-library://asset/asset.MOV?id = 1000000394& ext = MOV”,带有数字而不是字母数字,短划线名称。
如果有帮助,我正在使用XCode 4.2 Beta和iOS5。如果你能想到什么,请告诉我。感谢。
答案 0 :(得分:0)
好的,看起来它是iOS5 beta v1中的一个错误。我升级到最新版本并且工作正常。感谢那些看过我问题的人。