Warstwa abstrakcji sprzętowej (HAL) audio w Androidzie łączy interfejsy API platformy wyższego poziomu, które są specyficzne dla dźwięku i znajdują się w android.media, z podstawowym sterownikiem audio i sprzętem. W tej sekcji znajdziesz instrukcje dotyczące implementacji i wskazówki, które pomogą Ci zwiększyć wydajność.
Architektura audio w Androidzie określa, jak zaimplementowano funkcje audio, i wskazuje odpowiedni kod źródłowy związany z implementacją.
Rysunek 1. Architektura audio w Androidzie
- Platforma aplikacji
- Platforma aplikacji zawiera kod aplikacji, który korzysta z interfejsów API android.media do interakcji ze sprzętem audio. Wewnętrznie ten kod wywołuje odpowiednie klasy JNI, aby uzyskać dostęp do kodu natywnego, który wchodzi w interakcje ze sprzętem audio.
- JNI
-
Kod JNI powiązany z android.media wywołuje kod natywny niższego poziomu, aby uzyskać dostęp do sprzętu audio. JNI znajduje się w
frameworks/base/core/jni/iframeworks/base/media/jni. - Platforma natywna
-
Platforma natywna zapewnia natywny odpowiednik pakietu android.media, wywołując
serwery proxy Binder IPC, aby uzyskać dostęp do usług specyficznych dla dźwięku na serwerze multimediów.
Kod platformy natywnej znajduje się w
frameworks/av/media/libmedia. - Binder IPC
-
Serwery proxy Binder IPC ułatwiają komunikację między procesami. Serwery proxy znajdują się w
frameworks/av/media/libmediai zaczynają się od litery „I”. - Serwer mediów
-
Serwer multimediów zawiera usługi audio, czyli rzeczywisty kod, który wchodzi w interakcje z implementacjami HAL. Serwer multimediów znajduje się w
frameworks/av/services/audioflinger. - HAL
-
HAL definiuje standardowy interfejs, do którego wywołują usługi audio i który musisz zaimplementować, aby sprzęt audio działał prawidłowo. Więcej informacji znajdziesz w interfejsie audio HAL
i komentarzach w plikach
*.halw odpowiednim katalogu wersji HAL. - Sterownik jądra
-
Sterownik audio wchodzi w interakcje ze sprzętem i implementacją HAL. Możesz użyć zaawansowanej architektury dźwięku w systemie Linux (ALSA), otwartego systemu dźwięku (OSS) lub sterownika niestandardowego (HAL jest niezależny od sterownika).
Uwaga: jeśli używasz ALSA, zalecamy
external/tinyalsaw przypadku części sterownika użytkownika ze względu na zgodne licencjonowanie (standardowa biblioteka w trybie użytkownika jest licencjonowana na licencji GPL). - Natywne audio w Androidzie oparte na Open SL ES (nie jest widoczne)
- Ten interfejs API jest udostępniany jako część Android NDK i znajduje się na tym samym poziomie architektury co android.media.