【蓝牙专题】AVDTP协议解析

前两篇文章看了AVCTP和AVRCP,今天继续分析AVDTP;

一、概述

1、框架

AVDTP( A/V Distribution Transport Protocol)定义了A/V stream协商、建链和传输过程,也规定了两个设备传输数据的格式;

前面我们看了AVCTP提供通信框架,AVRCP提供具体的远程控制协议,AVDTP也是在AVCTP框架下的一个具体协议,提供了流媒体在通信时的具体过程和数据帧格式;

AVDTP功能如下:

a、发现设备支持的功能;

b、提供建立连接和release链接机制;

c、提供具有实时性的数据包和机制,包括最小传输延时机制、包含时钟的数据包机制、Qos包和传输状态机制、带宽优化机制;

d、提供修复机制;

如下图所示,同样的,AVDTP通过L2CAP包来实现媒体流和建链信号的传递的等;PSM (Protocol/Service Multiplexer)value用来标识L2CAP包传递的是AVDTP帧;AVDTP传输使用面向连接的L2CAP;

因为AVDTP涉及流媒体相关操作,所以还需要其他profile的支持,如下图所示:

下图暴露出6个接口,每个接口作用可以看下后面的表格,都有详细说明:

Interface1:SDP用来查询蓝牙属性(流媒体属性);

Interface2:应用程序接口用来交换Reporting packages of stream(QoS reporting);

Interface3和Interface5:AVDTP signaling messages(L2CAP层 PSM value = AVDTP);

Interface4和Interface6:AVDTP media packets(L2CAP层 PSM value = AVDTP);

2、名词解释

a、SRC与SNK,数据流的流入与流出端;

b、INT(Initiator)与ACP(Acceptor),发起初始化一段为INT,另一端为ACP;

c、SEP(stream end point),相当于AVDTP的一个流媒体接入点;

d、SC(stream context),stream过程变量;

e、SH(stream handle),句柄;

f、SEID(Stream End Point Identifier ),不同于SH,在signaling包中使用;

g、TSID(Transport Session Identifier),代表一次传输;

h、TCID(Transport Channel Identifier);

二、signaling messages

1、我们先来看signaling messges的流程,虚线表示是可选择的:

下图对应命令集和状态集:

2、signaling messages组包:

当遇到的数据包过大时,因为L2CAP的MTU限制,所以要进行拆包处理,如下图:

3、Singal命令和响应数据包头定义

TL就是唯一标识,由INT端定义;其他说明见图

4、例子

下图message type对应command=0,剩下的我们根据spec都可以对应出来;

三、media streaming

        media streaming也通过L2CAP信道传输,media streaming包格式比较多,我们重点看三个包类型,分别是Media packets,Reporting Packets,Recovery Packets,下面我们分别看下这三种包的格式,见下图:

1、media Packet格式

如图所示,前12字节是必须的,SSRC域只能被用于多播应用(multicast application),它在通信中定义了source-node ID,具体format说明参见下面表格;

2、reporting service

reporting message有多种包,其中Sender Report Reporting packet (SR)和Receiver report packet (RR)格式相同,如下:

3、recovery package

这里暂不做说明;

四、总结

        media streaming包还有其他,比如Multiplexing Service、Robust Header Compression Service等,这些等以后遇到相关内容再做说明,不然对初学者很容易混淆;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux蓝牙协议栈是指在Linux操作系统上实现蓝牙功能所需的软件组件。它包括了多个层次的协议和工具,用于控制蓝牙设备的连接、数据传输和配置等操作。 在Linux中,蓝牙协议栈通常由以下几个主要组件组成: 1. 蓝牙核心协议栈(BlueZ):BlueZ是Linux中最常用的蓝牙协议栈,它提供了蓝牙设备管理和通信所需的核心功能。BlueZ支持多种蓝牙配置文件和协议,如RFCOMM、L2CAP、HID等。 2. HCI层:蓝牙硬件通信接口层(Host Controller Interface),负责与蓝牙硬件进行通信。它提供了与蓝牙适配器进行交互的API,包括设备发现、连接管理、数据传输等功能。 3. L2CAP层:逻辑链路控制与适配层(Logical Link Control and Adaptation Protocol),提供了一种在不同蓝牙设备之间建立高层次连接的方法。它可以支持多个不同的上层协议,如RFCOMM、AVDTP等。 4. RFCOMM层:串行端口模拟协议(Radio Frequency Communication),提供了一种在蓝牙设备之间建立虚拟串口连接的方法。它可以模拟传统串口通信,使得应用程序可以通过蓝牙进行串口通信。 除了上述核心组件外,还有其他辅助组件和工具,如蓝牙管理工具(bluetoothctl)、蓝牙网络协议栈(BlueZ-Net)、蓝牙音频协议栈(BlueZ-Audio)等,用于提供更多的蓝牙功能和服务。 总的来说,Linux蓝牙协议栈为开发者提供了一套完整的软件工具,可以方便地实现和管理蓝牙设备的连接和通信。开发者可以利用这些组件来构建各种蓝牙应用,如无线耳机、蓝牙键鼠、蓝牙打印机等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值