赞
踩
本系列文章基于Android14源码进行分析解读,部分框图直接使用了原作者的图片,侵权必删。
Android13音频子系统分析(一)---整体架构_audio preselection descriptor-CSDN博客
Android Framework 音频子系统(02)音频系统框架_android音频策略蓝牙-CSDN博客
音频子系统是Android框架中一个较为复杂的系统,涉及到较多的模块。一个应用涉及到的API层面包括APP层,FrameWork层,Native层,HAL层,Driver层。一个应用运行在系统的4个进程中:
应用层的API源码位置:/frameworks/base/media/java/android/media/
这部分代码运行在调用API接口的APP进程中(譬如抖音,QQ音乐),是Android FW对外提供的音频接口。主要模块包括:
AudioTrack和AudioRecord API有一部分业务逻辑,但是更多的逻辑处理都会通过Binder跨服务调用到框架层甚至Natvie层。
AudioManager通过binder与Framework层的AuidoService服务通信,完成音频焦点,音量控制及音频播放状态的设置及获取。
FW框架层是音频设备路由管理、音量控制、焦点控制的具体实现模块。它主要包含如下几个模块:
Native层包含两大模块:AudioFlinger和AudioPolicyService,运行在AudioServer进程中。AudioService之所以把两个模块放在一个进程中,主要一个考虑就是两个模块需要互相交换以获取音频系统的信息:音频策略需要获取底层的硬件信息,这个只能通过AudioFlinger这个接口;而音频设备状态的变化也需要AF通知到Policy服务。
AudioFlinger主要包含3个主要的子模块:AudioHwDevice、PlaybackThread/RecordThread、PlaybackTrack/RecordTrack。(这里暂时不提音效子模块)
以下是AudioFlinger核心子模块的类图:
TrackHandle只是一个代理,负责与客户端交互。
Track类中的设计音频流的信息主要在Thread中处理,Thread在音频流中是一个承上启下的存在,所以这里也顺带分析这两个类图的结构:
APS包含3个核心的子模块:AudioPolicyService、AudioPolicyManager和Engine。
三者的调用关系为:AudioPolicyService - AudioPolicyManager - Engine
Audio HAL层是Android系统为各个硬件Vendor厂商抽象的一层,以隔离硬件实现的差异,在Treble机制之后变成一个独立的服务。AOSP/AAOS 没有为AHAL提供实现源码,由芯片Vendor厂商实现并由终端用户客制化。
下面是整个音频链路核心模块的链路图。
总体来说,一个完整的音频在需要完成下面几个步骤才可以正常的启播:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。