【问题标题】:video uploaded from iphone app to youtube have no sound从 iphone app 上传到 youtube 的视频没有声音
【发布时间】:2012-04-12 20:32:07
【问题描述】:

我正在开发一个 iphone 应用程序,它记录其活动(屏幕录制)并上传到 youtube。首先,视频没有声音,然后上传应用程序将一些声音与视频混合。输出视频在我的 iphone 和 ipad 中播放没有任何问题,但上传的视频播放时没有声音(仅在开始时有声音)。我的视频格式是 .mov。 我混合声音和视频的代码是

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;
}

我的代码有什么问题,你能帮帮我吗

【问题讨论】:

    标签: iphone objective-c youtube-api gdata-api


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 2011-11-21
      • 2018-01-07
      • 1970-01-01
      • 2015-03-23
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      相关资源
      最近更新 更多