Android的音频硬件抽象层(HAL)连接了Android中更高级的、特定于音频的框架api。媒体到底层音频驱动程序和硬件。本节包括提高性能的实现说明和提示。
Android音频架构定义了音频功能的实现方式,并指出了实现过程中涉及的相关源代码。
图1。Android音频架构
Application framework
应用程序框架包括应用程序代码,它使用android。媒体api与音频硬件交互。在内部,该代码调用相应的JNI glue类来访问与音频硬件交互的本地代码。
JNI
与android相关的JNI代码。媒体调用较低级的本地代码来访问音频硬件。JNI位于frameworks/base/core/ JNI /和frameworks/base/media/ JNI中。
Native framework
本机框架提供了与android相同的本机。媒体包,调用Binder IPC代理访问媒体服务器的特定于音频的服务。本地框架代码位于frameworks/av/media/libmedia。
Binder IPC
绑定IPC代理促进了进程边界之间的通信。代理位于frameworks/av/media/libmedia中,以字母“I”开头。
Media server
媒体服务器包含音频服务,这些服务是与您的HAL实现交互的实际代码。媒体服务器位于frameworks/av/services/audioflinger中。
HAL
HAL定义了音频服务调用的标准接口,为了使音频硬件正确工作,您必须实现该接口。要了解更多细节,请参考音频HAL接口和*中的注释。对应hal版本目录下的hal文件。
Kernel driver
音频驱动程序与硬件和HAL实现交互。您可以使用高级Linux声音体系结构(ALSA)、开放声音系统(OSS)或自定义驱动程序(HAL是驱动程序不可知的)。
注意:如果您使用ALSA,我们建议将external/tinyalsa用于驱动程序的用户部分,因为它具有兼容的许可(标准用户模式库是gpl许可的)。
Android native audio based on Open SL ES (not shown)
该API作为Android NDK的一部分公开,与Android .media处于相同的架构级别。