温馨提示:这篇文章已超过428天没有更新,请注意相关的内容是否还可用!
摘要:,,本文详细解析了Android音频系统AudioFlinger,内容涵盖其工作原理、功能特点等。文章指出,AudioFlinger是Android音频架构的核心组件,负责处理音频流、管理音频设备,确保音频数据的流畅播放。本文为读者提供了深入理解Android音频系统的机会,对于开发者而言,是不可或缺的超级干货。
Android 音频框架概述
音频是Android平台的重要组成部分,负责音频数据的采集和输出、音频流的控制、音频设备的管理以及音量调节等,从Android 7.0开始,专门设立了Audio服务器来处理音频事务。
音频应用框架
1、Audio Application Framework:音频应用框架
2、AudioTrack:负责回放数据的输出
3、AudioRecord:负责录音数据的采集
本地音频框架
1、AudioSystem:负责音频事务的综合管理
2、Audio Native Framework:本地音频框架,包含AudioTrack和AudioRecord的本地实现
音频服务
1、AudioPolicyService:音频策略的制定者,负责音频设备切换的策略抉择、音量调节策略等
2、AudioFlinger:音频策略的执行者,负责输入输出流设备的管理及音频流数据的处理传输,它是Android音频系统的引擎。
四、AudioTrack与AudioFlinger的交互
1、AudioTrack构造过程:每个音频流对应一个AudioTrack类实例,创建时,AudioTrack会在创建时注册到AudioFlinger中,AudioFlinger把所有的AudioTrack进行混合(Mixer)然后输送到AudioHardware进行播放,目前Android同时最多可以创建32个音频流。
2、数据写入:AudioTrack实例构造后,应用程序可以开始写入音频数据,AudioTrack与AudioFlinger是生产者-消费者的关系。
3、获取音频输出:根据音频参数如采样率、声道、格式等获取合适的音频输出,并返回该音频输出在AudioFlinger中创建的播放线程id号。
4、创建AudioTrackThread线程:初始化AudioTrack时,如果audioCallback为Null,就会创建AudioTrackThread线程,AudioTrack支持两种数据输入方式:Push方式和Pull方式。
5、申请Track:音频播放需要AudioTrack写入音频数据,同时需要AudioFlinger完成混音,当应用程序进程中的AudioTrack请求AudioFlinger在某个PlaybackThread中创建Track对象时,AudioFlinger会建立它们之间的桥梁。
AudioFlinger概述
AudioPolicyService与AudioFlinger是Android音频系统的两大基本服务,前者是策略制定者,后者是策略执行者,从Audio HAL中,我们通常会看到四种输出流设备,分别对应不同的播放场景。
环形FIFO的管理
audio_track_cblk_t是FIFO实现的关键结构,由AudioFlinger申请相应的内存后返回给AudioTrack,AudioTrack和AudioFlinger通过这个结构实现环形FIFO,AudioTrack向FIFO中写入音频数据,而AudioFlinger从FIFO中读取数据,经过Mixer后送给AudioHardware进行播放。
AudioMixer
AudioMixer是Android的混音器,可以把各个音轨的音频数据混合在一起,然后输出到音频设备,关于混音,它以track为源,以mainBuffer为目标,进行混音处理,AudioMixer最多能维护32个track。
还没有评论,来说两句吧...