蓝牙是一种无线通讯技术标准,用来让设备之间在短距离内交换资料,最早由瑞典的爱立信公司在 1994 年发布。提出蓝牙标准的目的很简单,就是简化电子设备之间的数据交互过程。那个时候手机刚刚开始流行,用手机跟耳机或电脑进行无线连接成了一个很强劲的需求,蓝牙协议很大程度上也是服务于这类需求。
蓝牙 1.0 (1999年)早期的蓝牙版本,有数据泄露风险,并没有被广泛应用;
蓝牙 1.2 蓝牙技术一直在迭代,发布于 2003 年的蓝牙 1.2 是蓝牙真正走向安全可用的标志;
蓝牙 2.0(2004 年)则着重提高多任务处理能力,同时支持双工模式,可以一边语音通讯,一边传输文件;
蓝牙 3.0(2009 年)引入高速传输,加大带宽,客观上挤占 WiFi 的位置,增加了功耗和成本;
蓝牙 4.0(2010 年)重新找准定位,引入 BLE 概念,即 Bluetooth Low Energy 低功耗蓝牙;
蓝牙 5.0(2016 年)让蓝牙在低功耗下具备更强大的传输能力,提高了安全性和可达性,逐渐成为目前主流。
蓝牙 5.2(2020 年)聚焦LE Audio,发布多个LE音频规范和全新的LC3高品质低延迟编码器,增强蓝牙音频体验。
组成蓝牙协议的基石是一个个规范(Profile),蓝牙标准里目前有二十多个规范,一个规范其实就是一种通讯的类型或者协议,不同规范覆盖不同的应用。
其中有三个规范聚焦于音频数据的传输。传统的A2DP和HFP以及最新的BAP
其中HFP 基于SCO(Synchronous Connection Oriented)链路用于双向传输通话语音。SCO链路具有同步传输特性,但无线传输有错误风险为保证同步性数据的完整、正确性就无法保障所以HFP采用的编码器需要具备容错能力。
A2DP(Advanced Audio Distribution Profile),蓝牙立体声音频传输规范,典型应用为蓝牙耳机。蓝牙A2DP规范在协议栈中的位置如下图:
A2DP协议的音频数据在ACL Link上传输,这与SCO上传输的语音数据有本质区别。A2DP不包括远程控制的功能,远程控制的功能则依赖AVRCP协议规范。A2DP是建立在AVDTP协议之上的高层协议,AVDTP定义了蓝牙设备之间数据流句柄的参数协商,建立和传输过程以及相互交换的信令实体形式,该协议是A2DP框架的基础协议。
蓝牙A2DP数据包基于AVDTP协议进行传输,其层级关系如下数据包在每一层都有自己的包头。
进行数据传输之前发送端(SRC)与接收端(SNK)需进行一系列信令交互以确认双方传输数据的参数之后才能开始数据传输,其信令交互流程如下:
同为近距离无线通信蓝牙相较于WIFI优势在于功耗和其便携的插入性只需按照规范实现相应的协议即可实现快捷插拔,但其劣势传输带宽也显而易见,如今WIFI传输速率已达到Gbps级别而蓝牙传输带宽仅2Mbps,而早期的蓝牙传输速率仅为几百Kbps。
而对于音乐音频来说基本的CD品质也需要1.4Mbpsr如果直接传输原始音频则可能耗尽带宽,抗干扰性能差易卡音断音,所以传输音频数据必须在Source端压缩编码,在Sink端解压缩。
而如何编码解码蓝牙联盟标准规定SBC是强制支持的,AAC/MP3可选的支持(Optional Codec),除了这些外,也可以有厂家自己的编码形式(Vendor Specific A2DP Codecs),例如高通的APT-X、索尼的LDAC、以及LHDC。
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈
前面讲到为了在蓝牙通道传输音频数据必须将音频数据进行压缩编码后传输,而这里的压缩和常规认知的文件压缩、解压后得到完全一致的源文件不一样,为了适应蓝牙传输的带宽音频数据被压缩后占用的带宽很小这种压缩为有损压缩。以SBC为例压缩后仅占用200多Kbps 压缩比达到1/7,而这样的有损压缩势必损失音乐的音质。
常见编码器占用带宽如下表。
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以上。
实际上影响延迟的主要因素是蓝牙传输的稳定性。理想情况下发送蓝牙音频发送端等时间间距均匀的发送数据包,接收端等时间间距均匀的接收数据,这种情况下接收端可稍微延迟后将收到数据通过喇叭送出,在喇叭播放完这包数据之前可收到下包数据继而能够连续不断的播放,此时蓝牙音频的时延取决于发包间隔和传输时间。
然而现实情况总是不如人意,蓝牙作为一种无线传输协议传输数据可能受到周边无线设备或强电磁设备比如电磁炉、微波炉等设备干扰导致数据出错重传,实际上即使没有干扰由于蓝牙器件本身的性能、或是因为无线传输的特性都是有可能出现传输错误的。传输错误重传导致其中某些包重传次数多传输时间变长,接收端收到的数据包并不是等时间均匀的。这种情况下接收端想要流畅播放必须先缓存一定时间长度的数据之后再进行播放,以防止其中包晚到导致播放不连续,这种情况下真实主要因素是为了抵抗网络传输不稳定性而人为添加的延迟(缓存),而传输码率越高网络波动带来的影响会更大也就需要更长的延迟来防止卡顿。
LE Audio 核心框架如下
LE Audio是新一代蓝牙音频传输协议,基于低功耗蓝牙BLE无线通信,其主要特点有:
1、超低功耗,LE本身即为低功耗蓝牙,LE Audio更是首创每只耳机独立传输单通道数据,大幅缩减每只耳机的数据传输量,将传输和解码功耗降低。
2、全新高音质、低功耗音频解码器LC3(Low Complexity Communications Codec)
3、LE同步通道(ISOC:Low Energy Isochronous Channels)
4、支持多重串流音频(Multi-Stream Audio)
5、支持广播音频技术(Broadcast Audio)
LE Audio正是为了解决前文传统蓝牙音频的缺点:音质、延迟,以及双耳无线耳机和多连接问题而提出的下一代蓝牙音频方案。LE Audio 从蓝牙底层协议出发在数据流层面定义了新音频的传输机制LE Isochronous Channels。该同步通道同时支持连接模式和非连接模式。
一对一连接模式采用LE-CIS (LE Connected Isochronous Stream)逻辑传输通道,清除机制将延迟数据flush掉,保障接收端定时接收到数据从而缩减接收端的buffer大幅降低延迟。不同的LE-CIS组成CIG(Connected Isochronous Groups),同一个CIG内的CIS具有相同的时间戳,以保证同一个group内的数据是同步的,最明显的应用是耳机,左耳和右耳分别是一个CIS,他们组成一个CIG,相互之间的时间是同步的。
一对多非连接广播模式,称作是BIS(Broadcast Isochronous Stream),多个BIS可以组成一个BIG。广播模式的同步是通过一个周期广播的PDU实现的,该PDU包含有针对每个BIS的时间戳,一旦同步,接收方便可以称为同步接收者。同样的例子,如果对于一个同一个广播者,一群人中的每个人左右可同时同步接收该广播音频信号。
移动通信技术取缔了家家户户的电话线、WIFI通信技术取代了无所不见得网线。自1998年来,蓝牙和蓝牙音频协议经过多次更新,从仅支持单声道传输到如今真无线(TWS)耳机,从仅支持极低音质传输到如今LHDC Hi-Res,蓝牙音频成长迅速,正逐渐走进每个人的身边取代人们最后的半米线(耳机线)。随着蓝牙5.2 BLE Audio技术的成熟 蓝牙广播音频可能走进公共场所,多设备间低功耗音频串流,为 TWS 真无线立体声提供更多可能,为未来的蓝牙音频带来更大的想象空间。