Suba videos desde la galería utilizando el marco de fotos.

¿Cuál es la mejor forma de upload videos desde la galería usando Photos framework? Antes de usar ALAssetRepresentation y el siguiente método:

- (NSUInteger)getBytes:(uint8_t *)buffer fromOffset:(long long)offset length:(NSUInteger)length error:(NSError **)error; 

esto permitió cargar el file sin copyrlo primero en el directory temporal de la aplicación. No ve ninguna alternativa en el marco de fotos. La única forma parece utilizar AVAssetExportSession -> exportar al directory local -> cargar, pero esto requiere espacio de almacenamiento adicional (podría ser un problema, si el video es demasiado grande)

Parece que la única forma válida es solicitar AVAsset de PHImageManager y comprobar si el activo devuelto es AVURLAsset . En este caso, la URL se puede usar para acceder directamente al file y get el pedazo de bytes necesario:

 [[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) { if ([asset isKindOfClass:[AVURLAsset class]]) { NSURL *URL = [(AVURLAsset *)asset URL]; // use URL to get file content } }]; 

Esto no funcionará con videos a camera lenta, ya que se AVComposition lugar de AVURLAsset . La posible solución es utilizar la versión del file de video PHVideoRequestOptionsVersionOriginal :

 PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init]; options.version = PHVideoRequestOptionsVersionOriginal; [[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) { if ([asset isKindOfClass:[AVURLAsset class]]) { NSURL *URL = [(AVURLAsset *)asset URL]; // use URL to get file content } }]; 

Y para get una image de tamaño completo url:

 PHContentEditingInputRequestOptions *options = [[PHContentEditingInputRequestOptions alloc] init]; options.canHandleAdjustmentData = ^BOOL(PHAdjustmentData *adjustmentData) { return YES; }; [imageAsset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) { // use contentEditingInput.fullSizeImageURL }];