当前位置: 首页 > news >正文

【android bluetooth 协议分析 11】【AVDTP详解 1】【宏观感受一下avdtp是个啥东东】

我们先从宏观感受一下avdtp协议是个啥东东, 和 a2dp 是啥关系。 在蓝牙协议中的层次。以及他是如何和 例如l2cap 、sdp、a2dp 配合的。先从宏观把握,我们在逐步展开对 avdtp 的源码分析。

我们先从生活中的小例子感性的认识一下 avdtp 在 蓝牙协议中的作用。

1. 生活类比:蓝牙音频连接就像“点歌听歌”的过程

想象这样一个场景:

你在车里(车机 = 音箱 = A2DP Sink),朋友(手机 = 点歌机 = A2DP Source)说“我来放首歌给你听”,然后你们需要经历这样几个步骤:

  1. 互相认识(SDP):你要先确认朋友有播放音乐的能力。

  2. 建立通道(L2CAP):你们要找一个通信频道。

  3. 协商规则(AVDTP):你告诉朋友你的音箱支持什么格式,朋友告诉你它打算用什么格式。

  4. 开始播放(A2DP Media):音乐开始通过媒体通道传输。


2. 车机作为 A2DP Sink 的角色 —— 连接流程详解

蓝牙音频连接总的来说分为两种情况:


1. 情况一:车机主动连接手机

1. 总流程

车机发起连接 → SDP 查询手机支持的服务 → 建立 L2CAP Signaling 信令通道 → AVDTP 握手(发现能力、配置参数) → 建立 L2CAP Media 媒体通道 → 接收音频

2. 详细步骤:

步骤协议内容类比场景
1SDP车机发起 SDP 查询,发现手机是否支持 A2DP Source 服务你问朋友:“你有音乐播放器吗?”
2L2CAP建立信令通道(PSM = 0x0019)用于 AVDTP 协议通信找了个频道和朋友说话
3AVDTP发起 Discover 命令 → 获取手机有哪些 SEID(音频流终端)
发 GetCapabilities → 获取格式能力
你问:“你打算放 MP3 还是 AAC?”
4AVDTPSetConfiguration:告诉手机用哪一套格式
Open:准备打开流
Start:开始播放
“OK,我调音箱为 AAC,准备好了,你放吧”
5L2CAP建立媒体通道(PSM = 动态分配,一般为 0x0041~)专门留出一个通道让他只传音乐
6A2DP音频数据通过媒体通道传输歌曲开始响起来啦
步骤一:SDP 服务发现
  • 使用目标手机的 BluetoothDevice 对象发起 SDP 查询

  • 查询 UUID:0000110a-0000-1000-8000-00805f9b34fb(A2DP Source Profile)

  • 获取结果:包括服务名称、支持的协议层(L2CAP、AVDTP)和版本等

步骤二:建立信令通道(L2CAP)
  • 使用 SDP 得知信令通道的协议号:PSM = 0x0019(AVDTP)

  • 调用 L2CAP API 主动连接该 PSM,成功后会触发 avdt_l2c_appl() 回调(连接完成)

步骤三:AVDTP 信令交互(命令 / 响应)

建立后,车机通过信令通道发送一系列命令:

命令含义说明
Discover查询对方有哪些流终端(Stream Endpoint)手机返回一组 SEID(Stream Endpoint ID)
GetCapabilities获取指定 SEID 的能力参数返回媒体类型、编码格式(SBC、AAC)等
SetConfiguration设置要使用的参数告诉手机我们选择哪个 SEID、格式和参数
Open打开音频流连接等待手机返回成功
Start启动媒体传输通知手机可以开始发音频数据
步骤四:建立媒体通道(L2CAP)
  • 一旦信令通道中 Start 命令响应成功

  • 手机将主动发起对车机的 媒体通道连接请求

    • 使用 L2CAP 的动态 PSM(一般在 0x0040~ 范围内分配)
  • 车机通过回调 avdt_l2c_appl() 的媒体通道路径接收此连接请求

  • 成功建立后,该通道用于传输实时音频数据

2. 情况二:手机主动连接车机

1. 总流程

手机发起连接 → SDP 查询车机支持的服务 → 建立 L2CAP Signaling 通道 → AVDTP 握手 → 建立 Media 通道 → 播放音频

其实和上面一样,只是连接发起方是手机,车机在回调中被动响应

步骤协议内容类比场景
1SDP手机发起 SDP 查询,发现车机是否支持 A2DP Sink手机问:“你是个音箱吗?”
2L2CAP手机连接车机的 AVDTP 信令 PSM(0x0019)
车机触发回调 avdt_l2c_appl
手机说:“我来连接你!”
3AVDTP手机发起 Discover → GetCapabilities → SetConfiguration → Open → Start,车机回应手机说:“我打算放 AAC,你支持吗?” 车机回应:“可以”
4L2CAP手机再连接媒体 PSM,车机回应手机说:“我来给你开个专门传音乐的通道”
5A2DP手机开始传输音频数据,车机播放开始放歌啦

流程几乎一样,但顺序如下:

  1. 手机通过 SDP 查询车机是否支持 A2DP Sink(UUID:0000110b-...

  2. 手机主动连接车机 L2CAP 信令 PSM(0x0019)

  3. 车机接收到连接回调,调用 avdt_l2c_appl() 注册回调

  4. 手机作为 AVDTP 控制端,发起一系列 AVDTP 命令(Discover → GetCapabilities → SetConfiguration → Open → Start)

  5. 车机根据命令进行响应

  6. 手机在 Start 成功后,主动连接媒体通道

  7. 媒体连接建立后,开始发送音频数据


3. AVDTP 和 A2DP 的关系

协议作用类比
A2DP高层协议,定义了音频传输规范、格式、媒体处理等总经理,定方向和政策:“我们要听高质量音乐”
AVDTP低层传输协议,负责信令和媒体通道的管理秘书,安排通道、建立会话:“在哪儿说、怎么说、啥时候开始说”
L2CAP传输层协议,负责数据通道的建立电话线路,管你说啥都要先打通
SDP服务发现协议,找出对方支持哪些服务电话簿:“看看朋友有没有音乐播放器”

为什么要这样分层?

  • 便于解耦、复用。比如 AVDTP 除了服务 A2DP,还服务过 AVCTP(远程控制);
  • 各个协议关注不同方面(发现、通道管理、传输等),模块化设计利于扩展和调试;
  • 便于移植不同平台或设备(比如耳机、音响、电视、车机)都可以重用相同底层逻辑。

4. 总结类比回顾

类比元素对应协议层职责
电话簿SDP查服务
电话线路L2CAP建立传输通道
会话安排人AVDTP安排音频通道、配置
总经理A2DP决定播放策略和格式
播放器媒体通道真正播放音乐的数据流

相关文章:

  • 入住刚装修好的新房,房间隔音太差应该怎么办?
  • ERP系统多少钱一套?| 上海达策TECH-SONIC
  • 三维几何变换
  • 修改element UI 分页组件样式(解决样式不生效问题)
  • Java多线程编程初阶指南
  • 【实战】oninput 文本框输入实时查询防抖机制实现
  • 数字IC低功耗设计——基础概念和低功耗设计方法
  • 出现了锁等待或死锁现象怎么办?乐观锁?分布式锁了解一下?
  • 前端笔记-Vue3(中)
  • 输入框仅支持英文、特殊符号、全角自动转半角 vue3
  • Sqlserver安全篇之_Sqlcmd命令使用windows域账号认证sqlserver遇到问题如何处理的案例
  • JVM考古现场(二十四):逆熵者·时间晶体的永恒之战
  • 乐视系列玩机---乐视1 x600系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • 【AI News | 20250422】每日AI进展
  • Java 静态内部类面试题与高质量答案合集
  • 华为仓颉编程语言基础概述
  • 【漫话机器学习系列】215.处理高度不平衡数据策略(Strategies For Highly Imbalanced Classes)
  • 性能比拼: Redis vs Dragonfly
  • 服装印花/印烫环节计算机视觉应用设计方案
  • STL C++详解——priority_queue的使用和模拟实现 堆的使用
  • 门票在“缩水”,古镇怎么办
  • 资深翻译家、斯诺研究专家安危逝世,曾为多位外国元首做口译
  • 四川苍溪警方通报一男子离家出走:遗体被打捞上岸,排除刑案
  • 30小时已过,俄罗斯复活节停火不再延长
  • 美国多地举行抗议活动,特朗普经济政策支持率创新低
  • 美国海关新规致跨境包裹延误,DHL暂停超800美元对美个人货运