Android AudioSystem模块分析
2015-10-16 13:36
519 查看
Android 音频系统中存在两个重要的服务AudioPolicyService和AudioFlinger,其服务名称为“media.audio_policy”, “media.audio_flinger”。两个服务各司其职,一个负责
音频策略相关,一个负责音频的采集和输出相关。两个服务均在多媒体服务mediaserver中进行注册(main_mediaserver.cpp)。本篇主要分析AudioSystem在音频框架中的位置
及相关作用。
从最上面红圈我们可以看到AudioSystem 处于音频控制的入口处,是AudioFilnger和AudioPolicyService对上服务的窗口,另外AudioTrack负责播放功能,AudioRecord负责
录音功能。
应用层AudioManager和AudioService之间通过Binder通信来完成调用关系,到了library层的AudioSystem就可以直接获取AudioFlinger,AudioPolicyService服务,接着
可以看核心库层的AudioSystem。
/* These are static methods to control the system-wide AudioFlinger
* only privileged processes can have access to them
*/
具体功能我们可以查看头文件AudioSystem.h
另外gAudioFlinger作为AudioFlinger的代理端句柄可以输入输出设备进行相关控制
而gAudioPolicyService作为AudioPolicyService服务代理端的句柄提可以对策略相关业务流程进行调度
其实获取到的代理端gAudioPolicyService就是BpAudioPolicyService,通过Binder与AudioPolicyService进行通信,与AudioFlinger通信如下:
AudioSystem主要完成上述的一些衔接功能,后续继续分析AudioPolicyService,AudioFlinger,AudioPolicyManager如何与HAL层联系,及底层数据交互。
推荐相关学习连接:
/article/1880873.html
/article/1880874.html
/article/1880872.html
音频策略相关,一个负责音频的采集和输出相关。两个服务均在多媒体服务mediaserver中进行注册(main_mediaserver.cpp)。本篇主要分析AudioSystem在音频框架中的位置
及相关作用。
音频框架图
下面可以看一个一篇网上流传的多媒体音频框架图从最上面红圈我们可以看到AudioSystem 处于音频控制的入口处,是AudioFilnger和AudioPolicyService对上服务的窗口,另外AudioTrack负责播放功能,AudioRecord负责
录音功能。
控制流程
从上篇分析,应用层在处理完相关操作之后,就会将实际设置,控制的动作转交给了AudioSystem,如下图应用层AudioManager和AudioService之间通过Binder通信来完成调用关系,到了library层的AudioSystem就可以直接获取AudioFlinger,AudioPolicyService服务,接着
可以看核心库层的AudioSystem。
核心库层AudioSystem
英文的功能描述如下:/* These are static methods to control the system-wide AudioFlinger
* only privileged processes can have access to them
*/
具体功能我们可以查看头文件AudioSystem.h
AudioFlinger服务获取
static const sp<IAudioFlinger>& get_audio_flinger()另外gAudioFlinger作为AudioFlinger的代理端句柄可以输入输出设备进行相关控制
AudioPolicyService服务获取
static const sp<IAudioPolicyService>& get_audio_policy_service()而gAudioPolicyService作为AudioPolicyService服务代理端的句柄提可以对策略相关业务流程进行调度
核心库层通信
上面获取两大音频服务的代理端之后需要跟服务端通信,与AudioPolicyService通信如下:其实获取到的代理端gAudioPolicyService就是BpAudioPolicyService,通过Binder与AudioPolicyService进行通信,与AudioFlinger通信如下:
AudioSystem主要完成上述的一些衔接功能,后续继续分析AudioPolicyService,AudioFlinger,AudioPolicyManager如何与HAL层联系,及底层数据交互。
推荐相关学习连接:
/article/1880873.html
/article/1880874.html
/article/1880872.html
相关文章推荐
- android安全学习之2—android中.pem和.pk8是什么文件?
- Android插件开发框架
- Android 分享功能实现与 QQ 纯文本分享
- Using smem on Android
- Android memory usage
- 关于Android的.so文件你所需要知道的
- Android应用程序之数据存储(一)
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- 优秀的开源框架学习
- Android源码Luncher2调试环境的搭建
- 关于Android Studio 编译时电脑假死的解决方案
- Android内存优化:ArrayMap
- 布局中自定义属性使用模板
- Android应用程序相关目录
- 新东西012--Android软键盘弹出位置控制
- Android休眠设置时间
- android安全学习之1—什么是数字签名、数字证书
- android图片类型之间相互转换实现代码
- Android关于Spinner的使用(更换字体颜色,下拉列表的条目布局)
- Android笔记(三十八) Android中的数据存储——SharedPreferences