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车载音频面临以下五大核心差异:

  1. 多音区(Multi-zone):驾驶座、副驾、后排、第三排可独立播放不同音频源,且互不干扰。
  2. 音频优先级与抢占:导航提示可打断媒体播放,倒车雷达/紧急告警可抢占所有音频,蓝牙电话可混音或独占。
  3. 多通道硬件拓扑:车载音响系统通常包含 4~20+ 个物理声道,需支持 5.1/7.1 环绕声、独立低音炮、中置声道等。
  4. 蓝牙电话集成:HFP(Hands-Free Profile)音频需与车载麦克风、扬声器、A2DP 媒体流共存,且需支持电话与导航混音。
  5. 低延迟与安全约束:倒车雷达音频延迟需 <50ms,紧急告警不可被音量限制或静音策略阻挡。

下图展示了AAOS车载音频系统的分层架构与核心数据流:

AAOS 车载音频系统分层架构 应用层(Application Framework) 媒体应用 · 导航应用 · 蓝牙电话应用 · 语音助手 · 系统UI 服务层(AudioService / CarAudioService) 音频焦点管理 · 音量策略 · 音频上下文映射 · 多音区路由决策 AudioAttributes · AudioFocus · AudioContext · ZonePolicy Native层(AudioFlinger) 音频混音 · 通道路由 · 采样率转换 · 音效处理 · 动态设备切换 MixerThread · FastMixer · DynamicRouting · EffectChain HAL层(Audio HAL) 硬件抽象 · 多物理设备映射 · 车载总线适配(A2B / MOST / I2S) 车载音响硬件(DSP · 功放 · 扬声器阵列 · 麦克风) 应用 音频请求 策略 仲裁 混音 路由 硬件 抽象

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中的典型路由路径:

蓝牙电话音频路由路径(HFP) 蓝牙模块(HFP) SCO 链路 AudioFlinger 混音 · 路由 扬声器(下行) 驾驶座/全车 麦克风(上行) 驾驶座麦克风 AudioFlinger 上行处理 蓝牙模块(HFP) SCO 上行 导航/告警混音输入 低音量混入下行 关键约束 下行延迟 <100ms · 上行降噪
实践要点: 蓝牙电话集成时,需在 CarAudioService 中配置 CONTEXT_CALL 到物理音区的映射,并确保 AudioFlinger 的 FastMixer 线程为 SCO 音频提供低延迟路径。同时,导航混音应使用 AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE 并设置 FLAG_DUCK 标志,实现通话中的自动闪避。