欢迎光临
我们一直在努力

Android音频系列(08)-AudioPolicyService代码解析

目录

1.  概述

2. 简单示例:

3. 代码结构

 3.1 类图

3.2 模块图

1.  概述

早期 Android 版本(Android 7.0 之前),AudioFlinger 和 AudioPolicyService 都运行在 mediaserver 进程中,从Android 8.0(Oreo)及以后(Project Treble 引入后),为了提高系统稳定性与安全性,Google 将音频相关服务从 mediaserver 中拆分出来,放入独立的 audioserver 进程, 这个进程同时启动AudioFlinger和AudioPolicyService

int main(int argc __unused, char** argv __unused)
{
……
AudioFlinger::instantiate();
  AudioPolicyService::instantiate();
 ……
}

 以下AudioPolicyService简称APS,AudioFlinger简称AF。

AudioPolicyService是音频行为的“决策者,而AudioFlinger是音频行为的执行者,前者定义了音频路由策略,音量控制策略、设备状态检测等,后者负责如何混音,音频怎么输入或输出。AudioPolicyService指挥AudioFlinger来执行音频如何输入输出。

下面先来分析下AudioPolicyService.cpp的代码结构,以便了解定义音频策略和管理音频路由的。

2. 简单示例:

  举个简单的例子:用户播放音乐,然后插入耳机

    1)  应用调用 MediaPlayer.start()

  •  通过 AudioTrack 请求播放。
  • AudioTrack 向 AudioFlinger 注册一个 Playback Track。

    2)  AudioFlinger 询问 AudioPolicyService

  • “我该把这路音乐输出到哪里?”
  •  AudioPolicyService 根据当前设备状态(无耳机)返回:扬声器(Speaker)。

   3)  AudioFlinger 将数据混音后送入 Speaker HAL</

赞(0)
未经允许不得转载:171主机测评 » Android音频系列(08)-AudioPolicyService代码解析
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址