Начиная с 27 марта 2025 г. мы рекомендуем использовать android-latest-release вместо aosp-main для создания и участия в AOSP. Дополнительные сведения см. в разделе Изменения в AOSP .
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
В выпуске Android 10 реализована значительная переработка диспетчера политик аудио, обеспечивающая большую гибкость для поддержки сложных вариантов использования в автомобильной промышленности:
Стратегии маршрутизации, специфичные для OEM-производителей.
Настраиваемые группы громкости для групп устаревших типов потоков, использующих те же кривые громкости.
Стратегии маршрутизации объявляются механизмом политики аудио, а не жестко запрограммированы.
Кривые громкости и группы, управляемые движком политики звука.
Внутренний рефакторинг, готовящийся к будущему разделению между общим кодом и настраиваемым кодом и предлагающий более богатое управление аудиоустройствами. Например, использование всех свойств устройства, а не только его типа в правилах политики.
В 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 использует флаг сборки USE_XML_AUDIO_POLICY_CONF для выбора формата XML файлов конфигурации.
Преимущества формата 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.
Структура верхнего уровня содержит модули, соответствующие каждому аппаратному модулю аудио HAL, где каждый модуль имеет список портов микширования, портов устройств и маршрутов:
Микшированные порты описывают возможные профили конфигурации потоков, которые можно открыть в аудио HAL для воспроизведения и захвата.
Порты устройств описывают устройства, которые могут быть подключены, а также их тип (и, при необходимости, адрес и аудиосвойства).
Маршруты отделены от дескриптора смешанного порта, что позволяет описывать маршруты от устройства к устройству или от потока к устройству.
Таблицы громкости — это простые списки точек, определяющих кривую, используемую для перевода индекса пользовательского интерфейса в громкость в дБ. Отдельный включаемый файл содержит кривые по умолчанию, но каждая кривая для данного варианта использования и категории устройства может быть перезаписана.
Метод XML Inclusions (XInclude) может использоваться для включения информации о конфигурации аудиополитики, расположенной в других XML-файлах. Все включенные файлы должны соответствовать структуре, описанной выше, со следующими ограничениями:
Файлы могут содержать только элементы верхнего уровня.
Файлы не могут содержать элементы XInclude.
Используйте include, чтобы избежать копирования стандартной информации о конфигурациях аудиомодулей 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
Включает интерфейсы связывания, потоки и реализацию блокировки с интерфейсом для остальной части фреймворка.
Конфигурация с использованием структуры параметров
Код политики аудио организован так, чтобы его было легко понимать и поддерживать, а также поддерживать политику аудио, полностью определенную файлами конфигурации. Организация и дизайн политики аудио основаны на Intel Parameter Framework, платформе на основе плагинов и правил для обработки параметров.
Использование настраиваемой звуковой политики позволяет OEM-производителям:
Опишите структуру системы и ее параметры в 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 Enumeration and Selection проверено тестами CTS и расширено для включения маршрутизации для собственных аудиопотоков C/C++ (OpenSL ES). Маршрутизация собственных потоков по-прежнему выполняется в Java с добавлением интерфейса AudioRouting , который заменяет, объединяет и делает устаревшими явные методы маршрутизации, специфичные для классов AudioTrack и AudioRecord .
Подробную информацию об API Enumeration and Selection см. в разделах Интерфейсы конфигурации 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 автоматически микширует контент до стерео при отправке на аудиоустройство, не поддерживающее многоканальный звук.
Медиа-кодеки
Убедитесь, что аудиокодеки, поддерживаемые вашим оборудованием и драйверами, правильно заявлены для вашего продукта. Подробнее см. в разделе Exposing Codecs to the Framework .
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-06-12 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"]],["Последнее обновление: 2025-06-12 UTC."],[],[]]