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

从空口分析经典蓝牙A2DP和AVRCP协议

经典蓝牙的音乐播放依靠AVDTP协议进行数据传输,AVRCP进行播放控制,下面还是以手机和耳机为例,看看AVDTP和AVRCP是如何在音乐播放中协调和配合:

1:AVDTP起播前的协商

在SDP发现服务找到耳机支持了AVDTP音频协议后,就会进行AVTDP服务的协商,大概就是手机需要知道耳机有几个sink端点以及相应的支持哪些codec,然后手机根据自己的场景(音乐,游戏等)去选择合适的端点和codec去传输音频数据,如下图:
在这里插入图片描述
从上图可以看到AVDTP起播前的协商分成四个步骤:AVDTP Discover, AVDTP Get Capability,AVDTP Set configuration, AVDTP Open,如红色框框所示,下面来对这四个步骤一一解析:

1:AVDTP Discover

这一步就是手机去发现获取耳机支持多少播放端点:
在这里插入图片描述
如上图,右边红色框框是耳机回复给手机的查询结果:可以看到耳机支持4个播放端点,编号为1-4,媒体类型都是audio,端点类型都是sink。

2:AVDTP Get Capablility

这一步是在手机通过AVDTP Discover发现对方有四个播放端点后,然后发起4条get capability命令去分别获取四个端点的codec信息,这里我们以端点2为例,来看一下耳机回复给手机都有哪些内容:
在这里插入图片描述
如上图右边红色框框,这是我们主要关注的东东,可以看到端点2支持的codec type为AAC编解码,采样率是44.1KHZ,支持立体声,支持VBR(也就是动态码率,手机端可以根据接收RSSI来动态调整传输码率)。

3:AVDTP Set Configuration

经过上面两个步骤,手机已经获取到耳机的播放端点和相应的codec的参数信息,这一步就是手机会根据自己的场景,比如当前是音乐播放,然后就会默认去选择端点2的AAC 编码方式传输音频数据:
在这里插入图片描述

如上图右边红色框框,手机通过set configuration设下去的参数:

参数解释
ACP SEID2这里的ACP就是acceptor的意思,因为音乐是从手机传出,耳机接受,所以耳机是ACP
INT SEID2INT是initiator的意思,就是发起者,这里手机是这个角色
Service CategoryMedia Codec媒体音乐编码
Media TypeAudio媒体类型是音乐
Media Codec TypeMPEG-2,4 AAC手机采用AAC编码方式传输数据
Sampling Frequency44.1kHz采样率44.1KHZ
Channels2采用双声道方式传输
Variable Bit RateYes支持动态码率传输
Bit Rate165 kbit/s传输速率采用165k bit/s

4:AVDTP Open

这个命令比较简单,就是手机通知耳机打开端点2,做好准备接受音频数据:
在这里插入图片描述

5:AVRCP Registration Notification(playback , volume)

经过上面4个步骤,手机和耳机协商好了播放端点和所采用的codec参数,并且耳机的端点也做好了接受音频数据的准备,但是耳机要知道播放器的状态(比如起播,暂停,下一首)和音量需要通过AVRCP协议来实现:
在这里插入图片描述从上图红色框看到耳机向手机注册了一个playback事件:耳机发起AV/C Notify注册,然后手机通过AV/C Interim回复当前状态,只有当手机的播放器状态发送变化的时候,手机会通过AV/C Changed通知耳机,需要注意的是这种注册都是一次性的,就是说一旦耳机收到AV/C changed通知,耳机需要向手机重新注册事件。
绿色框是手机向耳机注册了音量时间:同理,如果耳机有音量变化,那么耳机就会通过AV/C Changed来通知手机。

2:AVDTP起播

经过上面起播前的准备后,如果手机音乐播放器开始播放音乐,那么手机就会通知耳机起播了,下面看看起播都需要发哪些命令:
在这里插入图片描述

  1. 首先是手机通过AV/C Interim通知耳机当前播放器的状态是playing,如上图红色框。
  2. 手机发送AVDTP Start命令给耳机,就是告诉耳机,手机要起播了,你做好接收准备,如紫色框框。
  3. 耳机汇报一个delay report给手机,时间是190ms。这里解释一下 AVDTP delay report,这个参数是用于手机播放音视频同步的。因为我们知道手机音频传输到耳机,然后耳机接收存buffer,然后在audio DSP解码这是需要一定的时间,如果手机在发送音频数据后就开启视频播放,那么势必造成音视频不同步,现在耳机告诉手机,你的视频需要delay 190ms再播放,这样音视频就同步了。
  4. 注意一下上图的红色框,这里是playback paused,看一下时间就知道这个是手机播放了27秒后,手机通知耳机音乐暂停的AVRCP 命令。

3:AVDTP音频播放

接下来看一下音频数据在蓝牙中传输的格式:
在这里插入图片描述
如上图,我们看到AVDTP Media packet通过2-DH1格式传输,需要注意的是每个数据包的右边红色框框的两个参数:

  1. Sequence Number:也就是蓝牙给每个数据包的编号,从1-0xffff,便于数据的接收和校验,注意audio DSP是不需要知道sequence number,它只需要下面的这个参数Timestamps。
  2. Time Stamp:这个参数是提供给audio DSP用于比对数据帧的时间戳,做解码同步用。也就是说如果time stamp不对,解码就会出错。

4:AVDTP音频暂停SUSPEND

在这里插入图片描述
音乐暂停也挺简单的,如上图,也就三个步骤:

  1. 手机发送AVDTP Suspend 命令,然耳机暂停,如绿色框
  2. 两秒后,手机发送AV/C Changed 通知耳机手机播放器暂停了,如红色框
  3. 耳机重新注册播放器事件,如黄色框

5:AVDTP停播

AVDTP停播,这个也很简单就一条命令:AVDTP Close,如下图
在这里插入图片描述


http://www.kler.cn/news/356338.html

相关文章:

  • 2012年国赛高教杯数学建模A题葡萄酒的评价解题全过程文档及程序
  • 周末总结(2024/10/19)
  • GDAL+C#实现矢量多边形转栅格
  • ●day 35 动态规划part01
  • 基于PHP+MySQL+Vue的医院预约挂号管理系统
  • ACL与NAT协议
  • 生成两张找不同的图片,仅有一处差异,并且这个差异要不明显且复杂,使得寻找难度增加。
  • C# 文件操作
  • MyBatis 中updateByPrimaryKey和updateByPrimaryKeySelective区别
  • iPhone照片内存怎么清理,参考这些方法
  • MySQL在5.6为啥引入索引条件下推
  • Quant星球-量化连载
  • WPF中MVVM的应用举例
  • .NET 9 - 尝试一下Open Api 的一些变化
  • 配置啊手动阀打发第三方
  • SpringBoot物流管理平台开发全解析
  • 网站防护,高可用,雷池配置同步教程
  • 创新的语音情感识别:利用 WavLM Large 探索性别信息整合和高级汇集方法
  • 尚硅谷rabbitmq2024 工作模式发布订阅模式 第10节答疑
  • Python爬虫-eBay商品排名数据