本文深入分析Android Bluetooth协议栈中A2DP音频流启动的完整流程,从应用层调用
btif_av_stream_start()
开始,穿越BTIF、BTA、AVDTP多层架构,最终通过L2CAP发送AVDTP启动命令。揭示状态机驱动、异步消息传递、流控制等核心机制。并通过代码与日志结合的方式,揭示蓝牙音频流从 “启动请求” 到 “媒体传输” 的核心机制,为理解蓝牙音频可靠性保障(如重传、资源管理)提供清晰视角。
一、概述
蓝牙音频流的启动是一个跨层协作的复杂过程,涉及应用层、框架层(BTIF、BTA)、协议层(AVDTP)和传输层(L2CAP)的紧密交互。整体流程可分为以下阶段:
-
应用层触发:用户操作(如 “播放音乐”)触发音频流启动请求,通过 BTIF 模块的
btif_av_stream_start
发起流程,定位活跃设备并分发启动事件。 -
框架层处理:BTIF 状态机(
BtifAvStateMachine
)在 “已连接” 状态下接收事件,通过 BTA_AV 的BTA_AvStart
接口向底层发送启动命令,同时处理低延迟模式等配置。 -
AVDTP 协议层交互:AVDTP 连接控制块(CCB)接收启动请求,验证流状态(
avdt_scb_verify
),构建并发送AVDT_SIG_START
命令(含流端点