1

我想将视频从资产 url 保存到我的应用程序文档中。我的资产网址如下:-

"assets-library://asset/asset.MOV?id=1000000394&ext=MOV"

我试过这个: -

NSString *str=@"assets-library://asset/asset.MOV?id=1000000394&ext=MOV";
NSData *videoData = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
[videoData writeToFile:mypath atomically:YES];

但是在第二行 [NSData dataWithContentsOfURL:[NSURL URLWithString:str]] 我得到了程序崩溃,原因是:- 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSURL 长度]:无法识别的选择器发送到实例

我想知道如何访问资产视频网址。

感谢任何帮助。

4

2 回答 2

16

我认为您最好的选择是使用该方法

getBytes:fromOffset:length:error:

ALAssetRepresentation

您可以像这样获得资产的默认表示

ALAssetRepresentation *representation = [someVideoAsset defaultRepresentation];

所以在我的脑海中它应该是这样的(我远离我的Mac所以这还没有经过测试

ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];
[assetLibrary assetForURL:videoUrl resultBlock:^(ALAsset *asset) {
    ALAssetRepresentation *rep = [asset defaultRepresentation];
    Byte *buffer = (Byte*)malloc(rep.size);
    NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
    NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];
    [data writeToFile:filePath atomically:YES];
} errorBlock:^(NSError *err) {
    NSLog(@"Error: %@",[err localizedDescription]);
}];

其中videoUrl是您尝试复制的视频的资产 url,而filePath是您尝试将其保存到的路径。

于 2011-07-04T09:53:13.670 回答
2

谢谢你..我需要改变的是

    errorBlock:^(NSError *err)

对此:

    failureBlock :^(NSError *err)
于 2012-01-18T20:25:24.527 回答