2017-10-13 15 views
0

カメラを使ってビデオを録画し、自分のドキュメントフォルダに保存しています。私が直面している問題は、カメラから取得したビデオが.aviファイルであり、.mp4(または他の許可された形式)に変換する必要があることです。iOS objective-cで.aviを.mp4に変換できませんでした

私は以下のコードを使用します。
SOURCE:iOS Convert AVI to MP4 Format programatically

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"MyVideo.mp4"]; 
NSURL *outputURL = [NSURL fileURLWithPath:filePath]; 

[self convertVideoToLowQuailtyWithInputURL:localUrl outputURL:outputURL handler:^(AVAssetExportSession *exportSession) 
{ 
    if (exportSession.status == AVAssetExportSessionStatusCompleted) { 
     // Video conversation completed 
    }   
}]; 

- (void)convertVideoToLowQuailtyWithInputURL:(NSURL*)inputURL outputURL:(NSURL*)outputURL handler:(void (^)(AVAssetExportSession*))handler { 
    [[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil]; 
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil]; 
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetPassthrough]; 
    exportSession.outputURL = outputURL; 
    exportSession.outputFileType = AVFileTypeMPEG4; 
    [exportSession exportAsynchronouslyWithCompletionHandler:^(void) { 
     handler(exportSession); 
    }]; 
} 

exportSession状況は常に失敗します。しかし、私が.movを.mp4に変換しようとするとうまくいきません。

どのように.aviファイルを.mp4ファイルに変換できないのですか?

+0

AVIビデオ内のビデオコーデックとは何ですか? AVIの詳細がわからない場合は、** MediaInfo **のようなツールを使用してください( 'text'モードにチェックしてください)。 –

+0

MediaInfoが私に与える情報: 275 kb/s、640x480(4:3)、10.000 FPS、AVS(ベースライン@L3)(1 Refフレーム)@ VC.One – Milander

+0

_ "** AVS **(ベースライン@ L3) "_?それはタイプミスですか?実際にあなたが** AVC **を意味したら、あなたはMP4コンテナ用の互換性のあるビデオコーデックを持っています...正しいコーデック(AACまたはMP3)でサウンドもありますか? _「exportSessionのステータスは常に失敗します」_他の有用なエラーメッセージはありませんか?問題がビデオコーデックではなく、オーディオコーデックでない場合、問題はAVIファイルそのものでなければなりません。カメラブランドはまた、奇妙なカスタムAVIコンテナバイトを作成している可能性があります。 –

答えて

0

エラーメッセージを印刷してみます:

switch ([exportSession status]) { 
     case AVAssetExportSessionStatusFailed: 
      NSLog(@"Export failed: %@", [[exportSession error] localizedDescription]); 
      break; 
     case AVAssetExportSessionStatusCancelled: 
      NSLog(@"Export canceled"); 
      break; 
      case AVAssetExportSessionStatusCompleted: 
      NSLog(@"Successfully"); 
      break; 
     default: 
      break; 
     } 

    }]; 
} 
+0

はい、あなたが正しいです、これは私の最初の答えです、私はフォーマットを変更しました – CharmingQin

+0

問題は、localizedDescriptionは本当に有用ではないということです。 出力は「エクスポートに失敗しました:操作を完了できませんでした」です。 – Milander

+0

@Milander thx – CharmingQin

関連する問題