蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

零. 概述

主要介绍下蓝牙协议栈(bluetooth stack)传统蓝牙音频协议之 音视频分布传输协议的命令封包介绍,包括下图所示:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

一. 声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

-------------------------------------------------------------------------------------------------------------------------

****学院链接(进入选择你想要学习的课程):https://edu.****.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录https://blog.****.net/XiaoXiaoPengBo/article/details/107727900

--------------------------------------------------------------------------------------------------------------------------

二. AVDTP命令封包介绍

1. Stream End Point Discovery

每个AVDTP端都会注册一个或者多个SEP,通过SEID来标示,这个命令就是获取对端的SEP信息,包括SEID(SEP的ID),In Use(是否被使用),Media Type(Audio,Media,MultiMedia),TSEP(角色是Sink还是Source),流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

1.1 Stream End Point Discovery Command

AVDTP_DISCOVER_CMD这个命令是获取到remote端所有的SEP的信息,格式如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

1.2 Stream End Point Discovery Response

AVDTP_DISCOVER_RSP是对AVDTP_DISCOVER_CMD的回应。Payload中带有所有SEP的信息

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

SEID:SEP的ID,可用值是0x1~0x3e

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

In Use:表示这个SEP是否被使用

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

Media Type:用于表示type,0为audio,1为video

TESP:用于表示是SRC还是SNK

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

1.3 Stream End Point Discovery Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

2. Get Capabilities

这个命令以及被舍弃,之所以保留继续写是为了旧设备的兼容性。

此命令是通过SEID来获取对方的Capabilities,其中Capabilities在前面已经介绍,我们来看下程序流程

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

2.1 Get Capabilities Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

2.2 Get Capabilities Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

AVDTP_GET_CAPABILITIES_RSPP是对AVDTP_GET_CAPABILITIES的回应,其中Service Capabilities已经上一篇介绍。

2.3 Get Capabilities Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

3. Get All Capabilities

此命令是用于取代Get Capabilities,同样是通过SEID来获取对方的Capabilities,其中Capabilities在前面已经介绍,我们来看下程序流程:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

3.1 Get All Capabilities Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

3.2 Get All Capabilities Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

其中Service Capabilities在以上章节已经说明。

3.3 Get All Capabilities Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

4. Set Configuration Command

在获取Capabilities后,此部分就是选择特定的功能参数,程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

4.1 Set Configuration Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

其中Service Capabilities已经上一篇介绍。

4.2 Set Configuration Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

4.3 Set Configuration Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

5. Get Stream configuration

此命令用于根据SEID来获取配置,程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

5.1 Get Configuration Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

5.2 Get Configuration Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

5.3 Get Configuration Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

6 Stream Reconfigure

此命令用于重新配对设置,程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

6.1 Reconfigure Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

6.2 Reconfigure Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

6.3 Reconfigure Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

7. Stream Establishment

此命令用于打开某一个SEID,程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

7.1 Open Stream Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

7.2 Open Stream Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

7.3 Open Stream Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

8 Stream Start

此命令用于开启一个SEID的media传输,程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

8.1 Start Stream Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

8.2 Start Stream Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

8.3 Start Stream Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

9 Stream Release

此命令用于关闭一个media传输,程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

9.1 Close Stream Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

9.2 Close Stream Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

9.3 Close Stream Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

10 Stream Suspend

此命令用于暂停一个media的传输,程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

10.1 Suspend Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

10.2 Suspend Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

10.3 Suspend Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

11 Abort

此命令用于终止程序,在任何状态都可以下,程序指令流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

11.1 Abort Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

11.2 Abort Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

12 Security Control

程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

12.1 Security Control Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

12.2 Security Control Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

12.3 Security Control Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

13 General Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

14 Delay Report

程序流程如下:

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

14.1 Delay Report Command

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

14.2 Delay Report Response

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍

14.3 Delay Report Reject

蓝牙音频双剑客(一)--音视频频分布传输协议(AVDTP) 命令(Signal)封包介绍