AVMutableAudioMix - не может исчезнуть - PullRequest
2 голосов
/ 14 января 2012

Я пытаюсь затушить дорожку AVComposition (это звуковая дорожка для видео).

Я могу начать с нуля без проблем, но у меня много проблем с постепенным исчезновением в конце. Вот мой код:

AVMutableAudioMixInputParameters *audioMixParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:compositionAudioTrack];

[audioMixParameters setVolume:0.0 atTime:kCMTimeZero];
[audioMixParameters setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMake(150, kVideoFPS))];

CMTime fadeOutBegin = CMTimeMake((length - 5) * kVideoFPS, kVideoFPS);
[audioMixParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:CMTimeRangeMake(fadeOutBegin, totalDuration)];

AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
audioMix.inputParameters = [NSArray arrayWithObject:audioMixParameters];

length - это NSUInteger, который представляет собой длину видео в секундах.

totalDuration - это CMTime общей продолжительности видео с временной шкалой kVideoFPS

kVideoFPS является константой со значением 30

Моя цель - начать затухание через 5 секунд после окончания композиции. Я пробовал все виды вещей, таких как CMTimeMakeWithSeconds. Я также поменял местами значения постепенного изменения, и оно работает нормально (уменьшение громкости с 1,0 до 0,0 в самом начале).

Любые мысли с благодарностью!

Ответы [ 2 ]

1 голос
/ 15 декабря 2017

Для тех, кто сталкивается с проблемами при использовании AVAudioMix / AVMutableAudioMix в сочетании с потоковым мультимедиа, имейте в виду, что для Apple в настоящее время он поддерживает только файл ресурсы на основе.

Источник:

https://developer.apple.com/library/content/qa/qa1716/_index.html

(в нижней части технической записки)

0 голосов
/ 11 января 2017

Второй параметр CMTimeRangeMake - это длительность CMTimeRange, а не время окончания временного диапазона ( ref ):

CMTimeRange CMTimeRangeMake(CMTime start, CMTime duration);

Попробуйте потухнуть за последние 5 секунд композиции:

CMTime fadeOutEnd = CMTimeMake(5 * kVideoFPS, kVideoFPS);
[audioMixParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:CMTimeRangeMake(fadeOutBegin, fadeOutEnd)];
...