前言
- Android 的音频是一个相当复杂的部分。从应用到框架、hal、kernel、最后到硬件,每个部分的知识点都相当的多。而android 这部分代码在版本之间改动很大、其中充斥着各种workaround的处理,让人看的云里雾里。网上相应的分析文章也很多,有些就贴大段的代码 是很不容易理解的。
- 本系列就遵循从整体到局部, 从简单到复杂来分析。很多时候可能是带着问题来看文章。而写博客的目的 一是记录分析的过程,从迷茫 混乱到清晰 有序的关键概念和流程的理解。二是对系统或者框架思想的一个整体理解,为解决问题打下基础。
- 总体的一个理解:借用android 官网的一张图, 从应用层开始,所有封装中的音频数据经过解码后为pcm数据(或者音频的裸数据),这个数据就拷贝到framework层,framework根据设备和配置文件中定义的路由情况,将应用层指定的数据送到对应的设备进行输出。
本篇文章的目标包括以下几点
- 从开机出发理解android audioservice 中audioflinger、audiopolicy提供怎样的服务。
- 从播放出发理解android的音频数据如何一路送到硬件。
- 从vendor.auio-hal出发理解hal层提供了怎样的服务。
音频服务audioserver
-
首先从开机启动的音频相关服务audioserver开始
- 开机init.rc文件中和音频有关的service