1. AAOS音频系统概述
1.1 AAOS平台音频架构演进
Android Automotive OS(AAOS)的音频架构经历了从移动Android到车载深度定制的演进过程。早期Android音频栈(Android 4.x~8.x)以低延迟媒体播放和应用隔离为核心目标,并未考虑车载多音区、多通道、紧急音频抢占等场景。AAOS从Android 9开始引入汽车音频策略服务(CarAudioService),并在Android 12/13中逐步完善了以音频焦点(AudioFocus)、音频属性(AudioAttributes)和音频上下文(AudioContext)为核心的车载音频路由框架。
关键演进节点:
- Android 9(API 28):引入 CarAudioService,支持基本的多音区路由。
- Android 10(API 29):增加 AudioContext 概念,区分导航、电话、媒体等车载场景。
- Android 11(API 30):完善音频焦点抢占策略,支持紧急音频(如倒车雷达)高优先级打断。
- Android 12(API 31):重构 AudioFlinger 动态路由,支持多通道独立混音。
- Android 13+(API 33+):引入 HAL 层动态设备切换,蓝牙电话集成原生化。
1.2 核心音频服务职责
AAOS音频系统由三个核心服务层构成:应用层的 AudioService、Native层的 AudioFlinger 以及 HAL层的 Audio HAL。下表清晰划分了各层的职责边界:
| 服务/组件 | 运行层级 | 核心职责 | 车载特有扩展 |
|---|---|---|---|
| AudioService | Java Framework | 音频焦点管理、音量策略、音频策略决策、应用音频请求仲裁 | CarAudioService 扩展:多音区策略、车载音频上下文映射 |
| AudioFlinger | Native (C++) | 音频混音、通道路由、采样率转换、音效处理、硬件抽象接口 | 动态设备切换、多通道独立混音、低延迟路径管理 |
| Audio HAL | HAL (C/++ ) | 硬件设备抽象、音频流打开/关闭、路由控制、音量调节 | 多物理设备映射、车载总线(A2B/MOST)适配 |
架构师视角: AudioService 是“决策者”,决定音频流该去哪个音区、该被谁打断;AudioFlinger 是“执行者”,负责实际的混音和路由切换。车载场景下,决策逻辑远比移动端复杂,因为涉及驾驶安全优先级、乘客独立体验、蓝牙电话免提等特殊需求。
1.3 车载音频的特殊性
与移动Android相比,AAOS车载音频面临以下五大核心差异:
- 多音区(Multi-zone):驾驶座、副驾、后排、第三排可独立播放不同音频源,且互不干扰。
- 音频优先级与抢占:导航提示可打断媒体播放,倒车雷达/紧急告警可抢占所有音频,蓝牙电话可混音或独占。
- 多通道硬件拓扑:车载音响系统通常包含 4~20+ 个物理声道,需支持 5.1/7.1 环绕声、独立低音炮、中置声道等。
- 蓝牙电话集成:HFP(Hands-Free Profile)音频需与车载麦克风、扬声器、A2DP 媒体流共存,且需支持电话与导航混音。
- 低延迟与安全约束:倒车雷达音频延迟需 <50ms,紧急告警不可被音量限制或静音策略阻挡。
下图展示了AAOS车载音频系统的分层架构与核心数据流:
1.4 车载音频路由核心概念
在AAOS中,音频路由决策依赖以下四个核心概念的协同工作:
| 概念 | 定义 | 车载场景示例 |
|---|---|---|
| AudioAttributes | 描述音频流的用途(媒体、导航、电话、告警等) | 导航提示使用 USAGE_ASSISTANCE_NAVIGATION_GUIDANCE |
| AudioFocus | 控制音频流的播放权限,支持请求、放弃、抢占 | 蓝牙电话获得焦点后,媒体自动暂停 |
| AudioContext | 车载特有的音频场景标识,映射到物理音区 | CONTEXT_NAVIGATION 路由到驾驶座扬声器 |
| CarAudioZone | 物理音区定义,包含一组扬声器和麦克风 | Zone0=驾驶座,Zone1=副驾,Zone2=后排 |
常见误区: 很多开发者将 AudioAttributes 与 AudioContext 混用。实际上,AudioAttributes 是应用侧的音频用途声明,而 AudioContext 是系统侧根据车辆状态(如驾驶模式、乘客位置)映射出的音频场景。两者通过 CarAudioService 的策略配置进行关联。
1.5 蓝牙电话集成的特殊挑战
蓝牙电话(HFP)集成是车载音频最复杂的场景之一,其特殊性体现在:
- 双向音频流:上行(麦克风)和下行(扬声器)需同时路由,且延迟要求 <100ms。
- 混音需求:电话通话中,导航提示、倒车雷达等音频需以较低音量混入,不可中断通话。
- 设备切换:蓝牙电话可能从手机切换到车载麦克风/扬声器,或从车载切换到外接蓝牙耳机。
- HFP与A2DP共存:电话使用 SCO 链路,媒体使用 A2DP 链路,两者需在 AudioFlinger 中独立混音。
下图展示了蓝牙电话音频在AAOS中的典型路由路径:
实践要点: 蓝牙电话集成时,需在 CarAudioService 中配置
CONTEXT_CALL 到物理音区的映射,并确保 AudioFlinger 的 FastMixer 线程为 SCO 音频提供低延迟路径。同时,导航混音应使用 AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE 并设置 FLAG_DUCK 标志,实现通话中的自动闪避。