Аппаратно-зависимый уровень (HAL) для аудио в Android соединяет API фреймворка более высокого уровня, предназначенные для работы со звуком, в android.media с базовым аудиодрайвером и аппаратным обеспечением. В этом разделе приведены инструкции по реализации и советы по повышению эффективности.
В архитектуре аудиосистемы Android описано, как реализованы функции аудио и где находится соответствующий исходный код.
Рисунок 1. Архитектура аудио в 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
-
Прокси-серверы Binder IPC упрощают обмен данными между процессами. Прокси-серверы расположены в
frameworks/av/media/libmediaи начинаются с буквы "I". - Медиасервер
-
Медиасервер содержит аудиосервисы, которые представляют собой код, взаимодействующий с реализациями HAL. Медиасервер находится в регионе
frameworks/av/services/audioflinger. - HAL
-
HAL определяет стандартный интерфейс, который используют аудиосервисы и который необходимо реализовать для правильной работы аудиооборудования. Подробную информацию можно найти в интерфейсе HAL аудио и комментариях в файлах
*.halкаталога соответствующей версии HAL. - Драйвер ядра
-
Аудиодрайвер взаимодействует с вашим оборудованием и реализацией HAL. Вы можете использовать Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) или собственный драйвер (HAL не зависит от драйвера).
Примечание. Если вы используете ALSA, мы рекомендуем
external/tinyalsaдля пользовательской части драйвера, поскольку у него совместимая лицензия (стандартная библиотека пользовательского режима лицензируется по GPL). - Встроенный звук Android на основе Open SL ES (не показано)
- Этот API является частью Android NDK и находится на том же уровне архитектуры, что и android.media.