Der Audio Hardware Abstraction Layer (HAL) von Android verbindet die audiospezifischen Framework-APIs auf höherer Ebene in android.media mit dem zugrunde liegenden Audiotreiber und der Hardware. Dieser Abschnitt enthält Implementierungsanweisungen und Tipps zur Verbesserung der Leistung.
Die Android-Audioarchitektur definiert, wie die Audiofunktionalität implementiert wird, und verweist auf den relevanten Quellcode, der an der Implementierung beteiligt ist.
- Anwendungsrahmen
- Das Anwendungsframework umfasst den App-Code, der die android.media- APIs verwendet, um mit Audio-Hardware zu interagieren. Intern ruft dieser Code entsprechende JNI-Glue-Klassen auf, um auf den nativen Code zuzugreifen, der mit der Audio-Hardware interagiert.
- JNI
- Der mit android.media verknüpfte JNI-Code ruft nativen Code auf niedrigerer Ebene auf, um auf Audio-Hardware zuzugreifen. JNI befindet sich in
frameworks/base/core/jni/
undframeworks/base/media/jni
. - Natives Framework
- Das native Framework stellt ein natives Äquivalent zum Paket android.media bereit und ruft Binder-IPC-Proxys auf, um auf die audiospezifischen Dienste des Medienservers zuzugreifen. Der native Framework-Code befindet sich in
frameworks/av/media/libmedia
. - Binder IPC
- Binder IPC-Proxys erleichtern die Kommunikation über Prozessgrenzen hinweg. Proxys befinden sich in
frameworks/av/media/libmedia
und beginnen mit dem Buchstaben „I“. - Medienserver
- Der Medienserver enthält Audiodienste, bei denen es sich um den eigentlichen Code handelt, der mit Ihren HAL-Implementierungen interagiert. Der Medienserver befindet sich unter
frameworks/av/services/audioflinger
. - HAL
- Die HAL definiert die Standardschnittstelle, die Audiodienste aufrufen und die Sie implementieren müssen, damit Ihre Audio-Hardware ordnungsgemäß funktioniert. Weitere Einzelheiten finden Sie in der Audio-HAL-Schnittstelle und in den Kommentaren in den
*.hal
Dateien des entsprechenden HAL-Versionsverzeichnisses. - Kernel-Treiber
- Der Audiotreiber interagiert mit Ihrer Hardware und HAL-Implementierung. Sie können Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) oder einen benutzerdefinierten Treiber (HAL ist treiberunabhängig) verwenden.
Hinweis : Wenn Sie ALSA verwenden, empfehlen wir aufgrund der kompatiblen Lizenzierung
external/tinyalsa
für den Benutzerteil des Treibers (die Standard-Benutzermodusbibliothek ist GPL-lizenziert). - Natives Android-Audio basierend auf Open SL ES (nicht gezeigt)
- Diese API wird als Teil von Android NDK bereitgestellt und befindet sich auf derselben Architekturebene wie android.media .