从ALAsset网址的iOS
问题描述:
获取视频的NSData我无法从我从ALAsset从ALAsset网址的iOS
下面让网址检索NSData的是我试过的代码: - 我总是得到的NSData为为零。
NSData *webData = [NSData dataWithContentsOfURL:[asset defaultRepresentation].url];
我也尝试过这样的事情
NSData *webData1 = [NSData dataWithContentsOfURL:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]]];
的网址,我从ALAsset得到: -
资产库://asset/asset.MOV ID = 1000000116 & ext = MOV
我已经尝试了下面这个链接,但是我需要不必写入到非常耗时的临时位置。
在正确的方向的任何暗示将高度赞赏。
等待您的答复
答
试试这个代码: -
ALAssetRepresentation *rep = [asset defaultRepresentation];
Byte *buffer = (Byte*)malloc((NSUInteger)rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:(NSUInteger)rep.size error:nil];
NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];
答
字节缓冲=(字节)的malloc(rep.size);如果rep.size如此之大,可能是300M,那将会崩溃。所以试试这个代码:
+ (BOOL)writeDataToPath:(NSString*)filePath andAsset:(ALAsset*)asset
{
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
if (!handle) {
return NO;
}
static const NSUInteger BufferSize = 1024*1024;
ALAssetRepresentation *rep = [asset defaultRepresentation];
uint8_t *buffer = calloc(BufferSize, sizeof(*buffer));
NSUInteger offset = 0, bytesRead = 0;
do {
@try {
bytesRead = [rep getBytes:buffer fromOffset:offset length:BufferSize error:nil];
[handle writeData:[NSData dataWithBytesNoCopy:buffer length:bytesRead freeWhenDone:NO]];
offset += bytesRead;
} @catch (NSException *exception) {
free(buffer);
return NO;
}
} while (bytesRead > 0);
free(buffer);
return YES;
}
+0
谢谢。但是,我如何在这里添加元数据值?我真的需要写他们。 – 2014-10-27 10:30:36
感谢它的工作:)我希望,因为你r使用dataWithBytesNoCopy:freeWhenDone:我们不需要明确释放“缓冲区”? – Ekra 2012-01-10 11:02:34
它不会产生任何问题。 – Leena 2012-01-10 11:08:52
工作正常....... leeeeena .... :) – Rajneesh071 2012-10-08 13:25:19