3. A2DP 连接建立流程:蓝牙配对、Service Discovery、AVDTP 流建立、Codec 配置协商、Streaming 状态机
A2DP 连接建立是车载音频系统中最为关键的链路之一。从用户点击“连接手机”到音乐真正从车载扬声器播放,中间需要经历 蓝牙配对、Service Discovery、AVDTP 流建立、Codec 配置协商 以及 Streaming 状态机 五个核心阶段。任何一个阶段失败或超时,都会导致音频无法正常路由。
3.1 蓝牙配对(Pairing)
配对是 A2DP 连接的前提。车载系统作为 SNK(Sink),手机作为 SRC(Source),双方通过 SSP(Secure Simple Pairing)完成密钥交换与链路层加密。
| 配对模式 | 适用场景 | 用户交互 |
|---|---|---|
| Just Works | 车载免提、无显示屏设备 | 无需 PIN 码,自动配对 |
| Numeric Comparison | 车载中控屏 + 手机 | 显示 6 位数字,用户确认 |
| Passkey Entry | 老旧车载系统 | 输入固定 PIN(如 0000) |
实战要点: 车载系统应优先支持 Just Works 模式以减少用户操作步骤。若使用 Passkey Entry,需确保 PIN 码输入超时时间 ≥ 30 秒,避免频繁配对失败。
3.2 Service Discovery(SDP)
配对完成后,车载系统通过 SDP 查询手机支持的蓝牙 Profile 列表。A2DP 连接必须确认手机 SRC 角色支持以下服务:
- A2DP SRC(UUID: 0x110A)— 音频源
- AVDTP(UUID: 0x0019)— 音视频分发传输协议
- Codec 列表 — SBC 为强制支持,可选 AAC / LDAC / aptX
SDP 查询结果将决定后续 Codec 协商的候选集。若手机未声明 A2DP SRC,车载系统应主动断开链路并提示用户。
3.3 AVDTP 流建立(Stream Establishment)
AVDTP 是 A2DP 的传输层协议,负责建立、配置和释放音频流。其建立过程分为两个子阶段:
- Signaling 通道建立:车载 SNK 与手机 SRC 在 L2CAP 上建立 AVDTP 信令通道(PSM=0x0019)。
- 流端点发现与配置:SNK 发送
AVDTP_DISCOVER获取 SRC 的流端点(SEP)信息,随后通过AVDTP_SET_CONFIGURATION协商 Codec 与传输参数。
关键命令序列:
SNK → SRC: AVDTP_DISCOVER
SRC → SNK: AVDTP_DISCOVER_RSP (SEP list)
SNK → SRC: AVDTP_GET_CAPABILITIES (SEID=1)
SRC → SNK: AVDTP_GET_CAPABILITIES_RSP (Codec caps)
SNK → SRC: AVDTP_SET_CONFIGURATION (Codec=SBC, 44.1kHz, 328kbps)
SRC → SNK: AVDTP_SET_CONFIGURATION_RSP (Accepted)
SNK → SRC: AVDTP_OPEN
SRC → SNK: AVDTP_OPEN_RSP
3.4 Codec 配置协商(Codec Configuration Negotiation)
Codec 协商是 A2DP 连接中最容易出问题的环节。车载系统作为 SNK,必须根据自身解码能力与手机 SRC 协商出双方都支持的 Codec 及参数。
| Codec | 强制/可选 | 典型比特率 | 车载常见限制 |
|---|---|---|---|
| SBC | 强制 | 328 kbps (44.1kHz) | 所有车载系统必须支持 |
| AAC | 可选 | 256 kbps | 部分 SoC 无硬件 AAC 解码器 |
| LDAC | 可选 | 990 kbps | 需高通或专用芯片支持 |
| aptX / aptX HD | 可选 | 352 / 576 kbps | 需授权且芯片支持 |
协商失败时,AVDTP 会返回 AVDTP_SET_CONFIGURATION_REJECT,SNK 应降级尝试 SBC 或降低采样率/比特率。
常见问题: 部分手机在 AAC 协商失败后不会自动回退到 SBC,导致无声。车载系统应在 SET_CONFIGURATION 阶段主动检查 Codec 类型,若手机强制 AAC 而车载不支持,应返回
SEP_NOT_IN_STATE 错误码,迫使手机重新协商。
3.5 Streaming 状态机(Streaming State Machine)
AVDTP 定义了严格的流状态机,车载系统必须准确维护每个流端点的状态,才能正确收发音频数据。
3.6 完整连接时序总结
将上述五个阶段串联起来,一次成功的 A2DP 连接时序如下:
- 蓝牙配对:SSP 完成链路层加密,生成 Link Key。
- SDP 查询:确认手机支持 A2DP SRC 及 Codec 能力。
- AVDTP 信令通道:建立 L2CAP 连接,Discover SEP。
- Codec 协商:SET_CONFIGURATION 确定 Codec 类型与参数。
- 流打开:AVDTP_OPEN 进入 OPEN 状态。
- 流启动:AVDTP_START 进入 STREAMING 状态,开始传输音频。
车载嵌入式软件实现建议:
- 在 SDP 查询阶段缓存手机 Codec 能力,避免每次重连都重新查询。
- 在 SET_CONFIGURATION 阶段实现 Codec 降级逻辑:若手机首选 AAC 失败,自动尝试 SBC 48kHz/328kbps。
- 状态机实现时,为每个流端点维护独立的状态变量,防止多流并发时状态错乱。
- STREAMING 状态下,若连续 3 秒未收到媒体包,应触发 AVDTP_SUSPEND 并上报音频断流事件。