如何在 iphone sdk 中合并音频和视频

Posted

技术标签:

【中文标题】如何在 iphone sdk 中合并音频和视频【英文标题】:How can merge audio and video in iphone sdk 【发布时间】:2013-12-19 09:44:14 【问题描述】:

我正在创建一个项目,我在目标 c 中使用以下代码合并视频和音频。

AVMutableComposition* mixComposition = [AVMutableComposition composition];
NSString *audio_inputFilePath = [libraryDirectory stringByAppendingPathComponent:@"SelectedSong.wav"];
NSURL    *audio_inputFileUrl = [NSURL fileURLWithPath:audio_inputFilePath];
AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audio_inputFileUrl options:nil];

NSString *videoOutputPath = [libraryDirectory stringByAppendingPathComponent:@"Video.mp4"];
NSURL    *video_inputFileUrl = [NSURL fileURLWithPath:videoOutputPath];
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:video_inputFileUrl options:nil];

CMTimeRange video_timeRange = CMTimeRangeMake(kCMTimeZero,videoAsset.duration);

AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];

[a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];

AVMutableCompositionTrack *b_compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];

AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality];
_assetExport.outputFileType = @"com.apple.quicktime-movie";
//_assetExport.outputFileType = AVFileTypeMPEG4 ;
//NSLog(@"support file types= %@", [_assetExport supportedFileTypes]);
_assetExport.outputURL = outputFileUrl;

[_assetExport exportAsynchronouslyWithCompletionHandler:^
        ;

但是

 [[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]

它在设备中返回空数组。 在模拟器中检查时它工作正常。


所以请帮助我如何解决它。

【问题讨论】:

【参考方案1】:

这样的话

[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]

[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:nextClipStartTime error:nil];这无法读取数组。

因为特定文件中不存在声音/音频。仅在特定多媒体文件中不存在声音/音频的情况下才会出现此错误。

【讨论】:

以上是关于如何在 iphone sdk 中合并音频和视频的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iphone sdk 中同时进行输出音频电平测量和音高变化

如何在ffmpeg中合并音频和两个视频文件?

如何在iphone中同时播放音频和视频

如何在合并音频和视频时循环播放音频

在 iPhone 5s 上合并音频到视频的问题

如何在Windows Phone 8中合并音频和视频[关闭]