蓝牙AVDTP协议概述

1.AVDTP 概念
AVDTP 即 AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL(音视频分配传输协
议),主要负责 A/V stream 的协商、建立及传输程序,还指定了设备之前传输
A/V stream 的消息格式.
AVDTP 的传输机制和消息格式是以 RTP 为基础的。RTP 由 RTP Data Transfer
Protocol (RTP)和 RTP Control Protocol(RTCP)组成。AVDTP 是在 L2CAP 上传输
的。AVDTP 有专门的 PSM(0x19)值。AVDTP 和蓝牙协议栈的结构图:
在这里插入图片描述

在这里插入图片描述

A/V stream 和 A/V signaling 都在 L2CAP 上传输。Signaling 负责 stream 的发现、配置、建立和传输控制。

AVDTP有以下几个组件
在这里插入图片描述
① Signalling
命令以及命令响应交互通道
② Stream Manager
流管理组件,一共有以下几种能力:传输流,组合 media 封包,时间戳管理,media封包序号管理,报告丢包给上层,抖动计算
③ Recovery
封包回复组件
④ Adaptation Layer
这层提供了一下几个能力:多路复用模式,允许在一个传输通道(TCID)上多路复用多个传输会话(TSID),使用更强劲头压缩
在这里插入图片描述
传输服务
AVDTP 一共分为几个传输服务
1)Basic Service
2)Recovery Service
3)Reporting Service
4)Adaptation Service – Multiplexing
5)Adaptation Service – Robust Header Compression
6)Transport and Signaling Channel Establishment

Basic Service只使用 signalling和stream manager,个人理解也就是实现最基础的媒体流数据传输功能;
Recovery Service在 basic service 的基础上加了 Recovery 组件
该恢复服务使用 SRC 端上的一个传输会话的媒体包来生成附加的编码包;这些恢复包可以在 SNK 端用于重建在空气传输路径上丢失的原始媒体包。
Reporting Service,个人理解就是可以实现向上层报告丢包,可以配置为单向或者双向(SRC和SNK之间)
Adaptation Service – Multiplexing,多路复用模式,个人理解,就是可以将多个流使用同一个L2CAP通道传输。(不太理解)
Adaptation Service – Robust Header Compression,强力头压缩服务,可以减少媒体包和恢复包的头开销
Transport and Signaling Channel Establishment,参与 stream connection 的两个设备之间最多需要 4 个 L2CAP 通道。

AVDTP signal包格式
在这里插入图片描述

Transaction Label:传输标示,4bit,INT 角色来填写一个值,ACP 必须回送一样的值
Packet Type:封包类型,0-4,单个封包,开始,继续,结束封包
Message Type:消息类型,0-4, command,general reject,response accept, response reject
Signal Identifier:信令标识符,
在这里插入图片描述
media封包格式
在这里插入图片描述
Version:RTP 版本,一般值是 2
Padding:在包末尾填充 1 个或者多个 byte 表示填充,这部分忽略
Extension:扩展位,此位如果是 1,那么在固定头部后面加一个 byte 扩展位
CSRC count:标示后面的 CSRC 有多少 Byte
Marker (M):marke 是由一个 profile 定义 的。用来 允许 标识在 像报文流 中
界定 帧界 等
的 事件。一个 profile 可能定义了附加 的标识位或者通过修改 payload type
域中的位数量来指定没有标识位。
Payload Type (PT):有效荷载类型,占 7 位,用于说明 RTP 报文中有效载荷的
类型,如 GSM 音频、JPEM 图像等,在流媒体中大部分是用来区分音频流和视频流
的,这样便于客户端进行解析。
Sequence Number:占 16 位,用于标识发送者所发送的 RTP 报文的序列号,每发
送一个报文,序列号增 1。这个字段当下层的承载协议用 UDP 的时候,网络状况
不好的时候可以用来检查丢包。同时出现网络抖动的情况可以用来对数据进行重
新排序,序列号的初始值是随机的,同时音频包和视频包的 sequence 是分别记
数的。
Time Stamp:时间戳
实际上,时间戳增加一并不是我们通常意义上的过了一个微秒,而是增加了一个
采样间隔那么长的时间。举个例子来说。不同的采集有不同的采样频率,比如一
般的音频是 8K 的采样频率,也就是一毫秒采集 8 次数据,也就是每次采样间隔
是 1/8MS,而 timestamp 增加 1 也就意味着增加了一个采样间隔。也就是过了
1/8MS。换个例子,如果令一种编码的采样频率是 16K,那么 timestamp 增加 1
也就意味着系统过了 1/16MS。也就是说,再同一个系统中,对不同编码,虽然
使用同一个时钟,但 timestamp 的增长速度是不同的,在这个例子中,采样频率
是 16K 的编码要比 8K 的快两倍,请记住这个区别。
SSRC:占 32 位,用于标识同步信源。该标识符是随机选择的,参加同一视频会
议的两个同步信源不能有相同的 SSRC。
CSRC list:每个 CSRC 标识符占 32 位,可以有 0~15 个。每个 CSRC 标识了包含
在该 RTP 报文有效载荷中的所有特约信源。
后续的 Media payload 就是音频数据了

AVDTP的很多命令会用到 Service Capablities,其格式如下:
在这里插入图片描述
其中 Service Category 就是 TYPE, Length Of Service Capabilities (LOSC)就是类似于 length,也就是后续Service Capabilities Information Elements 的长度
① Media Transport Capabilities
② Reporting Capabilities
③ Recovery Capabilities
④ Media Codec Capabilities
在这里插入图片描述
其中 Media Type 跟 Media Codec Type 在以下链接中:
https://www.bluetooth.com/specifications/assigned-numbers/audio-video
其中 Media Type 有如下值:
0 代表 Audio,1 代表 Video,2 代表 Multimedia
其中 Media Codec Type 有如下值:
此部分的 Media Codec Specific Information Elements 就是上层的一些 codec信息,比如下图是 SBC 的
在这里插入图片描述
⑤ Content Protection Capabilities
⑥ Header Compression Capabilities
⑦ Multiplexing Capabilities
⑧ Delay Reporting Capabilities

AVDTP的命令,可以参考上面那个信令标识符表
Stream End Point Discovery
每个 AVDTP 端都会注册一个或者多个 SEP,通过 SEID 来标示,这个命令就是获取对 端 的 SEP 信 息 , 包 括 SEID(SEP 的 ID) , In Use( 是 否 被 使 用 ) , Media Type(Audio,Media,MultiMedia),TSEP(角色是 Sink 还是 Source

Get All Capabilities
这个命令就是通过SEID来获取对方的能力的对方响应时,就会用上面介绍的Service Capablities格式回复

Set Configuration
AI的解释是在蓝牙音频设备连接过程中,通过之前的 Discover 和 Get Capabilities 等命令,设备双方了解到彼此支持的音频编解码格式、采样率、声道数等能力。Set Configuration Command 用于选定具体要使用的音频参数组合。例如,手机与耳机连接时,手机根据自身播放内容(如音乐、游戏等)的需求,结合耳机支持的能力,通过该命令告知耳机使用特定的编解码方式(如 AAC)、采样率(如 44.1KHz)和声道模式(如立体声)等进行音频传输
该命令也是使用SEID进行设置的(包括ACP SEID和INT SEID)

Get Stream configuration
通过SEID获取具体配置

Stream Reconfigure
这个可以在不断开AVDTP链路的情况下重新配置,但也需要先挂起流会话,配置完,再启动流传输

Stream Establishment
配置完之后可以通过这个命令打开某个SEID

Stream Start
这个命令就是打开SEID之后,启动流传输

Close Stream
关闭某个SEID

Suspend Command
暂停某(几)个SEID的流传输

Abort 命令
这个命令可以终止任何正在进行的操作(命令)

Security Control
发起加密?不理解。看AI的解释,意思可能是,双方可以通过这个命令再协商一个加密算法,然后媒体流数据通过这个加密算法加密之后再发送

Delay Report命令
在蓝牙音频传输过程中,从设备(如耳机)接收音频数据、存入缓冲区以及在音频数字信号处理器(DSP)中解码都需要一定时间。Delay Report 命令允许耳机等接收设备将自身处理音频的延迟时间报告给主设备(如手机),主设备根据这个延迟时间来调整视频播放的时机,从而实现音视频的同步播放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值