基于AVDTP信令分析蓝牙音频启动流程

news2024/11/24 3:04:20
前言

公司项目edifier那边需要在原来音频SBC,AAC基础上增加LHDC5.0编码,在打通lhdc协议栈之前,学习记录一番AVDTP音频服务流程。


一、AVDTP音频流基础知识

分析音频流程首先应具备的最简单基础概念知识:AVDTP信令signal,流端点sep

二、流程分析

先上我打通的SBD+LHDC5.0协议在手机主动连接耳机情况下的爱丽丝截图:

从图中可以看到,AVDTP的音频流程其实并不复杂,主要有5个步骤: 手机发现耳机(Discover)、分别获取耳机各个配置包(get capability)、设置手机和耳机所使用的配置、打开(开始)流端点和手机发送数据流。如下图红色框框部分:

 


AVDTP启动音频流流程做以上6个步骤分析:

1、AVDTP_DISCOVER:

该步骤ellisys数据如下:


 首先sink接收到src的AVDTP_DISCOVER信令之后,会返回当前sink的avdtp所有的流端点ID包,包的内容只是简单的告诉src该类型的端点使用的流端点ID,流媒体数据类型,端点状态等信息。上面所使用的流端点结构avdtp_sep_info_t 如下:


typedef struct seid_info {
	uint32_t rfa0:1;
	uint32_t inuse:1;
	uint32_t seid:6;
	uint32_t rfa2:3;
	uint32_t type:1;
	uint32_t media_type:4;
}__attribute__ ((__packed__))  seid_info_t;

typedef struct avdtp_sep_info {
	uint8_t       	state;
	seid_info_t    	info;
}__attribute__ ((__packed__)) avdtp_sep_info_t;

由此可见每个端点占用3个byte的payload,上图抓包显示的6个bytes数据,获取到的是sbc+lhdc  2个端点信息。

 

2、AVDTP_GET_CAPABILITIES

 AVDTP_GET_CAPABILITIES信令需要返回具体流端点的配置信息,如上图返回的是sbc流端点的配置,其配置内容根据标准sbc数据配置包属性确定,内容包括媒体类型,音频类型,采样率等等信息。

3、AVDTP_SET_CONFIGURATION

    AVDTP_SET_CONFIGURATION信令用来设置耳机端使用的配置,用来告诉耳机你该用哪种音频的配置来进行解析、解码我的数据包。在上一步耳机上传了配置包之后,手机会拿耳机所支持的数据类型(AAC 、 SBC or others)跟手机本身支持的数据类型对比,然后选择恰当的数据类型进行音频传输,同时耳机端也会根据该信令的配置配置好本地的解码器,准备接收手机端数据进行解码播放。耳机端确认好配置包之后,回传accept命令包给手机。

4,AVDTP_START

该信令告诉耳机端,数据流开始,并且返回accept包。

5,media stream

媒体流传输并非avdtp信令内容,其内容主要是传输音频数据包!至此,耳机和手机启动音频传输过程完成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM】垃圾回收机制详解(GC)

目录一.GC的作用区域二.关于对象是否可回收1.可达性分析算法和引用计数算法2.四种引用类型三.垃圾收集算法1.标记-清除算法2.复制算法3.标记-整理算法4.分代收集算法四.轻GC(Minor GC)和重GC(Full GC)一.GC的作用区域 可以看jvm详解之后,再来理解这篇文章更好 堆和…

[附源码]计算机毕业设计农村人居环境治理监管系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

ASP.NET Core 3.1系列(18)——EFCore中执行原生SQL语句

1、前言 前一篇博客介绍了EFCore中常见的一些查询操作,使用Linq或Lambda结合实体类的操作相当方便。但在某些特殊情况下,我们仍旧需要使用原生SQL来获取数据。好在EFCore中提供了完整的方法支持原生SQL,下面开始介绍。 2、构建测试数据库 …

Radare2 框架介绍及使用

Radare2 框架介绍及使用 欢迎入群交流 radare2 这是整个框架的核心工具,它具有debugger和Hexeditor的核心功能,使您能够像打开普通的文件一样,打开许多输入/输出源,包括磁盘、网络连接、内核驱动和处于调试中的进程等。 它实现了…

旧版本金庸群侠传3D新Unity重置修复版入门-lua”脚本“

金庸3DUnity重置入门系列文章 金庸3dUnity重置入门 - lua 语法 金庸3dUnity重置入门 - UniTask插件 金庸3dUnity重置入门 - Cinemachine 动画 金庸3dUnity重置入门 - 大世界实现方案 金庸3dUnity重置入门 - 素材极限压缩 (部分可能放到付费博客) 2022年底~20…

Apifox和Eolink两个测试工具谁最实用?

目前行业内有 postman、jmeter 为代表开源 Api 工具派系,我想对大家对这两个词并不陌生。虽然它们能解决基本的接口测试,但是无法解决接口链路上的所有问题,一个工具难以支持整个过程。在国内,我们可以看到有国产 API 管理工具&am…

Spring Cloud 微服务讲义

Spring Cloud 微服务讲义第一部分 微服务架构第 1 节 互联网应用架构演进第 2 节 微服务架构体现的思想及优缺点第 3 节 微服务架构中的核心概念第二部分 Spring Cloud 综述第 1 节 Spring Cloud 是什么第 2 节 Spring Cloud 解决什么问题第 3 节 Spring Cloud 架构3.1 Spring …

CCES软件做开发,如果仿真器连不进目标板怎么解决?(Failed to connect to processor)

ADI的DSP调试,我在Visual DSP软件下写过一个详细的帖子,来说明仿真器如果连不进目标板,可能存在的几种问题以及解决办法,现在在CCES软件下遇到了同样的问题,所以准备再写一个帖子说明一下。 我们都知道ADI的DSP&#…

智慧工地管理平台系统厂家哪家强|喜讯科技

喜讯科技针对施工现场涉及面广,多种元素交叉,状况较为复杂,如人员出入、机械运行、物料运输等工程项目管理在一定程度上存在着决策层看不清、管理层管不住、执行层做不好的问题。 围绕施工现场管理,构建全方位的智能监控防范体系弥…

Redis——Linux下安装以及命令操作

一、概述 redis是什么? Redis(Remote Dictionary Server ),即远程字典服务 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 是一款高性能的NOSQL系列的非关系型…

每日一题:冒泡排序

每日一题:冒泡排序每日一题:冒泡排序第一种写法:第二种写法:每日一题:冒泡排序 冒泡排序是八大排序中较为简单的一种,具体详细可见:冒泡排序_百度百科 (baidu.com) 我们重点来看冒泡排序的步骤: 冒泡排序…

程序员如何写游戏搞钱?

ConcernedApe,一个叫做Eric Barone的程序员研发了一款叫做星露谷的小游戏,以乡村经营生活为核心,打造了一个虚拟的小世界,在这个小世界,你可以种植农作物,经营农场并挖矿钓鱼。 其中钓鱼的玩法是十分新颖的…

Git常见问题

1.拉取的项目很大,如1G以上,此时报错early EOF 具体报错如下: Cloning into csp-doc... remote: Counting objects: 6061, done. remote: Compressing objects: 100% (4777/4777), done. error: RPC failed; curl 18 transfer closed with …

Spring - FactoryBean扩展实战_MyBatis-Spring 启动过程源码解读

文章目录PrePreMyBatis-Spring 组件扩展点org.mybatis.spring.SqlSessionFactoryBeanInitializingBean扩展接口 afterPropertiesSetFactoryBean 扩展接口 getObjectApplicationListener扩展接口 onApplicationEvent扩展点org.mybatis.spring.mapper.MapperFactoryBeanSqlSessio…

【Linux基本命令归纳整理】

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。严格来讲,Linux 这个词本身只表示 Linux 内核,但实际上人们已经习惯了用 Linux 来形容整个基于 Linux 内核&…

Day40——Dp专题

文章目录三、01背包8.分割等和子集9.最后一块石头的重量 II10.目标和11. 一和零三、01背包 8.分割等和子集 题目链接:416. 分割等和子集 - 力扣(LeetCode) 思路:我们构造两个子集使得两个子集的和相等,其实就是让我…

JavaScript:初始JS 以及 基础语法

前端三件套: HTML: 生成网页控件 例如:生成 文本框 多选框 下拉列表 等 (人的身体) CSS: 修饰网页上的控件 例如:修饰文本框为圆形 (人的衣服) JavaSript: 在这些控件上添加逻辑 例如:获取文本框的值 然…

哈工大体系结构lab3 —— 流水线处理器的verilog实现

流水线处理器的verilog实现 是的我刚刚验收完最后一个实验,所以怀着激动的心情,把当时其中一个留档的代码发出来,还算较为清晰,仅供没有思路的同学参考。造完cache,我的生活终于可以恢复正轨了,这几天折磨的…

web安全之SQL盲注的靶场练习和分析

目录 SQL盲注-报错回显盲注 SQL盲注-时间盲注 SQL盲注-布尔盲注 SQL盲注-报错回显盲注 在burp里面进行动态抓包,判断符号闭环,如图明显为闭环 列数3时报错,判断当前列数为2 强行报错注入 ,如图获取到版本号 uname1212 unio…

h5视频落地页知识点整理

一、视频在苹果中自动播放&#xff08;借助微信SDK&#xff09; 1.引入微信SDK <script src"http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> 2. document.addEventListener(WeixinJSBridgeReady, function() { const timer setInte…