在墙上撞了好几次并尝试了不同的处理方法,需要花费很长时间来处理(改变不同音量的MP3文件)我决定将这个问题发布给每个人,希望找到一个有答案的人。< / p>
我有一个AVMutableComposition,用于音频和视频的几个AVMutableCompositionTrack。混音工作正常,但音轨的音量调节不起作用,导出时失败。
以下是我使用的代码:
AVMutableComposition* mixComposition = [AVMutableComposition composition];
AVURLAsset *soundTrackAsset = [[AVURLAsset alloc]initWithURL:trackTempProcessedURL options:nil];
//ADDING AUDIO
AVMutableCompositionTrack *compositionAudioSoundTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:trackIDSoundTrack];
[compositionAudioSoundTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration)
ofTrack:[[soundTrackAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
atTime:CMTimeAdd(cmTimeDifference,startTime) error:nil];
NSArray *tracksToDuck = [mixComposition tracksWithMediaType:AVMediaTypeAudio];
NSMutableArray *trackMixArray = [NSMutableArray array];
for (NSInteger i = 0; i < [tracksToDuck count]; i++) {
AVMutableAudioMixInputParameters *trackMix = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:[tracksToDuck objectAtIndex:i]];
[trackMix setVolume:volume atTime:kCMTimeZero];
[trackMixArray addObject:trackMix];
}
audioMix = [AVMutableAudioMix audioMix];
audioMix.inputParameters = trackMixArray;
//ADDING VIDEO
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:frontAssetURL options:nil];
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
atTime:startTime error:nil];
//EXPORTING
_assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName: AVAssetExportPresetPassthrough];
_assetExport.outputFileType = AVFileTypeQuickTimeMovie;
_assetExport.outputURL = exportUrl;
_assetExport.shouldOptimizeForNetworkUse = YES;
_assetExport.audioMix = audioMix;
[_assetExport exportAsynchronouslyWithCompletionHandler:
^(void ) {
...
没有音频混音器,一切都很好混合但是当我尝试改变音量时,导出会给我一个错误:
AVFoundationErrorDomain Error: 11822
答案 0 :(得分:1)
AVMutableAudioMixInputParameters需要设置“trackID”来指示哪些音轨应该应用参数。
for (NSInteger i = 0; i < [tracksToDuck count]; i++) {
AVMutableAudioMixInputParameters *trackMix = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:[tracksToDuck objectAtIndex:i]];
[trackMix setVolume:volume atTime:kCMTimeZero];
//+++++code
AVMutableCompositionTrack * track = [tracksToDuck objectAtIndex:i]
[trackMix setTrackID:[track trackID]];
[trackMixArray addObject:trackMix];
}