AVPlayerLooper, AVComposition с AVMutableAudioMixInputParameters: объем нестабилен между циклами
Я использую AVPlayerLooper для зацикливания видео внутри AVPlayer. Видео на самом деле представляет собой композицию AVComposition, объединяющую две аудиодорожки и одну видеодорожку.
Я применяю два входных параметра аудиомикса к композиции, по одному для каждой звуковой дорожки, чтобы управлять их соответствующей громкостью (используя метод setVolume()). Также обратите внимание, что одна из звуковых дорожек также имеет процессор отводов для применения некоторых аудиофильтров, используя выделенное свойство внутри входного параметра audiomix.
Кажется, все работает нормально, но я заметил проблему с громкостью:
Первый цикл в порядке и отображает ожидаемый объем, но объем следующих циклов кажется случайным, один цикл находится на ожидаемом уровне (скажем, 4,0 в setVolume()), другой - по умолчанию (1,0).
Обратите внимание, что если я приглушу и включу AVPlayer во время воспроизведения в цикле, где громкость ниже ожидаемой, громкость возвращается к настроенному и ожидаемому значению.
Обратите внимание, что экспорт одной и той же композиции в файл (так что из любого петлителя) с помощью AVAssetExportSession работает отлично, объем всегда соответствует ожидаемому.
Есть ли у вас какие-либо советы, чтобы помочь мне с этой проблемой?
1 ответ
Все об этом звучит как ошибка (первый цикл работает, AVAssetExportSession
работает), плюс настройка громкости AVMutableAudioMixInputParameters
значения за пределами задокументированного диапазона [0, 1] звучат как то, что может вызвать странное поведение, ОДНАКО изменяя MTAudioProcessingTap
создание флагов из kMTAudioProcessingTapCreationFlag_PostEffects
в kMTAudioProcessingTapCreationFlag_PreEffects
кажется, исправить или, по крайней мере, обойти эту проблему.
Из заголовочного файла:
kMTAudioProcessingTapCreationFlag_PreEffects
Означает, что крана обработки вставлена до каких-либо эффектов.kMTAudioProcessingTapCreationFlag_PostEffects
Означает, что крана обработки вставляется после каких-либо эффектов.
Мое чтение этого - то, что только два флага изменяют, кто получает первый укус на аудио: сигнал или AVAudioMix
inputParameters
(inputParameters
не получить специальные флаги приоритета, поэтому я предполагаю, что они применяются в порядке массива?). Ничто из всего этого не говорит о том, что конфигурация микса выбрасывается в определенный момент времени, поэтому я полагаю, что pre-fx просто позволяет избежать ошибочного, несчастного пути кода.
Итак, в заключение, я надеюсь, что для вас не проблема применить регулятор громкости после нажатия. Если это так, просто примените громкость внутри крана.
Но человек, неприятное взаимодействие между AVPlayerLooper
, AVComposition
а также MTAudioProcessingTap
? Хлоп. И флаги всегда являются красным флагом в дизайне API.