做android好几年了,audio模块是持续时间最长的,但是我的工作尚未涉及driver,停留在audio framework及hal层,
audioservice这个java层面的service在systemserver进程中起来,供app层使用
与其它系统service一样,audioservice提供给app的api也是通过binder,其客户端为audiomanager
audioservice主要做工作:
1、audio volume的初始化以及设置操作,最终到达audiopolicymanager层,这些都是可以根据需求重写的
2、管理audiofocus队列,如果apk规范的话,一般涉及播放的都需要设置回调监听focus的改变,决定声音输出的顺序,
当然对于电话,phone的优先级最高,
3、ringmode,phonemode的设置以及管理;ringmode的改变与某些stream的volume也是息息相关
phonemode的改变则涉及音频路由的切换,也可能牵涉volume的改变
4、多媒体外设接入时的事件接收以及处理,涉及音频路由,volume的改变
然后是audiopolicyservice,audioflinger这两个service,放在mediaserver中
audiopolicy这块负责volume以及路由的计算,路由通过audioflinger设置到hal层进行切换
audioflinger主要工作:
1、管理音频数据的输入输出,还包括audioeffect的管理,
2、做为中间层,将上层的指令传递给audio hal