С 2026 года, чтобы обеспечить стабильность платформы для экосистемы, мы будем публиковать исходный код в AOSP во втором и четвертом кварталах. Это соответствует нашей модели разработки trunk stable. Для создания и внесения вклада в AOSP используйте android-latest-release. В ветке манифеста android-latest-release всегда будет указана последняя версия, загруженная в AOSP. Подробнее об изменениях в AOSP…
Чтобы переводить контент на ваш предпочитаемый язык, Google использует технологии на основе искусственного интеллекта. Переводы от ИИ могут содержать ошибки.
Настройте правила для аудио
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
В 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
Структура верхнего уровня содержит модули, соответствующие каждому аппаратному модулю HAL аудио, где каждый модуль имеет список портов микширования, портов устройств и маршрутов:
Порты микширования описывают возможные профили конфигурации для потоков, которые можно открыть в HAL аудио для воспроизведения и записи.
Порты устройств описывают устройства, которые можно подключить, с указанием их типа (и, если применимо, адреса и свойств аудио).
Маршруты отделены от дескриптора порта микширования, что позволяет описывать маршруты от устройства к устройству или от потока к устройству.
Таблицы громкости – это простые списки точек, определяющих кривую, которая используется для преобразования индекса пользовательского интерфейса в громкость в дБ. Отдельный файл include содержит кривые по умолчанию, но каждую кривую для определенного варианта использования и категории устройства можно переопределить.
Метод включения XML-файлов (XInclude) можно использовать для добавления информации о конфигурации правил аудио, которая находится в других XML-файлах. Все файлы должны соответствовать описанной выше структуре со следующими ограничениями:
Файлы могут содержать только элементы верхнего уровня.
Файлы не должны содержать элементы XInclude.
Используйте директиву include, чтобы не копировать стандартную информацию о конфигурации модуля HAL аудио Android Open Source Project (AOSP) во все файлы конфигурации аудиополитики (это может привести к ошибкам). Стандартный XML-файл конфигурации правил для аудио предоставляется для следующих HAL:
AudioPolicyManager.cpp состоит из нескольких модулей, что упрощает его обслуживание и настройку. Структура frameworks/av/services/audiopolicy включает следующие модули:
Модуль
Описание
/managerdefault
Включает общие интерфейсы и реализацию поведения, общую для всех приложений. Похож на AudioPolicyManager.cpp, но без функций поисковой системы и общих концепций.
/common
Определяет базовые классы (например, структуры данных для профилей аудиопотоков ввода-вывода, дескрипторов аудиоустройств, аудиопатчей и аудиопортов). Ранее это было определено в AudioPolicyManager.cpp.
/engine
Применяет правила, определяющие, какие устройства и уровни громкости должны использоваться в том или ином случае. Он реализует стандартный интерфейс с общей частью, например для получения подходящего устройства для определенного варианта использования воспроизведения или захвата или для установки подключенных устройств или внешнего состояния (то есть состояния вызова принудительного использования), которое может изменить решение о маршрутизации.
Реализация механизма правил, основанная на Parameter Framework (см. ниже).
Конфигурация основана на фреймворке параметров, а правила определяются XML-файлами.
/enginedefault
Реализация механизма правил на основе предыдущих реализаций Android Audio Policy Manager. Это значение по умолчанию, которое включает заданные в коде правила, соответствующие реализациям Nexus и AOSP.
/service
Включает интерфейсы связывателя, реализацию потоков и блокировки с интерфейсом для остальной части фреймворка.
Конфигурация с помощью Parameter Framework
Код аудиополитики организован так, чтобы его было легко понять и поддерживать, а также поддерживать аудиополитику, полностью определяемую файлами конфигурации. Организация и дизайн аудиополитики основаны на Intel Parameter Framework, фреймворке на основе плагинов и правил для обработки параметров.
Настраиваемые правила для аудио позволяют производителям оригинального оборудования:
Описывать структуру системы и ее параметры в XML.
Напишите на C++ или используйте существующий серверный код (плагин) для доступа к описанным параметрам.
Определите (в XML или на предметно-ориентированном языке) условия и правила, при которых определенный параметр должен принимать определенное значение.
В AOSP есть пример файла конфигурации правил аудио, в котором используется фреймворк параметров: 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.
Если ваше оборудование и драйвер поддерживают многоканальный звук через 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-10-11 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-10-11 UTC."],[],[]]