Как исключить STREAM_SYSTEM из REMOTE_SUBMIX

Я пишу приложение для записи аудио с устройства, используя REMOTE_SUBMIX. Согласно этой странице говорится, что

Некоторые потоки исключены из удаленного сабмикса, включая STREAM_RING, STREAM_ALARM и STREAM_NOTIFICATION. Эти потоки будут по-прежнему представлены локально, как обычно.

Теперь я хочу также исключить STREAM_SYSTEM, но не могу найти, где эта политика / стратегия определена в исходном коде AOSP или в любом файле конфигурации.

Кто-нибудь знает какие-либо подсказки об этом? Большое спасибо.

1 ответ

Решение

Он находится в служебном коде аудиополии (если вы не используете устройство Intel, использующее код маршрутизации на основе Parameter Framework, то оно находится в файле конфигурации).

Я думаю, что код, который вас интересует, находится здесь:

https://android.googlesource.com/platform/frameworks/av/+/android-8.0.0_r1/services/audiopolicy/enginedefault/src/Engine.cpp#477

Аудиополитика работает следующим образом: сначала она находит "стратегию" для потока, используя Engine::getStrategyForStream функция, то она переходит в Engine::getDeviceForStrategyInt выбрать устройство для этой стратегии.

Кажется, что оба STREAM_SYSTEM а также STREAM_MUSIC использовать то же самое STRATEGY_MEDIA:

https://android.googlesource.com/platform/frameworks/av/+/android-8.0.0_r1/services/audiopolicy/enginedefault/src/Engine.cpp#180

Поэтому вам придется что-то изменить, если вы хотите исключить системный звук, но оставить воспроизведение музыки на удаленном сабмиксе.

Другие вопросы по тегам