BT协议-应用框架の蓝牙音视频应用框架
本节介绍三个蓝牙音视频的高级应用框架:
- 蓝牙音视频遥控应用框架-AVRCP:实现蓝牙无线遥控功能的规范。它只描述遥控器的控制功能,不负责处理音频视频数据流。
- 通用音视频分发应用框架-GAVDP:定义了蓝牙设备间的A / V数据流的协商和建立过程以及相应的信令消息格式。它基于GAP框架。
- 高级音频分发应用框架-A2DP:定义了点对点的音频分发。目的是利用蓝牙的异步无连接(ACL)传输高质量的单声道(Mono)和立体声(Stereo)音频数据。
注意,之前在“蓝牙音频与电话控制协议 (Audio/TCS_binary)” 一章中已经定义过蓝牙音频协议了,那是基于面向连接(SCO)的同步数据链路传输的。
蓝牙音视频遥控应用框架-AVRCP
AVRCP 在协议栈中的位置如下图,AVCTP定义了利用蓝牙技术控制AV设备的协议标准。AV控制实体负责传输基于AV/C数字接口指令集的控制指令。
一,设备角色
- 控制器(CT)
通过向目标设备发送之灵数据分组初始化控制会话 - 目标机(TG)
根据接收到的指令数据分组生成相应的响应数据分组
二,应用模型
- 利用独立的遥控器进行遥控
- 两个设备间同时进行遥控及音频数据流传输
- 微微网内设备的相互遥控
- 带有LCD和扬声器的遥控器
三,AVRCP遥控操作
利用蓝牙进行音视频设备的遥控操作主要涉及 控制的建立与释放,以及基于音频视频控制(AV/C)指令集的数据分组的收发处理。
-
控制连接的建立
AVRCP 的控制连接建立在为AVCTP建立的L2CAP连接之上,建立过程可以由CT发起,也可以由TG发起,内部事件和用户发起的事件。 -
控制连接的释放:CT和TG任何一方都可以首先发起控制连接的释放,内部事件和用户发起的事件都可以触发这一过程。
-
AV/C指令过程:
L2CAP连接一旦建立,就可以在CT和TG之间进行AV/C 指令的收发。如图:
-
AV/C指令操作
(1)Unit Info
UNIT INF() 指令用来获取AV/C设备的整体信息。响应数据分组包含了描述TG的设备提供商编号(Vendor ID)与子设备类型(Submit Type);其中 Vendor ID可以在使用Vendor Dependent 之前被用来察看TG的设备提供商。Submit Type 指出了更为具体的设备类型,例如录像机(VCR) 可以返回“tape recorder/player ” 子设备类型。(2)Submit Info指令用来获取AV/C 设备的子设备信息。
(3)Vendor Dependent指令允许设备提供商为AV/C 设备或子设备指定提供商自己的指令与响应集。
(4)Pass Though指令是使用最多的:如播放,停止,快进,快退,下一曲,上一曲等。
四,AV/C 指令与响应
AV/C 指令与响应数据分组封装在音频视频控制传输协议(AVCTP)指令/响应消息信息字段当中。
(1)AV/C会话规则
CT向TG发送指令以后,TG需在规定时间内必须做出响应。在某些情况下,当TG 不能及时做出正确响应时,应该向CT 发出中间相应(Interim),表示最终响应稍后就到达。
(2)AV/C指令数据分组
AV/C 指令与响应数据分组包含了最多512字节的数据,这些数据被置于音频视频控制传输协议(AVCTP)指令/响应消息信息字段当中。格式如下:所有的操作数都是可选的,而且取决于Ctype , submit_Type 和操作码的取值。
(3)AV/C响应数据分组
所有的操作数都是可选的,而且取决于Response , submit_Type 和操作码的取值。
(4)AV/C响应数据分组中的字段
Command Type Codes(CType,指令类型)
Response Code (Response, 响应)
AV/C Address (Submit_Type,Submit_ID)
Submit_ID Encoding,
Operation (OpCode, 操作码)
Operands(操作数)
五,AVRCP所支持的设备指令
AVRCP所支持的设备指令有Unit Info 指令 和 Submit Info 指令两种。
- Unit Info
指令用来获取与AV/C设备相关的整体信息; - Submit Info
指令用来获取某一设备的子设备信息。
六,AVRCP的设备AV功能分类
- 播放/录制设备
- 监视器/功放
- 调谐器
- 菜单
通用音视频分发应用框架-GAVDP
GAVDP 是基于 GAP的,而A2DP 是基于 GAVDP 的。
GAVDP通信规范
设备状态
AVDTP 定义了 6 种端点状态,GAVDP 设备可能处于其中的三种:
-
空闲状态(Idle)
指当用于信令传输的L2CAP信道已经打开,但没有建立数据流连接的初始状态。 -
打开状态(Open)
指当两个设备之间的数据流连接已经建立的状态。 -
数据流传输状态(Streaming)
两个设备之间可以开始数据流传输的状态。
连接控制
(1)连接建立流程
连接建立之后就会进入 打开状态,这两个设备的INT 和 ACP 角色就会被释放,不存在 INT 和 ACP 之间的区别。
(2)启动数据流传输流程
(3)连接释放流程
传输控制
(5)数据流通信悬挂流程
(6)更改参数流程
信令控制
(7)信令控制流程:包括放弃连接 和 分发传输 两个进程;
安全控制
(8)安全控制流程
#####################################################################################################
(9)传输服务
一旦在INT 和 ACP之间建立了数据流连接,双方就可以传输数据流了。这里的数据流传输利用的AVDTP协议提供的基本传输服务,服务质量与传输分组管理的传输服务,以便充分利用带宽。
高级音频分发应用框架-A2DP
高级音频分发框架(A2DP)定义了 点对点 的音频分发。A2DP的典型应用是音乐播放器将音频数据发往耳机和音箱,音频数据可能进行了有效压缩以便在很窄的带宽上传输。下图为其在协议栈的位置:
本章节的框架:
A2DP通信流程
- 音频数据流连接的建立
在音频流连接的建立过程中,应该选择最合适的音频参数,有两种可以配置的服务(AVDTP中定义)。
-
应用服务能力:包括音频数据的编解码能力和音频数据的保护能力,如模式,采样频率和传码率。
-
传输服务能力:为了更加智能化地控制数据流分组,传输服务能力适当配置会增加信道吞吐量。
下图表示音频数据流的建立流程:
- 音频数据流的传输
SRC信源使用“发送音频数据流”将音频数据发送到 SNK信宿, SNK使用“接收音频数据流”接收音频数据。A2DP中的音频分发流程和分组格式,其实就是一层一层的披上狼皮:
接收音频数据流分组处理过程与发送过程整好相反,信宿SNK逐层把 音频数据的衣服趴下。。。
A2DP音频编码
- 低复杂度子带编解码(SBC)
(1)SBC编解码信息元素
-
采样频率:SNK信宿的解码器应该支持44.1kHz和48kHz 采样频率。SRC信源的编码器至少应该支持44.1kHz和48kHz采样频率中的一种。
-
声道模式:SNK信宿的解码器应支持全部的声道模式。SRC的编码至少应该支持单声道和双声道,立体声,联合立体声中的一种。
-
块长度:4,8,12,16字节数,SNK的解码器和SRC的编码器应该支持全部的参数取值。
-
子带(Subbands):4, 8;SNK信宿解码器应支持全部的子带数,SRC的编码器至少支持8个子带的情况。
-
分配方法:。。。
-
最小或者最大数据位池取值:8位的最小或最大数据位池取值范围为2~250。利用最小/大数据位池取值和其他的编解码参数(采样频率,信道模式,块长度和子带数),接收方可以计算出传码率和数据帧长度这两个参数。
决定传码率的编解码信息包含于SBC 数据帧头部,并且和音频数据流一起呗不断地发送到SNK。SRC信源应该能够通过改变数据位池参数取值动态地,无延时地改变传码率。
SNK信宿的解码器应该支持全部不会导致超过最大传码率的数据位池取值。单声道的最大传码率为320kbps,双声道的最大传码率为512 kbps。
(2)媒体分组头要求
时间戳(TS):用来生成TS的时钟频率应该被设置为编码音频数据的采样频率。
有效荷载类型(PT):应动态选择有效荷载类型;
标志位:设置为0;
扩展位:不使用,设置为0;
(3)媒体有效载荷格式
SBC的有效荷载包含了 SBC分组头 和 SBC数据帧。
-
MPEG-1,MPEG-2音频
MPEG-1,MPEG-2音频的编解码信息元素格式如图:
MPF:媒体有效载荷格式
VBR:可变比特率 -
MPEG-2,MPEG-4高级音频编码(AAC)
MPEG-2,MPEG-4音频编码(AAC)的编解码信息元素格式如图:
采样频率:SNK 的解码器应该支持44.1kHz 和 48kHz 的采样频率。SRC的编码器至少应支持44.1kHz和48kHz采样频率的一种。
声道:SNK 应支持两种声道,SRC 至少应支持一种声道。
比特率:比特率用23位数据字段表示。全0 取值表示未知大小的比特率。 -
自适应变换音频编码(ATRAC)
自适应变换音频编码(ATRAC)的编解码信息元素格式如图:
采样频率:44.1kHz 和 48kHz。SNK信宿 和 SRC信源 至少应该支持一种采样频率。
比特率:
最大SUL:最大SUL是决定音频数据流比特率的参数之一,SRC发送的音频数据流的SUL应该不大于SNK解码器的最大SUL。
网络上一下关于音频部分比较好的帖子:
蓝牙 A2DP 音频传输格式-很全面的解析【http://blog.chinaunix.net/uid-21411227-id-5791321.html】
蓝牙(二)A2DP协议【https://blog.csdn.net/xsophiax/article/details/89402254】