ios - 如何在iPhone SDK中合并音频和视频

标签 ios iphone objective-c audio video

我正在创建一个项目,在其中我使用 objective-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]

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

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

最佳答案

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

因为特定文件中没有声音/音频。仅在那些情况下,当垂直多媒体文件中没有声音/音频时,才会出现此错误。

关于ios - 如何在iPhone SDK中合并音频和视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678117/

相关文章:

ios - 如何在 iOS 中将 UIBezierPath 绘制到图像上?

ios - 动态设置放置在 UIScrollView 中的 UITableView 的框架大小

ios - 是否可以在 iphone 上的多个应用程序之间共享守护进程?

ios - 如何动态计算 UILabel 高度

ios - 我们应该将 pod 文件提交到版本控制系统(GIT 还是 SVN)

iphone - objective-c : How to find heading (direction) from location services?

ios - 如何在 ios 中重新注册推送通知

iphone - 如何禁用 iphone 中的多个按钮?

ios - HockeySDK 警告 - 如何测试崩溃报告?

ios - 在Mapbox iOS上使用缩放级别更新SymbolLayer iconImageName