-
导语
本篇文章简要介绍Android Audio的架构,从总体上把握Audio模块在Android平台上的实现。
应用框架
应用框架包含应用代码,该代码可使用 android.media API 与音频硬件进行互动。在内部,此代码会调用相应的 JNI 粘合类,以访问与音频硬件互动的原生代码。
JNI
与 android.media 关联的 JNI 代码可调用较低级别的原生代码,以访问音频硬件。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 接口位于 hardware/libhardware/include/hardware
中。如需了解详情,请参阅 audio.h。
内核驱动程序
音频驱动程序可与您的硬件和 HAL 实现进行互动。您可以使用高级 Linux 声音体系 (ALSA)、开放声音系统 (OSS) 或自定义驱动程序(HAL 与驱动程序无关)。