【问题标题】:How can merge audio and video in iphone sdk如何在 iphone sdk 中合并音频和视频
【发布时间】:2024-04-11 23:45:03
【问题描述】:

我正在创建一个项目,我在目标 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]

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


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

【问题讨论】:

    标签: ios iphone objective-c audio video


    【解决方案1】:

    这样的话

    [[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]

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

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

    【讨论】: