Audio

Android Audio HAL-Symbol

Die Audio-Hardware-Abstraktionsschicht (HAL) von Android verbindet die übergeordneten, audiospezifischen Framework-APIs in android.media mit dem zugrunde liegenden Audiotreiber und der zugrunde liegenden 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.

Audioarchitektur

Abbildung 1. Android-Audioarchitektur

Anwendungsrahmen
Das Anwendungsframework enthält den App-Code, der die android.media- APIs verwendet, um mit Audiohardware zu interagieren. Intern ruft dieser Code entsprechende JNI-Glue-Klassen auf, um auf den nativen Code zuzugreifen, der mit Audiohardware interagiert.
JNI
Der mit android.media verknüpfte JNI-Code ruft nativen Code auf niedrigerer Ebene auf, um auf Audiohardware zuzugreifen. JNI befindet sich in frameworks/base/core/jni/ und frameworks/base/media/jni .
Natives Framework
Das native Framework stellt ein natives Äquivalent zum android.media -Paket 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 in frameworks/av/services/audioflinger .
HAL
Die HAL definiert die Standardschnittstelle, die Audiodienste aufrufen und die Sie implementieren müssen, damit Ihre Audiohardware ordnungsgemäß funktioniert. Weitere Einzelheiten finden Sie in der Audio-HAL-Schnittstelle und den Kommentaren in den *.hal Dateien des entsprechenden HAL-Versionsverzeichnisses.
Kernel-Treiber
Der Audiotreiber interagiert mit Ihrer Hardware und der HAL-Implementierung. Sie können Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) oder einen benutzerdefinierten Treiber verwenden (HAL ist treiberunabhängig).

Hinweis : Wenn Sie ALSA verwenden, empfehlen wir aufgrund der kompatiblen Lizenzierung für den Benutzerteil des Treibers external/tinyalsa (die Standardbibliothek im Benutzermodus ist GPL-lizenziert).

Natives Android-Audio basierend auf Open SL ES (nicht abgebildet)
Diese API wird als Teil von Android NDK bereitgestellt und befindet sich auf derselben Architekturebene wie android.media .