【蓝牙AVDTP A2DP协议】

蓝牙AVDTP A2DP

  • 一.AVDTP
    • 1.1 AVDTP概念
    • 1.2 Source Sink整体框架
    • 1.3 AVDTP术语
      • 1.3.2 Stream
      • 1.3.2 SRC and Sink
      • 1.3.3 INT and ACP
      • 1.3.4 SEP:
    • 1.4 AVDTP体系
    • 1.4.1 体系概括
      • 1.4.2 Transport Services
    • 1.5 Signaling Procedures
      • 1.5.1 General Requirements
      • 1.5.2 Transaction Model
      • 1.5.3 Stream Management Signaling Overview
      • 1.5.4 Signal Command Set![请添加图片描述](https://img-blog.csdnimg.cn/45235bb134be40d28ced34f705be63a2.bmp)
    • 1.6 Transport Procedures
    • 1.6.1 Basic Service
    • 1.7 Signaling Messages
      • 1.7.1 数据格式
      • 1.7.2 信令集概括
      • 1.7.3 AVDTP_DISCOVER

一.AVDTP

1.1 AVDTP概念

AVDTP 即 AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL(音视频分配传输协议),主要负责 A/V stream 的协商、建立及传输程序,还指定了设备之前传输A/V stream 的消息格式.
AVDTP的传输机制和消息格式是以 RTP 为基础的。

RTP 由 RTP Data Transfer Protocol (RTP)和 RTP Control Protococl(RTCP)组成。
AVDTP是在L2CAP上传输的。AVDTP有专门的PSM(0x19)值。AVDTP和蓝牙协议栈的结构图:

请添加图片描述A/V stream 和 A/V signaling 都在 L2CAP 上传输。通过PSM 建立两条L2CAP通路,1条 Singnaling通路,1条 Streaming Media通路。
Signaling负责stream的发现、配置、建立和传输控制。Stream传输音频。

1.2 Source Sink整体框架

请添加图片描述

1.3 AVDTP术语

1.3.2 Stream

音频数据流

1.3.2 SRC and Sink

SRC:Source 发送音频数据的一端。
Sink:接受音频数据的一端。
例如:
手机与耳机:

手机:发送音频数据到耳机,手机是Source。
耳机:接受音频数据,耳机是Sink。

1.3.3 INT and ACP

Initiator (INT) and Acceptor (ACP)

INT和 ACP的角色 与 SRC, ACP无关。
INT 和 ACP是一直在在变的。谁发起命令,谁就是INT.谁接受命令响应,谁就是ACP.

1.3.4 SEP:

Stream End Point 流端点
流端点配置过程示例分为三个步骤:
设备A 发现 设备B 的资源 包括SEID和媒介类型
收集SEP z的应用和传输服务能力
在了解到所有的能力并与自身的能力比较之后,设备A 可以对流 进行配置。

请添加图片描述
状态图::
请添加图片描述

1.4 AVDTP体系

1.4.1 体系概括

请添加图片描述

Singnalling:  命令以及命令响应交互通道
Stream Manager: 流管理组件,一共有以下几种能力:传输流,组合 media 封包,时间戳管理,media
封包序号管理,报告丢包给上层,抖动计算
Recovery: 封包回复组件
Adaptation Layer:适配层

以上所需接口功能:
请添加图片描述

1.4.2 Transport Services

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 Establishmen

Basic Service
基本服务,当基本服务开启的时候只有两个组件可用Signalling ,Stream Manager ,如图:
请添加图片描述AVDTP基本服务确保每个会话的媒体数据包在单个传输信道上的传输。该服务提供了一个适当的接口,使应用程序能够流式传输符合传输通道最大大小要求的数据包单元。当通道已成功配置时,此数据包大小限制将返回给应用程序。

后续几种service不常用,暂不讲解

1.5 Signaling Procedures

1.5.1 General Requirements

信令交换,需要先建立ACL连接,然后通过PSM(0x19) 建立L2CAP连接,连接上AVDTP.
请添加图片描述

1.5.2 Transaction Model

信令交换方式,遵循L2CAP中的req responed模式。
请添加图片描述

1.5.3 Stream Management Signaling Overview

请添加图片描述如果 AVDTP Version of ACP >= 1.3 使用Get All Capabilities

使用AVDTP Version of ACP < 1.3 使用Get Capabilities。

1.5.4 Signal Command Set请添加图片描述

1.6 Transport Procedures

传输过程需要先前在一对互连设备之间建立的ACL链路。在通信设备之间的链路上可用的面向连接的信道上执行事务。

1.6.1 Basic Service

AVDTP提供给上层的基本服务 信令 和 媒体流。通过PSM(0x19)连接2条 L2CAP链路,1条Singnalling 1条Stream.
请添加图片描述

1.7 Signaling Messages

1.7.1 数据格式

请添加图片描述
数据格式 :L2CAP Header + SingnallingHeader + Signalling Message
SingnallingHeader格式:
请添加图片描述分为三种:单包,开始包,继续包结束包。常用的是单包

Transaction Label(4位): 交易标签Command 传什么 Respond就回什么

Packet Type(2位) :
请添加图片描述

Message Type:
请添加图片描述

1.7.2 信令集概括

请添加图片描述

1.7.3 AVDTP_DISCOVER

每个 AVDTP 端都会注册一个或者多个 SEP,通过 SEID 来表示,这个命令就是获取对端的 SEP 信息,包括 SEID(SEP 的 ID),In Use(是否被使用),MediaType(Audio,Media,MultiMedia),TSEP(角色是 Sink 还是 Source)

流程如下:
请添加图片描述命令如下:

Stream End Point Discovery Command: 获取到 remote 端所有的 SEP 的信息
请添加图片描述

请添加图片描述
请添加图片描述
参数介绍:
(1).SEID :0x01~ 0x3E
请添加图片描述
(2).In Use:

请添加图片描述

(3).MediaType : 在Assigned_Numbers 中
请添加图片描述(4).TSEP: 表示SRC 还是 SNK
请添加图片描述

hci log:
请添加图片描述
请添加图片描述
后续待定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/42788.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于Arduino IDE库文件存放路径问题总结(双版本)

在开发过程中,如果不注意,库文件存放路径很乱,如果在转移系统环境时,容易忘记备份。编译过程中出现多个可用引用包的位置,为了解决这些问题,要明白各文件夹的默认路径在哪,区别在哪,如有了解不对的地方请指正。 IDE安装目录(默认C盘,自定义可以其他盘符下)IDE升级可…

2023华为OD统一考试(B卷)题库清单(持续收录中)以及考点说明

目录 专栏导读2023 B卷 “新加题”&#xff08;100分值&#xff09;2023Q2 100分2023Q2 200分2023Q1 100分2023Q1 200分2022Q4 100分2022Q4 200分牛客练习题 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&…

PALO ALTO NETWORKS 的新一代防火墙如何保护企业安全

轻松采用创新技术、阻止网络攻击得逞并专注更重要的工作 IT 的快速发展已改变网络边界的面貌。数据无处不在&#xff0c;用户可随时随地从各类设备访问这些数据。同时&#xff0c;IT 团队正在采用云、分析和自动化来加速新应用的交付以及推动业务发展。这些根本性的转变带来了…

11 简单的Thymeleaf语法

11.1 spring-boot环境准备 重要依赖&#xff1a; <!--thymeleaf--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 11.2 转发消息不转义 就是如…

Vue3状态管理库Pinia——核心概念(Store、State、Getter、Action)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

iClient3D for CesiumWebGL入门之使用vscode以服务方式运行调试

作者&#xff1a;超图研究院技术支持中心-于丁 iClient3D for Cesium&WebGL入门之使用vscode以服务方式运行调试 相信大家第一次使用SuperMap iClient3D for Cesium或SuperMap iClient3D for WebGL的时候&#xff0c;都遇到过和我一样的事情&#xff1a; 在文件夹中直接打…

Android Studio 提示 Failed to initialize editor问题的解决

Android Studio 从2018的版本升级到2021年的版本后&#xff0c;无法预览xml。我查了很久&#xff0c;最后发现是Gradle的版本和工具不匹配&#xff0c;按照开发工具的提示&#xff0c;升级版本即可&#xff0c;我的是从3.2.1升级到了4.2.2

生产者消费者模型

生产者消费者模型 文章目录 生产者消费者模型概念原则优点 基于BlockingQueue的生产者消费者模型BlockingQueue模拟实现单生产者消费者模型基于计算任务和存储任务的生产者消费者模型 概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题生产者和消费者彼…

C++ 单例模式(介绍+实现)

文章目录 一. 设计模式二. 单例模式三. 饿汉模式四. 懒汉模式结束语 一. 设计模式 单例模式是一种设计模式 设计模式(Design Pattern)是一套被反复使用&#xff0c;多数人知晓的&#xff0c;经过分类的&#xff0c;代码设计经验的总结。 为什么要有设计模式 就像人类历史发展会…

python机器学习(三)特征预处理、鸢尾花案例--分类、线性回归、代价函数、梯度下降法、使用numpy、sklearn实现一元线性回归

K-近邻算法(K-Nearest Neighboor) 特征预处理 数据预处理的过程。数据存在不同的量纲、数据中存在离群值&#xff0c;需要稳定的转换数据&#xff0c;处理好的数据才能更好的去训练模型&#xff0c;减少误差的出现。 标准化 数据集的标准化对scikit-learn中实现的大多数机器…

遥感目标检测(3)-DAL(Dynamic Anchor Learning for Object Detection)

目录 一、概述 二、背景 三、建议 1、旋转RetinaNet 2、动态锚框分布 3、匹配敏感损失 四、实验 一、概述 由于选择正样本锚框进行回归&#xff0c;不一定能够定位真实的GT&#xff0c;而部分负样本回归甚至可以回归到真实的GT&#xff0c;说明相当多的负样本锚框有着准…

【自启动配置】Ubuntu 设置开机自启动脚本

Ubuntu 开机运行的脚本和当前操作系统运行的级别有关&#xff0c;OS 的运行级别大概分为七个 目录 1、查看 OS 运行级别 2、创建自启动脚本 3、添加软链接 1、查看 OS 运行级别 输入命令 runlevel 查看当前系统运行级别。当前系统的运行级别为 5 2、创建自启动脚本 在 /et…

ZooKeeper原理剖析

1.ZooKeeper简介 ZooKeeper是一个分布式、高可用性的协调服务。在大数据产品中主要提供两个功能&#xff1a; 帮助系统避免单点故障&#xff0c;建立可靠的应用程序。提供分布式协作服务和维护配置信息。 2.ZooKeeper结构 ZooKeeper集群中的节点分为三种角色&#xff1a;Le…

多线程(JavaEE初阶系列2)

目录 前言&#xff1a; 1.什么是线程 2.为什么要有线程 3.进程与线程的区别与联系 4.Java的线程和操作系统线程的关系 5.多线程编程示例 6.创建线程 6.1继承Thread类 6.2实现Runnable接口 6.3继承Thread&#xff0c;使用匿名内部类 6.4实现Runnable接口&#xff0c;使…

html2Canvas+JsPDF 导出pdf 无法显示网络图片

html2CanvasJsPDF 导出pdf 问题&#xff1a;类似于下面着这种网络图片使用img导出的时候是空白的 https://gimg3.baidu.com/search/srchttp%3A%2F%2Fpics4.baidu.com%2Ffeed%2F7e3e6709c93d70cf827fb2fda054500cb8a12bc9.jpeg%40f_auto%3Ftoken%3Dd97d3f0fd06e680e592584f8c7a2…

深度学习——LSTM解决分类问题

RNN基本介绍 概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;如文本、语音、时间序列等具有时序关系的数据。 核心思想 RNN的关键思想是引入了循环结构&#xff0c;允许…

分布式 - 消息队列Kafka:Kafka分区常见问题总结

文章目录 01. Kafka 的分区是什么&#xff1f;02. Kafka 为什么需要分区&#xff1f;03. Kafka 分区有什么作用&#xff1f;03. Kafka 为什么使用分区的概念而不是直接使用多个主题呢&#xff1f;04. Kafka 分区的数量有什么限制&#xff1f;05. Kafka 分区的副本有什么作用&am…

动态内存管理基础详解

目录 1、为什么存在动态内存分配 2、动态内存函数的介绍 2.1 malloc和free 功能&#xff1a; 参数和返回值&#xff1a; 注意事项&#xff1a; tip: 2.2 calloc 2.3 realloc函数 功能&#xff1a; 参数和返回值&#xff1a; realloc开辟空间的两种情况 realloc会顺…

Rust操作MySQL

查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库&#xff1a; chrono 流式查询使用&#xff1a; query_iter 输出到Vec使用&#xff1a; query 映射到结构体使用&#xff1a; query_map 获取单条数据使用&#xff1a; query_first 命名…

Hadoop简介以及集群搭建详细过程

Hadoop简介以及集群搭建详细过程 hadoop集群简介hadoop部署模式Hadoop集群安装1.集群角色规划2.服务器基础环境准备3.上传安装包hadoop安装包目录结构5.编辑hadoop配置文件6.分发安装包7.配置hadoop环境变量8.NameNode format(格式化操作) hadoop集群启动关闭-手动逐个进程启停…