Слой аппаратной абстракции звука (HAL) в Android соединяет высокоуровневые API-интерфейсы аудио-инфраструктуры в android.media с базовым аудио-драйвером и аппаратным обеспечением. Этот раздел содержит инструкции по внедрению и советы по повышению производительности.
Аудиоархитектура Android определяет, как реализуются звуковые функции, и указывает на соответствующий исходный код, задействованный в реализации.
- Каркас приложения
- Платформа приложения включает в себя код приложения, который использует API-интерфейсы android.media для взаимодействия со звуковым оборудованием. Внутри этот код вызывает соответствующие связующие классы JNI для доступа к собственному коду, взаимодействующему со звуковым оборудованием.
- JNI
- Код JNI, связанный с android.media , вызывает собственный код более низкого уровня для доступа к звуковому оборудованию. JNI находится в
frameworks/base/core/jni/
иframeworks/base/media/jni
. - Родной фреймворк
- Собственная платформа предоставляет собственный эквивалент пакета android.media , вызывая прокси-серверы Binder IPC для доступа к службам, связанным со звуком, на медиасервере. Собственный код фреймворка находится в
frameworks/av/media/libmedia
. - Связующее МПК
- Прокси-серверы Binder IPC упрощают обмен данными через границы процессов. Прокси находятся в
frameworks/av/media/libmedia
и начинаются с буквы «I». - Медиа сервер
- Медиа-сервер содержит аудиосервисы, которые представляют собой фактический код, взаимодействующий с вашими реализациями HAL. Медиа-сервер находится в
frameworks/av/services/audioflinger
. - ХАЛ
- HAL определяет стандартный интерфейс, к которому обращаются звуковые службы и который необходимо реализовать для правильной работы звукового оборудования. Дополнительные сведения см. в аудиоинтерфейсе HAL и комментариях в файлах
*.hal
соответствующего каталога версии HAL. - Драйвер ядра
- Аудиодрайвер взаимодействует с вашим оборудованием и реализацией HAL. Вы можете использовать расширенную звуковую архитектуру Linux (ALSA), открытую звуковую систему (OSS) или собственный драйвер (HAL не зависит от драйвера).
Примечание . Если вы используете ALSA, мы рекомендуем
external/tinyalsa
для пользовательской части драйвера из-за его совместимого лицензирования (стандартная библиотека пользовательского режима находится под лицензией GPL). - Собственный звук Android на основе Open SL ES (не показан)
- Этот API предоставляется как часть Android NDK и находится на том же уровне архитектуры, что и android.media .