Extraer porción de video de Live Photo

¿Alguien ha descubierto cómo extraer la porción de video de una Live Photo? Estoy trabajando en una aplicación para convertir Live Photos en un GIF, y el primer paso es get el file de video de Live Photo. Parece que debería ser posible, porque si conecta su teléfono a una Mac, puede ver la image por separado y los files de video. Me he topado con un muro de ladrillos en el process de extracción, y he intentado muchas forms de hacerlo y todos fallan.

Lo primero que hice fue get un PHAsset para lo que creo que es la parte de video de Live Photo, haciendo lo siguiente:

if let livePhoto = info["UIImagePickerControllerLivePhoto"] as? PHLivePhoto { let assetResources = PHAssetResource.assetResourcesForLivePhoto(livePhoto) for assetRes in assetResources { if (assetRes.type == .PairdVideo) { let assets = PHAsset.fetchAssetsWithLocalIdentifiers([assetRes.assetLocalIdentifier], options: nil) if let asset = assets.firstObject as? PHAsset { 

Para convertir el PHAsset a un AVAsset he intentado:

  asset.requestContentEditingInputWithOptions(nil, completionHandler: { (contentEditingInput, info) -> Void in if let url = contentEditingInput?.fullSizeImageURL { let movieUrl = url.absoluteString + ".mov" let avAsset = AVURLAsset(URL: NSURL(fileURLWithPath: movieUrl), options: nil) debugPrint(avAsset) debugPrint(avAsset.duration.value) } }) 

No creo que esto funcione porque la printing de debugging con duration.value da 0. También he intentado sin la adición ".mov" y todavía no funciona.

También probé:

  PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: { (avAsset, audioMix, info) -> Void in debugPrint(avAsset) }) 

Y el debugPrint (avAsset) imprime nil para que no funcione.

Me da miedo que hayan hecho imposible hacerlo, parece que voy en círculos, ya que parece que el PHAsset que tengo es todavía una foto en vivo y no un video.

Utilice el PHAssetResourceManager para get el file de video de PHAssetResource .

 PHAssetResourceManager.defaultManager().writeDataForAssetResource(assetRes, toFile: fileURL, options: nil, completionHandler: { // Video file has been written to path specified via fileURL } 
 // suppose you have PHAsset instance (you can get it via [PHAsset fetchAssetsWithOptions:...]) PHAssetResource *videoResource = nil; NSArray *resourcesArray = [PHAssetResource assetResourcesForAsset:asset]; const NSInteger livePhotoAssetResourcesCount = 2; const NSInteger videoPartIndex = 1; if (resourcesArray.count == livePhotoAssetResourcesCount) { videoResource = resourcesArray[videoPartIndex]; } if (videoResource) { NSString * const fileURLKey = @"_fileURL"; NSURL *videoURL = [videoResource valueForKey:fileURLKey]; // load video url using AVKit or AVFoundation } 

Accidentalmente lo hice Tengo una aplicación ios llamada Goodreader (disponible en la tienda de aplicaciones) que presenta un gestor de files similar a Windows. Al importar una foto en vivo, la saveá como una carpeta que termina en .pvt que contiene los files jpg y mov en ella. Solo hay una advertencia: debes abrir la foto en vivo desde la aplicación de posts después de que la hayas enviado a ti o a alguien más para ver la opción "importar a buena fuente", no desde la aplicación de fotos.