Как сохранить видео с URL ресурса - PullRequest
1 голос
/ 04 июля 2011

Я хочу сохранить видео в документ приложения из URL ресурса.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]: нераспознанный селектор отправлен в экземпляр

Я хочу знать, как получить доступ к ресурсуURL видео.

Спасибо за любую помощь.

Ответы [ 2 ]

16 голосов
/ 04 июля 2011

Я думаю, что вам лучше всего использовать метод

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 - это путь, куда вы пытаетесь его сохранить.

2 голосов
/ 19 января 2012

спасибо за это .. все, что мне нужно было изменить, это

    errorBlock:^(NSError *err)

на это:

    failureBlock :^(NSError *err)
...