2016-12-19 5 views
2

Я пытаюсь понять это, но не могу найти полезной информации. я нашел только это:Как получить видео с Live Photo в iOS

PHAssetResourceManager.defaultManager().writeDataForAssetResource(assetRes, 
toFile: fileURL, options: nil, completionHandler: 
{ 
    // Video file has been written to path specified via fileURL 
} 

, но мне стыдно сказать, что я понятия не имею, как играть его. Я создал UIImagePickerController и загрузил изображение из рулона камеры.

ответ

2

Используйте этот код, чтобы получить видео с живого фото:

- (void)videoUrlForLivePhotoAsset:(PHAsset*)asset withCompletionBlock:(void (^)(NSURL* url))completionBlock{ 
    if([asset isKindOfClass:[PHAsset class]]){ 
     NSString* identifier = [(PHAsset*)asset localIdentifier]; 
     NSString* filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mov",[NSString stringWithFormat:@"%.0f",[[NSDate date] timeIntervalSince1970]]]]; 
     NSURL *fileUrl = [NSURL fileURLWithPath:filePath]; 

     PHLivePhotoRequestOptions* options = [PHLivePhotoRequestOptions new]; 
     options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat; 
     options.networkAccessAllowed = YES; 
     [[PHImageManager defaultManager] requestLivePhotoForAsset:asset targetSize:[UIScreen mainScreen].bounds.size contentMode:PHImageContentModeDefault options:options resultHandler:^(PHLivePhoto * _Nullable livePhoto, NSDictionary * _Nullable info) { 
      if(livePhoto){ 
       NSArray* assetResources = [PHAssetResource assetResourcesForLivePhoto:livePhoto]; 
       PHAssetResource* videoResource = nil; 
       for(PHAssetResource* resource in assetResources){ 
        if (resource.type == PHAssetResourceTypePairedVideo) { 
         videoResource = resource; 
         break; 
        } 
       } 
       if(videoResource){ 
        [[PHAssetResourceManager defaultManager] writeDataForAssetResource:videoResource toFile:fileUrl options:nil completionHandler:^(NSError * _Nullable error) { 
         if(!error){ 
          completionBlock(fileUrl); 
         }else{ 
          completionBlock(nil); 
         } 
        }]; 
       }else{ 
        completionBlock(nil); 
       } 
      }else{ 
       completionBlock(nil); 
      } 
     }]; 
    }else{ 
     completionBlock(nil); 
    } 
} 

в основном то, что вам нужно сделать, это то, что вам сначала нужно принести PHLivePhoto объект из PHAsset. После этого вам нужно будет перемещать все ресурсы ресурсов в вашей живой фотографии и проверить, имеет ли он тип PHAssetResourceTypePairedVideo.

Если да, вы получили свое видео. Теперь вам нужно будет сохранить его в какой-то временной директории, как я здесь, и использовать этот файл в любых целях.

играть это видео, вы можете использовать следующий код:

NSURL *videoURL = [NSURL fileURLWithPath:fileUrl]; 
AVPlayer *player = [AVPlayer playerWithURL:videoURL]; 
AVPlayerViewController *playerViewController = [AVPlayerViewController new]; 
playerViewController.player = player; 
[self presentViewController:playerViewController animated:YES completion:nil]; 

Не стесняйтесь спрашивать, если вам нужно какое-либо разъяснение.

P.S.- Я сделал несколько изменений в этом методе, чтобы удалить зависимость кода моего приложения, поэтому вышеуказанный код не проверен, однако я считаю, что он должен работать должным образом.

1

вопрос немного запутанным

Во-первых, если вы хотите, чтобы выбрать живую фотографию и играть живые photo.I рекомендуем использовать Photos Framework вместо UIImagePickerController. Таким образом, вы можете получить актив и получить больше контроля. Затем вы можете воспроизвести живое фото как mov или заглушенное исполнение с PHLivePhotoView, установив startPlayback(with:) на hint или full.

Вы можете передать код здесь:

  • GitHub репо LivePreview показать вам, как выбрать живую фотографию и воспроизвести его.

Во-вторых, если вы хотите конвертировать живую фотографию в мов, вставленный код будет работать, и если вы хотите играть мов напрямую, вы можете использовать AVPlayer

Plus, WWDC обеспечивает Example app using Photos framework

 Смежные вопросы

  • Нет связанных вопросов^_^