前两篇文章看了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等,这些等以后遇到相关内容再做说明,不然对初学者很容易混淆;