这篇文章也有俄语/Этастатьятакжедоступнанарусскомязыке版,在没有3.5mmAudio插孔的智能手机大众市场换了耳机行业,无线蓝牙耳机已经成为许多用户在耳机模式下听音乐和交流的主要方式。蓝牙设备制造商很少披露详细的产品规格,互联网上的蓝牙音频文章自相矛盾,有时甚至是不正确的。他们没有讲述所有的功能,而且经常发布相同的错误信息。让我们试着了解协议、蓝牙协议栈、耳机和扬声器的功能、音乐和语音的蓝牙编解码器,找出影响传输的音频质量和延迟的因素,学习如何捕获和解码有关支持的编解码器和其他设备功能的信息。TL;DR:浏览器可以使用Emscripten执行从C编译成WebAssembly的音频编码器,而且它们甚至不会延迟。
蓝牙的功能组件由规范中形式化的配置文件记录功能定义。蓝牙音乐使用高质量音频A2DP传输配置文件进行传输。A2DP标准于2003年采用,从那时起就没有发生过重大变化。该配置文件标准化了一个强制编解码器-SBC,这是专门为蓝牙创建的低计算复杂度编解码器,以及另外3个编解码器。您也可以使用您自己实现的特定于供应商的编解码器,而不是包含在A2DP中。截至2019年6月,我们生活在XKCD漫画中,有14个A2DP编解码器:A2DP中包含mpeg-1/2层1/2/3←:广为人知的mp3,在数字电视mp2中很常见,以及过时的mp1。
你可能会想,如果蓝牙有EDR,它允许你以2或3 Mb/s的速度传输数据,而未压缩的双通道16位PCM只需要1.4 Mb/s,那么我们为什么首先需要编解码器呢?蓝牙中有两种类型的数据传输:异步无连接(ACL),用于不建立连接的异步传输;以及面向同步连接(SCO),用于具有连接建立的同步传输。数据传输使用时分方案,并为每个传输的数据包(跳频/时分双工,FH/TDD)改变频率信道。时间被分成625微秒的间隔,称为时隙。其中一个设备在偶数个时隙中传输,另一个设备在奇数个时隙中传输。根据数据的大小和传输模式,传输的分组可以占用1、3或5个时隙。如果分组足够大并且使用多于一个时隙传输模式,则在偶数时隙和奇数时隙中执行数据,直到传输结束。如果每个数据包占用1个时隙,并且两个设备都连续发送数据,则在一秒内可以接收和发送多达1600个数据包。在公告和蓝牙网站上可以找到EDR的2 Mbps或3 Mbps的传输速率,是指所有数据(包括所有要封装的数据的所有协议的技术头)同时在两个方向上的最大通道数据传输速率。实际的数据传输速率会有很大差异。音乐流媒体采用异步方式,几乎总是使用2-DH5和3-DH5类型的数据包,分别以2Mb/s和3Mb/s的EDR模式承载最大数据量,占用5个时分时隙。一个设备使用5个时隙,另一个设备使用1个时隙的传输示意图(DH5/DH1):由于分时原理,如果第二个设备没有向我们发送任何东西或发送一个小分组,则我们必须在发送分组之后等待625微秒的时隙,如果第二个设备执行大分组传输,则需要等待更多时间。如果手机上连接了多个设备(如耳机、智能手表和健身手环),则传输时间在所有设备之间共享。A2DP音频流需要封装在特殊的传输协议L2CAP和AVDTP中,它们从分组中最大可能的音频有效负载量中扣除16字节。1414和1429kbps不足以在真实条件下传输未压缩的音频,有2.4 GHz的嘈杂频带和偶尔的服务数据。EDR 3 Mbps对传输功率和信噪比要求很高,因此即使在3-DH5模式下也不可能进行舒适的PCM传输,因为总会有短期中断,而且只有在几米远的地方,一切都会或多或少可靠地工作。实际上,即使是990kb/s的音频流(LDAC 990kb/s)也不容易可靠传输。让我们回到编解码器上。该编解码器对于所有支持A2DP标准的设备都是强制的。最好的编解码器和最差的编解码器同时进行。SBC是一种简单且计算快速的编解码器,具有使用自适应脉冲编码调制(APCM)的原始心理声学模型(具有简单的听觉掩蔽)。A2DP规范