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 的传输层协议,负责建立、配置和释放音频流。其建立过程分为两个子阶段:

  1. Signaling 通道建立:车载 SNK 与手机 SRC 在 L2CAP 上建立 AVDTP 信令通道(PSM=0x0019)。
  2. 流端点发现与配置: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 定义了严格的流状态机,车载系统必须准确维护每个流端点的状态,才能正确收发音频数据。

AVDTP Streaming 状态机 IDLE OPEN STREAMING CLOSING ABORTING AVDTP_OPEN AVDTP_START AVDTP_SUSPEND AVDTP_CLOSE AVDTP_ABORT CLOSE_CFM ABORT_CFM 说明:STREAMING 状态是唯一允许传输音频数据的阶段。SUSPEND 暂停流但不关闭通道,CLOSE 完全释放流资源。

3.6 完整连接时序总结

将上述五个阶段串联起来,一次成功的 A2DP 连接时序如下:

  1. 蓝牙配对:SSP 完成链路层加密,生成 Link Key。
  2. SDP 查询:确认手机支持 A2DP SRC 及 Codec 能力。
  3. AVDTP 信令通道:建立 L2CAP 连接,Discover SEP。
  4. Codec 协商:SET_CONFIGURATION 确定 Codec 类型与参数。
  5. 流打开:AVDTP_OPEN 进入 OPEN 状态。
  6. 流启动:AVDTP_START 进入 STREAMING 状态,开始传输音频。
车载嵌入式软件实现建议:
  • 在 SDP 查询阶段缓存手机 Codec 能力,避免每次重连都重新查询。
  • 在 SET_CONFIGURATION 阶段实现 Codec 降级逻辑:若手机首选 AAC 失败,自动尝试 SBC 48kHz/328kbps。
  • 状态机实现时,为每个流端点维护独立的状态变量,防止多流并发时状态错乱。
  • STREAMING 状态下,若连续 3 秒未收到媒体包,应触发 AVDTP_SUSPEND 并上报音频断流事件。