从iPhone应用上传到YouTube的视频没有声音

问题描述:

我正在开发一个iPhone应用程序,它会记录其活动(屏幕录制)并上传到YouTube。首先,视频在上传之前没有声音,应用会将视频混合一些声音。输出视频在我的iphone和ipad中播放没有任何问题,但上传的视频播放时没有声音(仅在启动时才有声音)。我的视频格式是.mov。 我的代码混合声音和视频是从iPhone应用上传到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; 
} 

什么是错我的代码,你可以帮我

的音频编码与解码器是什么?据我了解,如果您使用某种形式的苹果专有编解码器,可能会导致您的问题。

+0

我该如何设置编解码器 – Johnykutty 2012-03-29 08:36:45