Android Audio 模块分析
2016-11-24 16:47
253 查看
Android 音频系统中存在两个重要的服务AudioPolicyService和AudioFlinger,其服务名称为“media.audio_policy”,
“media.audio_flinger”。两个服务各司其职,一个负责
音频策略相关,一个负责音频的采集和输出相关。两个服务均在多媒体服务mediaserver中进行注册(main_mediaserver.cpp)。本篇主要分析AudioSystem在音频框架中的位置
及相关作用。
![](https://img-blog.csdn.net/20151016111007357?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
从最上面红圈我们可以看到AudioSystem 处于音频控制的入口处,是AudioFilnger和AudioPolicyService对上服务的窗口,另外AudioTrack负责播放功能,AudioRecord负责
录音功能。
![](https://img-blog.csdn.net/20151016114934817?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
应用层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服务代理端的句柄提可以对策略相关业务流程进行调度
![](https://img-blog.csdn.net/20151016132131205?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其实获取到的代理端gAudioPolicyService就是BpAudioPolicyService,通过Binder与AudioPolicyService进行通信,与AudioFlinger通信如下:
![](https://img-blog.csdn.net/20151016132900007?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
AudioSystem主要完成上述的一些衔接功能,后续继续分析AudioPolicyService,AudioFlinger,AudioPolicyManager如何与HAL层联系,及底层数据交互。
推荐相关学习连接: http://blog.csdn.net/droidphone/article/details/5949280 http://blog.csdn.net/droidphone/article/details/5941344 http://blog.csdn.net/droidphone/article/details/5951999
“media.audio_flinger”。两个服务各司其职,一个负责
音频策略相关,一个负责音频的采集和输出相关。两个服务均在多媒体服务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层联系,及底层数据交互。
推荐相关学习连接: http://blog.csdn.net/droidphone/article/details/5949280 http://blog.csdn.net/droidphone/article/details/5941344 http://blog.csdn.net/droidphone/article/details/5951999
相关文章推荐
- Android Audio 模块分析
- Android Audio 模块分析
- Android2.2、Android2.3 、Android4.0 audio hardware模块分析
- Android Audio 模块分析
- Android O Audio libaudiohal模块分析
- android 动画模块分析
- (转)Android深入浅出之Audio 第一部分 AudioTrack分析
- 分析android动画模块
- Android深入浅出之Audio 第二部分 AudioFlinger分析
- android phone 模块分析
- Android Audio代码分析1 - AudioTrack使用示例
- Android深入浅出之Audio 第二部分 AudioFlinger分析
- android phone 模块分析
- Android Audio代码分析3 - 创建AudioTrack对象
- Android深入浅出之Audio 第一部分 AudioTrack分析
- 分析android动画模块
- (转)Android深入浅出之Audio 第二部分 AudioFlinger分析
- /LGC动画引擎/分析android动画模块
- 分析android动画模块
- 分析android动画模块