Начиная с 2026 года, в соответствии с нашей моделью стабильной разработки основной ветки и для обеспечения стабильности платформы для экосистемы, мы будем публиковать исходный код в AOSP во 2-м и 4-м кварталах. Для сборки и внесения вклада в AOSP мы рекомендуем использовать android-latest-release вместо aosp-main . Ветка манифеста android-latest-release всегда будет ссылаться на самый последний релиз, выпущенный в AOSP. Для получения дополнительной информации см. раздел «Изменения в AOSP» .
Настройка политик аудио
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
В релизе Android 10 внесены существенные изменения в менеджер политик аудиосистемы, что обеспечивает большую гибкость для поддержки сложных сценариев использования в автомобильной сфере:
Стратегии маршрутизации, специфичные для конкретного производителя оборудования.
Настраиваемые группы объемов для групп устаревших типов потоков, использующих одни и те же кривые объема.
Стратегии маршрутизации задаются механизмом обработки аудиополитик, а не прописываются жестко в коде.
Кривые громкости и группы управляются механизмом политик звука.
Внутренняя рефакторизация, направленная на подготовку к будущему разделению кода на общий и настраиваемый, а также на предоставление более широких возможностей управления аудиоустройствами. Например, использование всех свойств устройства, а не только его типа, в правилах политики.
В Android 7.0 был представлен формат файла конфигурации политики аудио (XML) для описания топологии аудиосистемы.
В предыдущих версиях Android для объявления аудиоустройств, присутствующих в вашем устройстве, требовалось использовать device/<company>/<device>/audio/audio_policy.conf (пример этого файла для аудиооборудования Galaxy Nexus можно найти в device/samsung/tuna/audio/audio_policy.conf ). Однако CONF — это простой, проприетарный формат, слишком ограниченный для описания сложных топологий в таких отраслях, как телевизоры и автомобили.
В Android 7.0 файл audio_policy.conf был признан устаревшим, а также добавлена поддержка определения аудиотопологии с использованием XML-файла, который более удобочитаем, имеет широкий спектр инструментов редактирования и анализа и достаточно гибок для описания сложных аудиотопологий. В Android 7.0 для выбора XML-формата конфигурационных файлов используется флаг сборки USE_XML_AUDIO_POLICY_CONF .
Преимущества формата XML
Как и в файле CONF, файл XML позволяет определять количество и типы профилей выходного и входного потоков, устройства, используемые для воспроизведения и захвата, а также атрибуты звука. Кроме того, формат XML предлагает следующие улучшения:
В Android 10 разрешено одновременное использование более чем одного приложения для записи видео.
Начало записи никогда не отклоняется из-за параллельного выполнения операций.
Функция обратного вызова registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) уведомляет клиентов об изменениях пути захвата.
В следующих ситуациях клиент получает аудиозаписи без звука:
Активен сценарий использования, требующий защиты конфиденциальной информации (например, VOICE_COMMUNICATION ).
У клиента отсутствует служба или пользовательский интерфейс, работающие в фоновом режиме.
В соответствии с политикой признаются особые должностные обязанности:
Служба обеспечения доступности: может вести запись даже в случае активного использования, требующего защиты конфиденциальной информации.
Ассистент: Если поверх него находится элемент, представляющий угрозу конфиденциальности, он считается таковым.
Аудиопрофили имеют структуру, аналогичную простым аудиодескрипторам HDMI, что позволяет задавать разные наборы частот дискретизации/маск каналов для каждого аудиоформата.
Существуют четкие определения для всех возможных соединений между устройствами и потоками. Ранее неявное правило позволяло подключать все устройства, подключенные к одному и тому же модулю HAL, что препятствовало управлению соединениями, запрашиваемыми с помощью API аудиопатчей, политикой аудио. В формате XML описание топологии определяет ограничения на соединения.
Поддержка включает в себя возможность избежать повторного использования стандартных определений отправки A2DP, USB или переадресации.
Кривые объема можно настраивать. Ранее таблицы объема были жестко закодированы. В формате XML таблицы объема описываются и могут быть настроены.
В шаблоне, расположенном по адресу frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml показано использование многих из этих функций.
Формат и местоположение файла
Новый файл конфигурации политики аудио называется audio_policy_configuration.xml и находится в каталоге /system/etc . Следующие примеры демонстрируют простую конфигурацию политики аудио в формате XML-файла для Android 12 и для версий Android ниже 12.
Показать пример политики обработки звука для Android 12
Структура верхнего уровня содержит модули, соответствующие каждому аппаратному модулю аудио HAL, причем каждый модуль имеет список портов микширования, портов устройств и маршрутов:
Порты микширования описывают возможные профили конфигурации для потоков, которые могут быть открыты в аудио HAL для воспроизведения и захвата.
Порты устройств описывают устройства, которые можно подключить, указывая их тип (а также, при необходимости, адрес и аудиосвойства).
Параметр Routes отделен от дескриптора порта микширования, что позволяет описывать маршруты от устройства к устройству или от потока к устройству.
Таблицы громкости представляют собой простые списки точек, определяющих кривую, используемую для преобразования индекса пользовательского интерфейса в громкость в дБ. Отдельный файл включения предоставляет кривые по умолчанию, но каждую кривую для конкретного варианта использования и категории устройства можно переопределить.
Метод XML Inclusions (XInclude) можно использовать для включения информации о конфигурации аудиополитики, расположенной в других XML-файлах. Все включаемые файлы должны соответствовать описанной выше структуре со следующими ограничениями:
Файлы могут содержать только элементы верхнего уровня.
Файлы не могут содержать элементы XInclude.
Использование включений позволяет избежать копирования информации о конфигурации стандартного модуля аудио HAL проекта Android Open Source Project (AOSP) во все файлы конфигурации политики аудио (что чревато ошибками). Стандартный XML-файл конфигурации политики аудио предоставляется для следующих аудио HAL:
AudioPolicyManager.cpp разделён на несколько модулей для упрощения обслуживания и настройки. Структура папки frameworks/av/services/audiopolicy включает следующие модули.
Модуль
Описание
/managerdefault
Включает в себя общие интерфейсы и реализацию поведения, характерные для всех приложений. Аналогичен файлу AudioPolicyManager.cpp , но функциональность движка и общие концепции абстрагированы.
/common
Определяет базовые классы (например, структуры данных для профилей входного и выходного аудиопотока, дескрипторов аудиоустройств, аудиопатчей и аудиопортов). Ранее это было определено в файле AudioPolicyManager.cpp .
/engine
Реализует правила, определяющие, какое устройство и какие тома следует использовать для конкретного сценария использования. Он реализует стандартный интерфейс с универсальной частью, например, для получения подходящего устройства для конкретного сценария воспроизведения или захвата, или для установки подключенных устройств или внешнего состояния (то есть состояния вызова с принудительным использованием), которое может изменить решение о маршрутизации.
Реализация механизма политик, основанная на Parameter Framework (см. ниже). Конфигурация основана на Parameter Framework, а политики определяются XML-файлами.
/enginedefault
Реализация механизма политик основана на предыдущих реализациях Android Audio Policy Manager. Это вариант по умолчанию, включающий жестко закодированные правила, соответствующие реализациям Nexus и AOSP.
/service
Включает в себя интерфейсы связывания, многопоточность и реализацию блокировок, а также интерфейс для взаимодействия с остальной частью фреймворка.
Настройка с использованием Parameter Framework
Код политики управления звуком организован таким образом, чтобы его было легко понять и поддерживать, а также чтобы он поддерживал политику управления звуком, полностью определяемую конфигурационными файлами. Организация и проектирование политики управления звуком основаны на Intel Parameter Framework, системе на основе плагинов и правил для обработки параметров.
Использование настраиваемой политики аудио позволяет производителям оборудования:
Опишите структуру системы и её параметры в формате XML.
Напишите (на C++) или используйте повторно бэкэнд (плагин) для доступа к описанным параметрам.
Определите (в формате XML или на предметно-ориентированном языке) условия/правила, при которых данный параметр должен принимать заданное значение.
AOSP включает пример файла конфигурации аудиополитики, использующего Parameter Framework, по адресу Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml . Для получения более подробной информации обратитесь к документации Intel по Parameter Framework .
В Android 10 и более ранних версиях настраиваемая политика аудио выбирается с помощью параметра сборки USE_CONFIGURABLE_AUDIO_POLICY . В Android 11 и более поздних версиях версия механизма политики аудио выбирается в файле audio_policy_configuration.xml . Чтобы выбрать настраиваемый механизм политики аудио, установите значение атрибута engine_library элемента globalConfiguration равным configurable , как показано в следующем примере:
В Android 6.0 был представлен общедоступный API перечисления и выбора, который работает поверх инфраструктуры аудиопатчей/аудиопортов и позволяет разработчикам приложений указывать предпочтение для конкретного устройства вывода или ввода для подключенных аудиозаписей или треков.
В Android 7.0 API перечисления и выбора проверяется тестами CTS и расширен для включения маршрутизации нативных аудиопотоков C/C++ (OpenSL ES). Маршрутизация нативных потоков по-прежнему осуществляется на Java, с добавлением интерфейса AudioRouting , который заменяет, объединяет и объявляет устаревшими явные методы маршрутизации, специфичные для классов AudioTrack и AudioRecord .
Подробную информацию об API перечисления и выбора см. в интерфейсах конфигурации Android и OpenSLES_AndroidConfiguration.h . Подробную информацию о маршрутизации звука см. в разделе AudioRouting .
Многоканальная поддержка
Если ваше оборудование и драйвер поддерживают многоканальный звук через HDMI, вы можете выводить аудиопоток непосредственно на аудиооборудование (это обходит микшер AudioFlinger, поэтому звук не будет преобразован в двухканальный). Аудио HAL должен указывать, поддерживает ли профиль выходного потока многоканальный звук. Если HAL указывает свои возможности, менеджер политик по умолчанию разрешает многоканальное воспроизведение через HDMI. Подробности реализации см. в device/samsung/tuna/audio/audio_hw.c .
Чтобы указать, что ваше устройство имеет многоканальный аудиовыход, отредактируйте файл конфигурации аудиополитики, чтобы описать многоканальный выход для вашего устройства. В следующем примере из frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml показана динамическая маска каналов, что означает, что менеджер аудиополитики запрашивает маски каналов, поддерживаемые HDMI-приемником, после подключения.
Вы также можете указать статическую маску канала, например, AUDIO_CHANNEL_OUT_5POINT1 . Микшер AudioFlinger автоматически преобразует контент в стереорежим при отправке на аудиоустройство, не поддерживающее многоканальный звук.
Медиакодеки
Убедитесь, что аудиокодеки, поддерживаемые вашим оборудованием и драйверами, правильно указаны для вашего продукта. Подробнее см. раздел «Предоставление доступа к кодекам фреймворку» .
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2026-06-18 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2026-06-18 UTC."],[],[]]