从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

我已经尝试了下面这个链接,但是我需要不必写入到非常耗时的临时位置。

Getting video from ALAsset

在正确的方向的任何暗示将高度赞赏。

等待您的答复

试试这个代码: -

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]; 
+0

感谢它的工作:)我希望,因为你r使用dataWithBytesNoCopy:freeWhenDone:我们不需要明确释放“缓冲区”? – Ekra 2012-01-10 11:02:34

+1

它不会产生任何问题。 – Leena 2012-01-10 11:08:52

+1

工作正常....... leeeeena .... :) – Rajneesh071 2012-10-08 13:25:19

字节缓冲=(字节)的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