AVPlayerLooper, AVComposition с AVMutableAudioMixInputParameters: объем нестабилен между циклами - PullRequest
0 голосов
/ 19 декабря 2018

Я использую AVPlayerLooper для зацикливания видео внутри AVPlayer.Видео на самом деле представляет собой композицию AVComposition, объединяющую две аудиодорожки и одну видеодорожку.

Я применяю два входных параметра аудиомикса к композиции, по одному для каждой аудиодорожки, чтобы управлять их соответствующей громкостью (используя метод setVolume ()).Также обратите внимание, что на одной из аудиотреков также имеется процессор с отводом для применения некоторых аудиофильтров с использованием специального свойства внутри входного параметра audiomix.

Кажется, все работает нормально, но я заметил проблему с громкостью:

Первый цикл в порядке и отображает ожидаемый объем, но объем следующих циклов кажется случайным, один цикл находится на ожидаемом уровне (скажем, 4,0 в setVolume ()), другойпо умолчанию (1.0).

Обратите внимание, что если я приглушу и включу AVPlayer во время воспроизведения в цикле, где громкость ниже ожидаемой, громкость возвращается к своему настроенному и ожидаемому значению.

Обратите внимание, что экспорт одной и той же композиции в файл (таким образом, из любого петлителя) с помощью AVAssetExportSession работает отлично, объем всегда соответствует ожидаемому.

Есть ли у вас какие-либо советы, которые помогутмне с этим вопросом?

1 Ответ

0 голосов
/ 21 декабря 2018

Все в этом звучит как ошибка (то есть первый цикл работает, AVAssetExportSession работает), плюс установка громкости AVMutableAudioMixInputParameters на значения вне задокументированного диапазона [0, 1] звучит как то, что можетпровоцируя странное поведение, ОДНАКО изменение флагов создания MTAudioProcessingTap с kMTAudioProcessingTapCreationFlag_PostEffects на kMTAudioProcessingTapCreationFlag_PreEffects, кажется, исправляет или, по крайней мере, обходит эту проблему.

Из заголовочного файла:

kMTAudioProcessingTapCreationFlag_PreEffects Указывает, что отвод обработки вставляется до каких-либо эффектов.
kMTAudioProcessingTapCreationFlag_PostEffects Указывает, что отвод обработки вставляется после любых эффектов.

Мое чтение таково, что меняются только два флага, которые получают первый укус при звуке: касание или AVAudioMix inputParameters (inputParameters не получают специальных флагов предшествованияпоэтому я предполагаю, что они применяются в порядке массива?).Ничто из всего этого не говорит о том, что конфигурация микса выбрасывается в определенный момент времени, поэтому я полагаю, что pre-fx просто позволяет избежать ошибочного, несчастного пути к коду.

Итак, я надеюсь, чтодля вас не проблема применить регулятор громкости после нажатия .Если это так, просто примените громкость внутри крана.

Но, чувак, неприятное взаимодействие между AVPlayerLooper, AVComposition и MTAudioProcessingTap?Хлоп.И флаги всегда являются красным флагом в дизайне API.

...