2012-03-29 8 views
2

私はその活動(録画)を記録し、YouTubeにアップロードするiphoneアプリを開発しています。まず、ビデオのアップロード前にサウンドがないので、アプリはビデオといくつかのサウンドをミックスします。出力ビデオは私のiPhoneとipadで何の問題もなく再生されますが、アップロードされたビデオはサウンドなしで再生されます(起動時にのみ音が鳴ります)。私のビデオフォーマットは.movです。 音と映像をミックスするために私のコードは私のコードが間違っている何iphone appからyoutubeにアップロードされたビデオは音がありません

as in purplelilgirl's tutorial

-(NSString*) processVideo: (NSURL*) videoUrl{ NSLog(@"started processing %@",videoUrl); 
    AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL: videoUrl options:nil]; 

    AVMutableComposition* mixComposition = [AVMutableComposition composition]; 


    NSError * error = nil; 

    for (NSMutableDictionary * audioInfo in audioInfoArray){ 
     // NSString *pathString = [[NSHomeDirectory() stringByAppendingString:@"/Documents/"] stringByAppendingString: [audioInfo objectForKey: @"fileName"]]; 
     // NSString *pathString = [audioInfo objectForKey: @"filePath"]; 
     NSURL *audioUrl=[audioInfo objectForKey: @"filePath"]; 
     // NSLog(@"audioUrl %@",audioUrl); 
     AVURLAsset * urlAsset = [AVURLAsset URLAssetWithURL:audioUrl options:nil]; 

     AVAssetTrack * audioAssetTrack = [[urlAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 
     AVMutableCompositionTrack *compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio 
                         preferredTrackID: kCMPersistentTrackID_Invalid]; 

     // NSLog(@"%lf", [[audioInfo objectForKey: @"startTime"] doubleValue]); 

     CMTime audioStartTime = CMTimeMake(([[audioInfo objectForKey: @"startTime"] doubleValue]*TIME_SCALE), TIME_SCALE); 

     [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,urlAsset.duration) ofTrack:audioAssetTrack atTime:audioStartTime error:&error];  
    } 


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

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

    NSString* videoName = @"export.mov"; 

    NSString *exportPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] 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.outputFileType=AVFileTypeMPEG4; 
    NSLog(@"file type %@",_assetExport.outputFileType); 
    _assetExport.outputURL = exportUrl; 
    _assetExport.shouldOptimizeForNetworkUse = YES; 

    [_assetExport exportAsynchronouslyWithCompletionHandler: 
    ^(void) { 
     switch (_assetExport.status) 
     { 
      case AVAssetExportSessionStatusCompleted: 
       //export complete 
       NSLog(@"Export Complete"); 
       //[self uploadToYouTube]; 

       break; 
      case AVAssetExportSessionStatusFailed: 
       NSLog(@"Export Failed"); 
       NSLog(@"ExportSessionError: %@", [_assetExport.error localizedDescription]); 
       //export error (see exportSession.error) 
       break; 
      case AVAssetExportSessionStatusCancelled: 
       NSLog(@"Export cancelled"); 
       NSLog(@"ExportSessionError: %@", [_assetExport.error localizedDescription]); 
       //export cancelled 
       break; 
     } 
    }]; 
    NSLog(@"completed processing exportPath %@ ",exportPath); 
    return exportPath; 
} 

ですあなたは私と一緒にエンコードされたオーディオは何コーデック

答えて

2

助けることができますか?問題を引き起こす可能性のあるApple独自のコーデックを使用している場合、私はそれを理解しています。

+0

コーデックを設定する方法 – Johnykutty

関連する問題