2012-04-27 12 views
3

オーディオファイルをビデオファイルとマージしようとしています。オーディオとビデオのマージ

AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audioUrl options:nil]; 
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoUrl options:nil]; 

AVMutableComposition* mixComposition = [AVMutableComposition composition]; 

AVMutableCompositionTrack *compositionCommentaryTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio 
                        preferredTrackID:kCMPersistentTrackID_Invalid]; 
[compositionCommentaryTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration) 
            ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] 
            atTime:kCMTimeZero error:nil]; 

AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo 
                        preferredTrackID:kCMPersistentTrackID_Invalid]; 
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) 
           ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
           atTime:kCMTimeZero error:nil]; 

AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition 
                     presetName:AVAssetExportPresetHighestQuality]; 

NSString* videoName = @"export.mov"; 

NSString *exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName]; 
NSURL *exportUrl = [NSURL fileURLWithPath:exportPath]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) 
{ 
    [[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil]; 
} 

_assetExport.outputFileType = @"com.apple.quicktime-movie"; 
_assetExport.outputURL = exportUrl; 
_assetExport.shouldOptimizeForNetworkUse = YES; 

[_assetExport exportAsynchronouslyWithCompletionHandler: 
^(void) {  
      // your completion code here 
    }  
} 
]; 

すべてが正常に動作するようですが、私は、このコードが動作しない理由を知らない: はここに私の努力です! 私はオーディオとビデオの両方の資産を取得しています。しかし、私は輸出セッションを作成することができません。

答えて

2

を使用すると、完了コードに

[_assetExport exportAsynchronouslyWithCompletionHandler: 
    ^(void) { 
     switch (_assetExport.status) 
     { 
      case AVAssetExportSessionStatusFailed: 
      { 
       NSLog (@"FAIL %@",_assetExport.error); 
       break; 
      } 
      case AVAssetExportSessionStatusCompleted: 
      { 
       break; 
      } 
      case AVAssetExportSessionStatusCancelled: 
      { 
       NSLog (@"CANCELED"); 
       break; 
      } 
     } 
     NSLog(@"Export Status %d-- %@", _assetExport.status, _assetExport.outputURL); 
     } 
    ];  
+0

感謝を使用してエラーを取得することができれば、これは私のコードを追跡するために私を助けるかもしれないもチェックAVAssetExportPresetPassthrough

を使用してみてください:) –

+0

こんにちは、あなたは私を助けてくださいことはできますか?このコードを使用しましたが、ファイルをマージする際にビデオを取得できません。 assetSessionのAVAssetExportSessionStatusCompletedステータスを取得できますが、ビデオを見ることはできません。私は私のビデオファイルをチェックして、それは適切です..私のオーディオファイルも適切です...しかし、両方のビデオが表示されていない合併しています....あなたは何が問題になるか教えていただけますか? – DShah

関連する問題