Audio 与 Camera 服务:音视频系统服务概览
2026/8/9大约 3 分钟存储与多媒体Android 14AudioServiceCameraService音视频
Audio 与 Camera 服务:音视频系统服务概览
上一章看了媒体索引。这一章回答:AudioService、CameraService、AudioFlinger 各管 什么,音频焦点与路由如何工作,采集与播放的边界在哪?
策略服务与数据通路不在同一层
| 常见误解 | 正确理解 |
|---|---|
| AudioService 就是放声音 | 它管策略与焦点,真正播放走 AudioFlinger/HAL |
| CameraService 直接驱动硬件 | 它管理会话与权限,硬件经 HAL 访问 |
| 音视频是一个服务 | 音频、相机、媒体播放是多个服务协作 |
核心结论
- AudioService 管焦点、音量与路由策略。
- AudioFlinger 负责混音与输出,桥接 HAL。
- CameraService 管会话、权限与设备状态。
- 应用通过框架 API 发起请求,实际处理在 Native 与 HAL。
- 音频焦点冲突是“为什么我声音没了”的高频原因。
音视频服务主链
逐步解释:
- 音频:应用请求 → 策略(焦点/路由)→ 混音 → HAL。
- 相机:应用请求 → 会话与权限 → HAL。
音频焦点为什么重要
多个应用同时出声时需要协调:焦点机制决定谁可以出声、谁被暂停或压低。焦点丢失 是“播放被打断”的常见原因,排查时先看焦点事件。
源码证据
阅读目标:确认服务入口。
正文指针:AudioService.java 的焦点与策略;CameraService(Native)的会话管理; AudioFlinger 的混音。
// AudioService.java(伪代码,行号以 r75 为准)
int requestAudioFocus(...) { ... } // 焦点请求这段代码证明: 应用侧焦点请求进入 AudioService 策略层;实际输出由 AudioFlinger 与 HAL 完成,策略与执行分离。
验证与排障
环境:开发设备或模拟器;以下命令不需要 root。
adb shell dumpsys audio
adb shell dumpsys media_session
adb shell dumpsys media.camera
adb logcat -v threadtime | grep -E "AudioService|AudioFocus|CameraService"dumpsys audio 看焦点与路由;media_session 看媒体会话;相机看服务状态。播放 被中断先看焦点事件;相机异常先看服务与权限。
常见误区
- “AudioService 负责播放”:播放走 AudioFlinger/HAL。
- “相机服务直连硬件”:经 HAL。
- “音视频是一个服务”:多服务协作。
- “焦点丢失是 bug”:是策略行为,应用要响应。
延伸问题
- 音频路由(蓝牙/外放)由谁决策?
- 相机权限与会话生命周期如何关联?
- AudioFlinger 混音的策略是什么?
- 音视频延迟问题通常在哪一层?
源码入口
| 文件 | 关键位置 | 作用 |
|---|---|---|
AudioService.java | 焦点/策略 | 音频中枢 |
AudioFlinger | 混音 | 输出 |
CameraService | 会话 | 相机管理 |
| HAL 接口 | 硬件 | 设备访问 |
公共路径:frameworks/base/services/core/java/com/android/server/audio/ 与 frameworks/av/services/。行号以 r75 检索为准。
文件如何变成音视频输出,见 媒体播放管线。