当前位置: 首页 > ds >正文

【蓝牙协议栈】【BR/EDR】【AVCTP】精讲音视频控制传输协议

1.欢迎大家关注和订阅匠心之作【精讲蓝牙协议栈】【精讲BLE协议栈】【Android Bluetooth Stack】专栏会持续更新中.....敬请期待!

2. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论

目录

1.AVCTP 概念

2.AVCTP 封包格式

2.1 没有被分隔的 AVCTP  

2.2 被分隔的 AVCTP


1.AVCTP 概念

AVCTP(Audio/Video Control Transport Protocol)协议描述了蓝牙设备间 Audio/Video 的控制信号交换的格式和机制,它是一个总体的协议,具体的控制 信息由其指定的协议(如 AVRCP)实现,AVCTP 本身只指定控制 command 和 response 的总体的格式。

几个重要的点:

(1)AVCTP uses point-to-point signaling over connection-oriented L2CAP channels.

(2)AVCTP shall be able to support both controller and target functionalities at both sides of the connection.

(3)Between two devices, multiple AVCTP connections may exist. Each AVCTP connection has its own L2CAP channel with its unique PSM value. There shall be only one AVCTP connection per PSM per ACL.

(4)Each AVCTP packet shall be transported on a single L2CAP packet.

(5)不同 L2CAP channel 上的相同的 transaction Label 是属于不同的 message 的。也就是说,两条 L2CAP 上的 packets 是没有关系的,不可能属于同一个 message。AVCTP 整个框架如下:

以上图示我继续做了细化,在整个协议栈的结构如红框:

 可以看到 AVCTP 是基于 L2CAP 协议的,他有两组 PSM,分别如下:

2.AVCTP 封包格式

AVCTP 封包格式分为两种: 

  • 没有被分隔的(小于 L2CAP MTU)
  • 被分隔的(大于 L2CAP MTU) 下面我们来分别介绍下每种的格式:

2.1 没有被分隔的 AVCTP  

Transaction label field: (octet 0, bits 7-4) value is provided by the application.传输标示,由上层提供

Packet_type field:(octet 0, bits 3 and 2) is set to zero to indicate that the command/response message is transmitted in a single L2CAP packet. 

此部分 00b 标示没有被分割.

C/R: (octet 0, bit 1) indicates whether the message conveys a command frame (0) or a response frame (1). It is provided by the application.0 代表 command,1 代表 response

IPID :bit (octet 0, bit 0) is set in a response message to indicate an invalid profile identifier received in the command message of the same transaction; otherwise this bit is set to zero. In command messages this bit is set to zero.在 command 中设置为 0,在 response 中设置为 0 代表正常

PID Profile Identifier (PID): field indicates that the command/response frame is coded according to the rules defined by the identified profile. The value shall be identical to the bits UUID of the service class,此 部分填写 16bit 的 UUID,比如 AVRCP 的 UUID 0x110e 后续的 Message Infomation 就是上层协议的数据

2.2 被分隔的 AVCTP

被分隔的的数据包格式一共有三种  

 我们在这里只介绍两个地方,其他跟没有被分隔的一致:

1)Packet_type:The Packet_Type field (see Section 6.1.2) qualifies each L2CAP packet as either first (Packet_Type=01), continue (Packet_Type=10), or end packet (Packet_Type=11). In the case of a nonfragmented message (see Section 6.1.1), this field (Packet_Type=00) simply indicates that the message fits into a single packet and the number of packets is not inserted in the message.

总结下:开始封包是 01b,继续封包 10b,结束封包是 11b

2)Number of AVCTP Packets is present in every start packet (octet 2 ) to indicate the total number of AVCTP packets that belong to the same message. As the start packet is also counted, this value is always greater than 1.

总结下:标示整个分隔封包的数量,包含这个开始封包,所以此封包的个数肯 定是大于 1 的。 示意图如下:

http://www.xdnf.cn/news/4070.html

相关文章:

  • 分享一个Android中文汉字手写输入法并带有形近字联想功能
  • Baklib驱动企业知识管理AI升级
  • day15 python 复习日
  • 复杂网络系列:第 5 部分 — 社区检测和子图
  • 在写setup时遇到的问题与思考
  • Circular Plot系列(一): 环形热图绘制
  • 《马小帅的Java闯关记》
  • 模型部署与提供服务
  • QpushButton 扩展InteractiveButtonBase
  • k230摄像头初始化配置函数解析
  • nproc命令查看可用核心数量详解
  • [Windows] 智绘教 v20250403a 屏幕批注工具
  • day 12 三种启发式算法:遗传算法、粒子群算法、退火算法
  • 用卷积神经网络 (CNN) 实现 MNIST 手写数字识别
  • Python函数完全指南:从零基础到灵活运用
  • 深度学习中保存最优模型的实践与探索:以食物图像分类为例
  • GTID(全局事务标识符)的深入解析
  • 高翔《视觉SLAM十四讲》中第13讲,单目稠密重建中的RMODE数据集
  • TS 元组
  • 2025年PMP 学习三
  • 游戏开发的TypeScript(4)TypeScript 的一些内置函数
  • TF-IDF算法详解
  • C# 定时器实现
  • 正态分布习题集 · 题目篇
  • 递归算法详解(Java 实现):从原理到高阶应用
  • 类和对象(上)
  • C语言 指针(5)
  • 两台电动缸同步算法
  • n8n 构建一个 ReAct AI Agent 示例
  • 数理性能大幅提升|暴雨一体机适配DeepSeek Prover v2