草庐IT

【经典蓝牙】蓝牙 A2DP协议分析

物联网布道师 2023-11-27 原文

A2DP 介绍

        A2DP(Advanced Audio Distribution Profile)是蓝牙高音质音频传输协议, 用于传输单声道, 双声道音乐(一般在 A2DP 中用于 stereo 双声道) , 典型应用为蓝牙耳机。

        A2DP旨在通过蓝牙连接传输高质量的立体声音频流。它使用的基本压缩算法是SBC(Sub-Band Coding)来减小音频数据的大小,同时保持高音质,SBC压缩虽然效率较低,但是是必须支持的基本备用方案。A2DP还支持其他高级编解码器,例如AAC、aptX和LDAC,这些编解码器比SBC提供更好的音质,但这些编解码器的支持取决于设备本身的支持情况。

注意A2DP协议要与AVRCP协议区分开。 A2DP是传输音频的,而AVRCP是用来控制音频的。



蓝牙架构如下图:



 





角色介绍



        A2DP 的角色分为 Source(SRC) SINK(SNK) : 发送音频的称为 Source,接收音频的称为Sink。 例如手机连接蓝牙耳机播放音乐, 那么手机就是做 source 设备,蓝牙耳机就是sink 设备。



数据流





 





音频数据流交互如上图:

● A2DP source 的发送流程

SOURCE端 收集到 PCM 数据, 然后发送到 A2DP, A2DP 经过 codec PCM lib(SBC,MPEG-1,2 AudioMPEG-2,

4 AACATRAC family 或者自定义 encoder pcm lib)压缩成特定的音频格式, 然后交给 AVDTP, AVDTP 转交给 L2CAP,L2CAP 通过 ACL 格式转交给 HCI, 然后到达 BT chip, 通过 RF 射频出去。

● A2DP sink 的接收流程

SINK端通过 RF 接收进来数据, 然后通过 ACL 交给 HCI, 然后交给 L2CAP,L2CAP 交给 AVDTP, AVDTP 交 给 A2DP , A2DP 收 到 的 是 remote 经 过 压 缩 的 数 据 , 此 时 通 过 codec pcm lib(SBC,MPEG-1,2 AudioMPEG-2, 4 AACATRAC family或者自定义encoder pcm lib)解压成PCM 数据, 然后交于声卡播放 。





A2DP编码数据传输格式



编码格式支持

A2DP 协议必须支持SBC格式, 其他的格式是可选的,支持的格式如下:





 







SBC 编码格式介绍



下面重点介绍下A2DP协议中SBC的编码的element数据协议格式,其他格式不做说明。element的整个数据格式如下:





 





下面具体分析下每个字段的含义:



Sampling Frequency: 这部分是采样频率, Source 端强制要求 44.1KHz, 48KHz 支持一种, Sink要求 44.1KHz,48Khz 都支持, 对应的值如下图:







 





通道模式: Sink端要求全支持。



 

 



Block Length: 块长度



 









Subbands: 次频带



 









Allocation Method: 配置方法



 











Minimum Bitpool Value 和Maximum Bitpool Value表示编码质量。

在播放设备中可以设置 SBC 编码质量, 这个值叫 bitpool, 大概 1 bitpool = 6~7 kbit/s。 SBC 是一种复杂度较低的编码格式, 同等码率下音质稍差, 根据这个网站上的比较, 最高 328 kbit/s 的 SBC 音质大约介于 224 kbit/s 到 256 kbit/s 的 MP3 之间。 此外, 设置不当、 信号差、 设备不支持高 bitpool 等都会造成传输码率下降而使音质下降, 耳机或音箱本身的音质也是很重要的因素。 以下为不同的 bitpool 的码率 :





 





Sink端应该将2作为最小的bitpool值,最大的bitpool值应该等于上图中的高编码质量中的的bitpool值。





SBC数据流格式



SBC数据流是由一个头部和数据流(或者)组成。





 







头部Header的长度是一个字节, bit字段如下图:



 







F bit : 表示是否被分包, 分包为1, 不分包为0

S bit: 表示是否起始分包 起始分包为1 否则为0

L bit : 表示否是是最后一个分包。 为1表示是最后一个分包, 否则为0



Number of frames : 表示分包数。

●如果F bit为0,即数据不分包,则该字段表示的是数据包的帧数。

●如果F bit 为1,即数据分包,则该字段表示的是数据包剩余的分包数(包括当前分包)。





其他编码格式咱不做介绍。。。

有关【经典蓝牙】蓝牙 A2DP协议分析的更多相关文章

  1. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  2. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  3. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  4. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  5. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  6. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  7. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  8. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  9. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  10. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

随机推荐