如何在车载系统中实现无缝的音频切换(从手机到车机)?
解读
面试官问的是“车载场景”下的“无缝音频切换”,不是简单的蓝牙耳机切歌。国内主流车机系统分为两类:
- 谷歌主导的 Android Automotive OS(AAOS),整车厂可深度定制;
- 手机厂商推出的互联协议,如华为 HiCar、小米 CarWith、OPPO Car+、vivo Jovi InCar,它们把手机算力投射到车机屏幕,音频仍走蓝牙或 USB Audio Class。
“无缝”= 用户无感知,即手机正在播放的媒体流在 300 ms 内迁移到车机扬声器,同时电话、导航、语音助手优先级不乱;还要符合国内对隐私、安全、驾驶分心的法规要求。因此必须同时解决:设备发现、传输路由、焦点管理、时钟同步、权限合规五大环节。
知识点
-
Android 10 以上音频框架
- AudioPolicyManager:维护路由表,支持 dynamic policy 与 audio patch。
- AudioFocusRequest:Android 8 引入延迟焦点与“独占-瞬时”策略,车载需启用 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK。
- MediaBrowserService / MediaSession:标准车载媒体协议,车机侧通过 MediaBrowser 订阅,手机侧通过 MediaSession 暴露播放状态。
-
国内互联协议栈
- 物理层:蓝牙 5.x BLE + Classic 双模,或 USB 2.0 High-Speed Audio Class;
- 发现层:HiCar 使用基于 BLE 广播的“华为互联服务 UUID”,小米使用 mDNS + Custom TLV;
- 传输层:音频走 RTP/AVTP(以太网)或 A2DP offload + aptX Adaptive;控制走 MQTT over TLS1.3;
- 安全层:国密 SM4 加密 + 车规级 SELinux policy,需过《汽车数据安全管理若干规定》脱敏。
-
时钟同步与无缝迁移
- 采用 IEEE 802.1AS gPTP 做时间戳,手机与车机对齐 48 kHz 时钟,误差 < 100 µs;
- 播放状态同步:手机端在切换前通过 Binder IPC 把 AudioTrack 的 presentation timestamp 发给车机,车机端 AudioFlinger 根据 pts 做 fade-in/out 交叉淡入淡出,保证 0 采样间隙。
-
焦点仲裁策略(国内车厂统一要求)
优先级:紧急提示音 > 导航 TTS > 电话 > 语音助手 > 媒体;
当手机来电时,车机侧 AudioPolicy 强制抢占焦点,挂断后自动归还媒体焦点,状态机需通过 CarAudioService 上报到 SystemUI。 -
权限与合规
- 麦克风录音需弹窗“仅此次”授权,Android 13 后台录音必须挂 foregroundService;
- 行车中禁止视频投屏,需读取 VehiclePropertyIds.GEAR_SELECTION,非 P 档才能激活高带宽投屏通道;
- 数据出境审查:音频采样需本地匿名化,禁止上传云端,符合《个人信息保护法》第 38 条。
答案
“我会采用 AOSP 12 的 AudioPolicy 动态路由 + 国内互联协议双通道方案,分五步实现:
- 设备发现:手机侧启动 Custom MDnsService,车机作为 resolver,3 秒内完成 TLS 握手并交换证书,确保国密 SM4 加密。
- 能力协商:通过 MediaBrowserService 的 getExtras() 上报手机端支持的编码(aptX Adaptive、LC3、24-bit/48 kHz),车机返回扬声器物理延迟与支持的 gPTP domain。
- 时钟同步:车机端启动 gPTP master,手机作为 slave,对齐 48 kHz 时钟;同时把 AudioTrack 的 presentation timestamp 通过 MQTT 控制通道发给车机。
- 无缝迁移:手机端 AudioTrack 在下一帧边界调用 pause(),把未播放的 PCM 缓存通过 RTP 发送到车机;车机侧 AudioFlinger 创建新的 AudioTrack,以相同 pts 开始播放,并在 20 ms 内做线性淡入淡出,用户无感知。
- 焦点与合规:迁移完成后,手机主动 abandonAudioFocus(),车机通过 CarAudioService 请求 AUDIOFOCUS_GAIN,并注册 PhoneStateListener,来电时瞬时抢占焦点;行车中若检测到非 P 档,立即断开视频通道,仅保留音频,确保符合国内法规。”
拓展思考
-
如果车载以太网带宽不足,如何降级到蓝牙 LE Audio 并维持 < 200 ms 延迟?
思路:启用 ISOchronous 通道,采用 LC3 32 kbps 编码,同时把音频 buffer 降到 7.5 ms 一帧,利用 Android 13 引入的 BluetoothLeAudioCodecConfig 动态切换。 -
多音区场景下,如何让副驾蓝牙耳机与车机扬声器同时播放互不干扰?
需用到 Android 12 的 AudioAttributes.USAGE_ASSISTANT 与 AudioAttributes.USAGE_MEDIA 分别绑定到不同 audio zone,通过 CarAudioDynamicRouting 把副驾流映射到 BT 耳机 zone,司机流映射到前排扬声器 zone,实现硬件级混音隔离。 -
未来 Google 推广 UWB 钥匙,音频是否可能走 UWB 高速数据通道?
目前 UWB 在 802.15.4z 下理论带宽 27 Mbps,但车载金属环境多径严重,需做 OFDM 调制 + MIMO 波束成形,延迟与功耗仍高于 Wi-Fi 6E,短期内只适合做密钥测距,音频仍走 Wi-Fi/蓝牙。