2016-04-23 20 views
1

エラーと問題があります。変更したビデオをカメラロールに書き出したいのですが、書き出したビデオはカメラロールと互換性がありません。AVAssetExportSession - カメラロールと互換性のない書き出しビデオ

また、最初に録画した動画を削除して、複数回録画することもできますが、エラーが発生して意味がありません。コードのコメントを外すと、最終パスが存在しないことを示すエラーが表示されます。私は変更されたバージョンがエクスポートされる前にこれが最初の映画を削除すると仮定しています。しかし、削除コードがエクスポートコードの下にあるので、なぜそれが起こるのかわかりません。

は、ここでは、コードです:

// Create Date Formatter 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd-hh-mm-ss" 

    // Create Export Session 
    let exportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetHighestQuality) 
    exportSession?.videoComposition = videoComposition 
    do { 
     try exportSession?.outputURL = NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true).URLByAppendingPathComponent(dateFormatter.stringFromDate(NSDate())).URLByAppendingPathExtension("mov") 
    } 
    catch { 
     print(error) 
    } 
    exportSession?.outputFileType = AVFileTypeQuickTimeMovie 
    exportSession?.exportAsynchronouslyWithCompletionHandler({ 
     print("Output File Type: \(exportSession?.outputFileType)") 
     print("Output URL: \(exportSession?.outputURL?.absoluteString)") 
     print("Video Compatible W/ Camera Roll: \(exportSession?.asset.compatibleWithSavedPhotosAlbum)") 
     //-----SAVE----- 
     if exportSession?.status == AVAssetExportSessionStatus.Completed 
      { 
      print("Export Finished") 
      if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum((exportSession?.outputURL?.absoluteString)!) //Returns false... 
      { 
       UISaveVideoAtPathToSavedPhotosAlbum((exportSession?.outputURL?.absoluteString)!, self, nil, nil) 
       print("Video Saved") 
       // Show Message 
       self.showMessage() 
      } 
      else 
      { 
       print("Video Not Saved") 
      } 
     } 
     else if exportSession?.status == AVAssetExportSessionStatus.Failed 
     { 
      print("Export Error: \(exportSession?.error)") 
      print("Export Failed") 
     } 
     else 
     { 
      print("Export Cancelled") 
     } 
    }) 

    // The code below generates an error 
    // Remove Temporary Video 
//  do 
//  { 
//   try NSFileManager.defaultManager().removeItemAtURL(initialOutputURL) 
//  } 
//  catch 
//  { 
//   print(error) 
//  } 

だからここでの非互換性があるから?ログにはQuickTime形式と720x720解像度が表示されています。

答えて

0

私は最終的に答えを見つけました。それはあまり意味がありません。多分この問題に遭遇した人を助けるでしょう。

最初のビデオを削除するコードは、の内側にexportAsynchronouslyWithCompletionHandlerとしてください。

私はちょうど使用したビデオを保存するにはALAssetLibrary,および.writeVideoAtPathToSavedPhotosAlbumです。私はそれが推奨されていないことを知っていますが、私はiOS 7との互換性も求めています。 iOS 8以降をご希望の場合はPHPhotoLibraryをご利用ください。私の初期のコードとALAssetLibraryのバージョンが全く同じことをするので、これは非常に奇妙です。また、面白いのは、ビデオログがカメラのロールと互換性がないことがログに残っているということです。

最後にビデオを回転するときに90の代わりにCGFloat(M_PI_2)を使用します。

関連する問題