2012-03-29 263 views
2

我正在開發一個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; 
} 

什麼是錯我的代碼,你可以幫我

回答

2

的音頻編碼與解碼器是什麼?據我瞭解,如果您使用某種形式的蘋果專有編解碼器,可能會導致您的問題。

+0

我該如何設置編解碼器 – Johnykutty 2012-03-29 08:36:45

相關問題