Android音频系统AudioFlinger详解 超级干货,Android音频系统AudioFlinger深度解析,超级干货指南

马肤

温馨提示:这篇文章已超过428天没有更新,请注意相关的内容是否还可用!

摘要:,,本文详细解析了Android音频系统AudioFlinger,内容涵盖其工作原理、功能特点等。文章指出,AudioFlinger是Android音频架构的核心组件,负责处理音频流、管理音频设备,确保音频数据的流畅播放。本文为读者提供了深入理解Android音频系统的机会,对于开发者而言,是不可或缺的超级干货。

Android 音频框架概述

音频是Android平台的重要组成部分,负责音频数据的采集和输出、音频流的控制、音频设备的管理以及音量调节等,从Android 7.0开始,专门设立了Audio服务器来处理音频事务。

音频应用框架

1、Audio Application Framework:音频应用框架

2、AudioTrack:负责回放数据的输出

Android音频系统AudioFlinger详解 超级干货,Android音频系统AudioFlinger深度解析,超级干货指南 第1张

3、AudioRecord:负责录音数据的采集

本地音频框架

1、AudioSystem:负责音频事务的综合管理

2、Audio Native Framework:本地音频框架,包含AudioTrack和AudioRecord的本地实现

Android音频系统AudioFlinger详解 超级干货,Android音频系统AudioFlinger深度解析,超级干货指南 第2张

音频服务

1、AudioPolicyService:音频策略的制定者,负责音频设备切换的策略抉择、音量调节策略等

2、AudioFlinger:音频策略的执行者,负责输入输出流设备的管理及音频流数据的处理传输,它是Android音频系统的引擎。

四、AudioTrack与AudioFlinger的交互

Android音频系统AudioFlinger详解 超级干货,Android音频系统AudioFlinger深度解析,超级干货指南 第3张

1、AudioTrack构造过程:每个音频流对应一个AudioTrack类实例,创建时,AudioTrack会在创建时注册到AudioFlinger中,AudioFlinger把所有的AudioTrack进行混合(Mixer)然后输送到AudioHardware进行播放,目前Android同时最多可以创建32个音频流。

2、数据写入:AudioTrack实例构造后,应用程序可以开始写入音频数据,AudioTrack与AudioFlinger是生产者-消费者的关系。

3、获取音频输出:根据音频参数如采样率、声道、格式等获取合适的音频输出,并返回该音频输出在AudioFlinger中创建的播放线程id号。

Android音频系统AudioFlinger详解 超级干货,Android音频系统AudioFlinger深度解析,超级干货指南 第4张

4、创建AudioTrackThread线程:初始化AudioTrack时,如果audioCallback为Null,就会创建AudioTrackThread线程,AudioTrack支持两种数据输入方式:Push方式和Pull方式。

5、申请Track:音频播放需要AudioTrack写入音频数据,同时需要AudioFlinger完成混音,当应用程序进程中的AudioTrack请求AudioFlinger在某个PlaybackThread中创建Track对象时,AudioFlinger会建立它们之间的桥梁。

AudioFlinger概述

AudioPolicyService与AudioFlinger是Android音频系统的两大基本服务,前者是策略制定者,后者是策略执行者,从Audio HAL中,我们通常会看到四种输出流设备,分别对应不同的播放场景。

Android音频系统AudioFlinger详解 超级干货,Android音频系统AudioFlinger深度解析,超级干货指南 第5张

环形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。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码