Android AudioSystem模块分析

Android 音频系统中存在两个重要的服务AudioPolicyService和AudioFlinger,其服务名称为“media.audio_policy”, “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, AudioFlingerAudioPolicyManager如何与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



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值