Obtenga video NSData desde ALAsset url iOS

No puedo recuperar NSData de la url que obtengo de ALAsset

A continuación se muestra el código que probé: – Siempre obtengo NSData como nulo.

NSData *webData = [NSData dataWithContentsOfURL:[asset defaultRepresentation].url]; 

También probé algo como esto

  NSData *webData1 = [NSData dataWithContentsOfURL:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]]]; 

La URL que obtengo del ALAsset:

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

He probado este enlace a continuación que funciona pero necesito escribir innecesariamente en una location temporal que consume mucho time.

Obtener video de ALAsset

Cualquier sugerencia en la dirección correcta sería muy apreciada.

Esperando tus respuestas

testing este código:

 ALAssetRepresentation *rep = [asset defaultRepresentation]; Byte *buffer = (Byte*)malloc((NSUInteger)rep.size); NSUInteger buffenetworking = [rep getBytes:buffer fromOffset:0.0 length:(NSUInteger)rep.size error:nil]; NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffenetworking freeWhenDone:YES]; 

Byte buffer = (Byte ) malloc (rep.size); si el tamaño de rep.size es tan grande, tal vez 300M, eso será un error. así que testing este código:

 + (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; }