音频系统架构基础
层次说明
音频管理模块主要分成4个层次:
1.Audio本地框架类:是libmediaso.so的一部分,这些Audio接口对上层提供接口,由下层的本地代码实现
2.AudioFlinger:继承了libmedia中的接口,提供实现库libaudioflinger.so,上层调用只是libmedia部分的接口,实际调用的内容是libaudioflinger.so
3.JNI:JNI和java对上层提供接口,JNI部分通过调用libmedia库提供的接口来实现
4.Audio硬件抽象层:提供硬件的接口,供AudioFlinger调用
上图构成部分说明:
1.Audio的java部分
代码:framework/base/media/java/android/media
与Audio系统相关的java包是android.meida,里面包含了与AudioManager和Audio系统相关的类
2.Audio的JNI部分
代码:framework/base/core/jni
生成库是libandroid_runtime.so
3.Audio的框架部分
框架部分头文件:framework/base/include/media/或framework/av/include/media/
实现代码:framework/base/media/libmedia/或framework/av/media/libmedia/
Audio本地框架是Media库的一部分,会编译成库libmedia.so,提供Audio部分的接口
4.Audio Flinger
部分代码:framework/base/lib/audioflinger或framework/av/service/audioflinger
编译成库libaudioflinger.so,是Audio系统的本地服务部分
5.Audio的硬件抽象层接口
代码:hardware/libhardware_legacy/include/hardware/
Media库中的Audio框架
Media库提供Audio系统的核心框架,实现了AudioSystem.AudioTrack,AudioRecorder类
头文件IAudioFlinger.h,IAudioTrack.h和IAudioRecorder.h接口是通过下层的继承实现
头文件AudioFlinger.h,AudioTrack.h,AudioRecorder.h是对上层提供的接口
libmedia库提供的只是一个Audio系统框架,类AudioSystem,AudioTrack和AudioRecord分别调用下层的接口IAudioFlinger,IAudioTrack和IAudioRecord实现,IAudioFlingerClient是IAudioFlinger中注册的监听器,回调获取IAudioFlinger运行信息