2015-10-06 18 views
7

ライブ写真からビデオ部分を抽出する方法を知りましたか?ライブフォトをGIFに変換するアプリを開発しています。最初のステップは、ライブフォトからビデオファイルを取得することです。あなたがMacにあなたの携帯電話を接続すると、あなたは別の画像とビデオファイルを見ることができるので、それが可能であるように思われる。私はちょうど抽出プロセスでレンガの壁にぶつかったし、私はそれを行うために多くの方法を試してみて、それらはすべて失敗する。ライブフォトからビデオ部分を抽出

私が最初にすることは、次の操作を実行して、私はLiveフォトの映像部分だと思う何のためにPHAssetを取得しました:

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

を私が試したAVAssetにPHAssetを変換するには:

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) 
     } 
    }) 

私はduration.valueとデバッグプリントは、私も「.MOV」を添加せずに試してみた、それはまだ動作しません0 を与えるので、この1つは機能しないと思います。

私も試してみました:それは動作しませんので

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

とdebugPrint(avAsset)はnilを出力します。

私はそれが不可能になってしまった可能性があることを恐れています.PHAssetのように見えるので、私はサークルに行っているようです。

答えて

16

PHAssetResourceManagerを使用して、ビデオファイルをPHAssetResourceから取得します。

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

これは9.1でのみ動作します。もっと一般的な解決策はありますか? – Idan

+12

ライブフォト向けのAPIは、iOS 9.1で導入されました – Hendrik

-2

私は偶然しました。私はWindowsのようなファイルマネージャを備えたGoodreader(アプリケーションストアで利用可能)と呼ばれるiosアプリケーションを持っています。ライブ写真を読み込むと、jpgファイルとmovファイルを含む.pvtで終わるフォルダとして保存されます。警告メッセージが1つしかありません。写真アプリからではなく、「goodreaderへの読み込み」オプションを表示するために、あなた自身または他の誰かに送信した後、メッセージアプリ内からライブ写真を開く必要があります。

2
// 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 
}