经典蓝牙A2DP介绍解析

一、简介

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 数据, 然后交于声卡播放 。

二、编码介绍

蓝牙音频传输在当今市面上有如下几种常见的编码方式可供选择

v2-500fccf8ce0cbafec60b2c627e2ddeea_1440w.webp

A2DP协议最早规定的基础编码方式也是强制性的编码方式为SBC,我们Android手机一般也都支持SBC编码,AAC是由多家公司共同开发,苹果设备中对AAC有着广泛的支持,aptX类的编码方式的专利权属于高通,而LDAC则是索尼大法在2015年推出的无线音频编码技术,索尼的LDAC、以及LHDC也是众多无线音频编码方式中最为接近无损编码的方式。以上五种编码方式传输的蓝牙音乐音质从低到高排列为:

SBC < AAC < aptX < aptX-HD < LDAC

三、A2DP音质和延迟

前面讲到为了在蓝牙通道传输音频数据必须将音频数据进行压缩编码后传输,而这里的压缩和常规认知的文件压缩、解压后得到完全一致的源文件不一样,为了适应蓝牙传输的带宽音频数据被压缩后占用的带宽很小这种压缩为有损压缩。以SBC为例压缩后仅占用200多Kbps 压缩比达到1/7,而这样的有损压缩势必损失音乐的音质。

常见编码器占用带宽如下表。

v2-e1f1359f711a6a8910e4d57ae34ee8f3_1440w.webp

SBC是A2DP协议强制规定的编码格式。利用人耳对不同频率信号的感知灵敏度不同的特性,在人的听觉(不敏感的部位采用较粗糙的量化,在敏感部位采用较细的量化,以获得更好的主观听觉效果,是音质最差的一种编码器。AAC则是协议规范可选支持的一种高品质编码器,后来实现厂商提出了apt-X,LDAC,LHDC 等高带宽占用的高品质音频编码器,其中LDAC/LHDC更是支持Hi-RES标准认证的96K高解析音频。LC3则是跟随全新一代LE音频发布的LE音频强制支持的高品质低带宽编码技术。总体来说更高的码率意味着更好的音质,然而最新一代LC3的出现则可能打破这一规律,LC3和SBC的主观对比打分如下,在码率为345 kbps的情况下,SBC的分数略高于4.0,但LC3在码率160 kbps情况下即可达到比SBC更高的主观评分。

前面提到蓝牙音频传输必须先进行编码,而编码是按照帧进行的既一定长度的数据进行一次编码压缩,这里累积到足够数据再编码,设备端收到数据再解码播放的过程则会造成延迟。网络上的帖子大多将蓝牙音频延迟归咎于此,其实不然,前文提到的几种编码器编码帧最长的为AAC 一帧长度达到23ms,蓝牙传输一帧的数据也能(通常)在几ms间完成,然而实际延迟却是这个数据的好几倍达到100ms以上,SBC一帧更是只有2ms不到,但其延迟却达到200以上。

v2-ad971d3383bf12bd095a44f21ab1fc2c_1440w.png

实际上影响延迟的主要因素是蓝牙传输的稳定性。理想情况下发送蓝牙音频发送端等时间间距均匀的发送数据包,接收端等时间间距均匀的接收数据,这种情况下接收端可稍微延迟后将收到数据通过喇叭送出,在喇叭播放完这包数据之前可收到下包数据继而能够连续不断的播放,此时蓝牙音频的时延取决于发包间隔和传输时间。

v2-5c4f0271c1abca6e2726ba972735cd72_1440w.webp

然而现实情况总是不如人意,蓝牙作为一种无线传输协议传输数据可能受到周边无线设备或强电磁设备比如电磁炉、微波炉等设备干扰导致数据出错重传,实际上即使没有干扰由于蓝牙器件本身的性能、或是因为无线传输的特性都是有可能出现传输错误的。传输错误重传导致其中某些包重传次数多传输时间变长,接收端收到的数据包并不是等时间均匀的。这种情况下接收端想要流畅播放必须先缓存一定时间长度的数据之后再进行播放,以防止其中包晚到导致播放不连续,这种情况下真实主要因素是为了抵抗网络传输不稳定性而人为添加的延迟(缓存),而传输码率越高网络波动带来的影响会更大也就需要更长的延迟来防止卡顿。

总结下来A2DP延迟大有两点原因:

1、数据帧到达一定长度才会一次编码压缩。

2、错包重传机制导致的延迟

v2-2a6c26ea3c87a03828db484684619804_1440w.webp

四、常见问题与解决方案
1. 音质差或断断续续
音质问题通常由干扰或编码质量差引起。若希望在代码中处理或提示音质选择,尤其是切换编码格式,可以在设备支持的条件下切换到更高质量的编码格式(如AAC或aptX)。不过,注意在某些设备和平台上,选择编码格式的功能可能是受限的。


2. 音频延迟问题处理
A2DP的音频传输通常会有一定延迟,这对于视频播放时尤为明显。如果音频延迟较大,你可以使用支持低延迟音频传输的蓝牙设备(如支持aptX Low Latency的设备),并通过音频同步来减少延迟。

检查是否支持低延迟音频
音频延迟在视频播放中可能会更为明显。你可以通过时间戳同步音频和视频播放。假设你获取到视频和音频的时间戳,可以根据当前的延迟调整音频的播放时间。

总结
总结来说,蓝牙A2DP协议不仅在耳机、音响和车载音频等常见应用中发挥重要作用,也为我们提供了更高质量、更灵活的音频传输解决方案。在开发中,合理配置权限、管理蓝牙连接和优化音质和延迟,可以为用户提供更加稳定和高质量的无线音频体验。

音质优化和音频延迟问题也是A2DP协议实现中的关键点。在一些特殊场景下,如视频播放时,音频延迟可能成为影响用户体验的重要因素。此时,使用支持低延迟音频传输的设备(如aptX Low Latency)和音频与视频同步的方法,可以有效减少延迟,提高同步体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深圳函数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值