蓝牙音频:有关配置文件,编解码器和设备的最详细信息

XKCD漫画。标准如何扩散。现状:有14个竞争标准。怪胎:14?!可笑!我们需要开发一种通用标准,涵盖每个人的用例。怪胎的女朋友:是的!很快:情况:有15个竞争标准。

本文也以俄语提供/本文也以俄语提供

没有3.5毫米音频插孔的智能手机的大众市场改变了耳机行业,无线蓝牙耳机已成为许多用户聆听音乐和以耳机模式进行通信的主要方式。
蓝牙设备制造商很少披露详细的产品规格,并且Internet上的蓝牙音频文章相互矛盾,有时甚至不正确。 它们无法说明所有功能,并且经常发布相同的错误信息。
让我们尝试了解协议,蓝牙堆栈,耳机和扬声器的功能,用于音乐和语音的蓝牙编解码器,找出影响传输音频质量和延迟的因素,了解如何捕获和解码有关受支持编解码器和其他信息的信息。设备功能。

TL; DR

  • SBC编解码器还可以
  • 耳机具有自己的每个编解码器均衡器和后处理配置
  • aptX不如广告所说
  • LDAC是一种营销手段
  • 语音音频质量仍然很低
  • 浏览器能够使用emscripten执行从C编译为WebAssembly的音频编码器,它们甚至不会滞后。





蓝牙音乐

蓝牙的功能组件由配置文件定义-规范中已正式记录的功能。 使用高质量的音频A2DP传输配置文件传输蓝牙音乐。 A2DP标准于2003年采用,此后没有发生太大变化。
该配置文件标准化了一个强制性编解码器-SBC,专门为蓝牙创建的低计算复杂性编解码器和3个其他编解码器。 您也可以使用自己的实现中未包含在A2DP中的特定于供应商的编解码器。

截至2019年6月,我们使用14种A2DP编解码器制作XKCD漫画

  • S2 ←包含在A2DP中,受所有设备支持
  • MPEG-1 / 2 Layer 1/2/3 ←包含在A2DP中:众所周知的MP3 ,常见于数字电视MP2和过时的MP1
  • MPEG-2 / 4 AAC ←包含在A2DP中
  • ATRAC ←索尼的旧编解码器,包含在A2DP中
  • LDAC ←索尼的新编解码器
  • 1988年的aptX ←编解码器
  • aptX HD ←与aptX相同,但编码配置文件不同
  • aptX Low Latency完全不同的编解码器,没有更低缓冲的软件实现 aptX
  • aptX自适应 ←另一个高通编解码器
  • FastStream ←伪编解码器,SBC双向修改
  • HWA LHDC ←华为的新编解码器
  • 2台设备支持的Samsung HD
  • 2设备支持的Samsung可扩展
  • 三星UHQ-BT ←支持3台设备


您可能想知道为什么我们首先需要编解码器,如果蓝牙具有EDR ,它可以让您以2或3 Mb / s的速度传输数据,而未压缩的两通道16位PCM仅需要1.4 Mb / s?

蓝牙数据传输

蓝牙中有两种类型的数据传输:异步连接较少(ACL),用于不建立连接的异步传输;以及面向同步连接(SCO),用于与连接建立的同步传输。
数据传输使用时分方案,并为每个传输的数据包(Frequency-Hop / Time-Division-Duplex,FH / TDD)更改频道。 时间分为625微秒的间隔,称为时隙。 其中一个设备以偶数个插槽传输,另一个设备以奇数个传输。 根据数据的大小和传输模式,传输的数据包可以占用1、3或5个时隙。 如果数据包足够大并且使用了一种以上的时隙传输模式,则在偶数和奇数时隙中执行数据,直到传输结束。 如果它们每个占用1个插槽并且两个设备都连续发送和接收数据,则您可以在一秒钟内接收和发送多达1600个数据包。

在公告和蓝牙网站上发现的EDR的2或3 Mbps传输速率是同时在两个方向上所有数据总计(包括要封装的所有协议的技术标头)的最大信道数据传输速率。 实际的数据传输速率将有很大的不同。

异步方法用于音乐流,几乎总是使用2-DH5和3-DH5类型的数据包,它们分别以2 Mb / s和3 Mb / s EDR模式承载最大数据量,并占用5个时分时隙。

一个设备使用5个插槽,另一个设备使用1个插槽(DH5 / DH1)的传输示意图:
5个发送时隙,每个发送时隙发送625微秒,一个接收时隙,也发送625微秒。总计3.75毫秒。

由于分时原理,如果第二个设备不向我们发送任何内容或发送小数据包,则在发送数据包后我们必须等待625微秒的时隙,如果第二个设备以大数据包进行传输,则需要更多的时间。 如果电话上连接了多个设备(例如耳机,智能手表和健身手环),则它们之间将共享传输时间。

A2DP音频流传输需要封装在特殊的传输协议L2CAP和AVDTP中,该协议将从数据包中最大可能的音频有效负载量中减去16个字节。
封包类型插槽数量每个数据包最大字节最大A2DP有效负载字节最大A2DP有效负载比特率
2-dh33367351936 Kb /秒
3-dh335525361429 kb /秒
2-DH556796631414 kb /秒
3-dh55102110052143 kb /秒
1414和1429 kbps不足以在嘈杂的2.4 GHz频带和偶尔的服务数据的现实条件下传输未压缩的音频。 EDR 3 Mbps要求发射功率和信噪比,因此,即使在3-DH5模式下也无法进行舒适的PCM传输,因为总会出现短期中断,并且仅在一定距离下,一切都或多或少会可靠地工作几米。
在实践中,即使是990 kb / s的音频流(LDAC 990 kb / s)也不容易可靠传输。

让我们回到编解码器。

b

对于所有支持A2DP标准的设备,此编解码器都是必需的。 最佳和最差编解码器同时进行。

采样率位深比特率编码支持解码支持
16,32,44.1,48 kHz16位10-1500 kb /秒所有装置所有装置


SBC是一种简单且计算快速的编解码器,具有使用自适应脉冲编码调制(APCM)的原始心理声学模型(具有简单的听觉掩蔽)。
A2DP规范建议使用两个配置文件:中等质量和高质量。
具有“中等质量”和“高质量”配置文件的表。指定的值是位池,帧长和位速率。对于44.1 kHz联合立体声。中等质量:比特池= 35,帧长= 83,比特率=229。高质量:比特池= 53,帧长= 119,比特率= 328。

编解码器具有许多设置,可让您控制算法延迟,块中的样本数和位分配算法,但几乎始终在规范中使用该参数: 立体声 ,8个频段,音频中的16个块帧, 响度位分配方法。
SBC可以动态调整比特池参数,这直接影响比特率。 如果无线电阻塞,数据包丢失或设备离得很远,则音频源可以减少位池以防止音频中断,直到连接再次稳定。

大多数耳机的制造商都将bitpool参数的最大值设置为53,这在使用推荐配置文件时将比特率限制为每秒328 KB。
即使耳机制造商已将最大位池值设置为高于53(例如,对于BeatsSolo³,JBL Everest Elite 750NC,Apple AirPods以及某些接收器和车载主机而言,这都是正确的),但大多数操作系统都不允许使用由于蓝牙协议栈的内部限制,比特率更高。
另外,一些制造商为某些设备设置了较低的最大位池值。 例如,在Bluedio T中,它等于39;在三星Gear IconX中,它等于37,这使声音质量较差。

人为限制是在蓝牙协议栈中引入的,这可能是由于认证测试量不足以及某些具有大的Bitpool值或非典型配置文件的设备不兼容所致,即使它们报告支持它们。 对于开发人员来说,将选项限制为推荐配置文件的已知良好值比创建不兼容设备的数据库更容易。 尽管现在他们为其他无法正常工作的功能执行此操作。

SBC从下到上以不同的权重为频段动态分配量化位。 如果整个比特率用于低频和中频,则高频将被切断(由静音代替)。

SBC 328 kbps的示例。 原始音频在顶部,SBC编码的音频在底部。 切换轨道以进行比较。 使用FLAC无损编解码器压缩视频文件中的音频流。 在mp4容器中使用FLAC尚未正式标准化,这就是为什么音频可能无法在您的浏览器中播放的原因(应在最新版本的台式机Chrome和Firefox中使用)。 如果没有声音,则可以下载文件并在任何视频播放器中打开。
ZZ上衣-穿着整齐的男人

切换的时刻在频谱图上可见:SBC会定期剪切17.5 kHz以上的安静声音,并且不会为20 kHz以上的频带分配任何位。 频谱图是可单击的(1.7 MB)。
图片

在这首单曲中,我听不到原著与SBC的区别。

让我们进行一些更新,并模拟具有Bitpool 37的Samsung Gear IconX耳机的音频质量(顶部是原始流,底部是SBC 239 kbps,FLAC用于音频)。
虚心的自我放纵-见证

我听到crack啪声,较小的立体声效果以及高频时令人不快的人声“杂音”。

综上所述,SBC是一种非常灵活的编解码器:可以配置为低延迟,可以在高比特率(452+ kb / s)时提供出色的音频质量,并且对于大多数使用标准高质量(328 kb / s)的人来说是相当不错的。 但是,编解码器因音质差而臭名昭著有几个原因:A2DP标准未定义固定配置文件(仅给出建议),蓝牙堆栈开发人员对Bitpool设置了人为限制,不显示传输音频的参数在用户界面中,耳机制造商可以自由设置其设置,而从不在产品的技术特性中指定Bitpool值。
bitpool参数仅在一个配置文件中直接影响比特率。 同一比特池值53既可以产生具有建议的“高质量”配置文件的328 kbps比特率,又可以在双通道模式和4个频带下产生1212 kbps的比特率,这就是操作系统作者除了比特池之外还对比特率设置限制的原因。 我认为情况是由于A2DP标准中的缺陷引起的:有必要协商比特率而不是比特池。

不同操作系统支持的SBC功能表:
操作系统采样率最大比特池限制最大比特率限制典型比特率动态比特池支持
Windows 1044.1 kHz的53512 kb /秒328 kb /秒✓*
Linux(BlueZ + PulseAudio)16,32,44.1,48 kHz64(用于传入连接),53(用于传出连接)没有限制328 kb /秒✓*
macOS High Sierra44.1 kHz的默认为64、53 ***不明328 kb /秒
Android 4.4-944.1 / 48 kHz **53328 kb /秒328 kb /秒
Android 4.1-4.3.144.1,48 kHz **53229 kb /秒229 kb /秒
黑莓OS 1048 kHz的53没有限制328 kb /秒
*比特池减少,但是在传输条件变化时不会自动增加。 要恢复位池,您需要停止播放,等待几秒钟,然后重新启动音频。
**默认值取决于编译固件时指定的堆栈设置。 在Android 8 / 8.1中,频率仅为44.1 kHz或48 kHz,具体取决于编译时的设置,其他版本同时支持44.1 kHz和48 kHz。
***可以使用蓝牙资源管理器软件调整位池值。

aptX和aptX HD

aptX是一种简单且计算快速的编解码器,没有心理声学,它使用自适应差分脉冲编码调制( ADPCM )。 它出现在1988年左右( 专利申请日期是1988年2月)。 在蓝牙技术出现之前,它主要用于专业无线音频设备。 目前由高通所有,它需要许可和许可费用。 截至2014年:一次性付款6,000美元,每台设备≈1美元,最多可批量处理10,000台设备( 来源 ,第16页)。

编解码器只有一个参数-采样率。 尽管也有通道号/模式配置选项,但我所知道的所有设备仅支持立体声(70多个型号)。

编解码器采样率位深比特率编码支持解码支持
aptX16,32,44.1,48 kHz16位128/256/352/384 kb / s(取决于采样率)Windows 10(台式机和移动设备),macOS,Android 4.4 + / 7 *,Blackberry OS 10各种各样的设备(在硬件中)
*最高版本7需要修改蓝牙协议栈。 仅当Android设备的制造商已从Qualcomm许可使用编解码器时(如果操作系统包括编码库),才支持编解码器。

aptX将音频分成4个频段并以相同位数连续量化:0-5.5 kHz为8位,5.5-11 kHz为4位,11-16.5 kHz为2位,16.5-22 kHz为2位( 44.1 kHz采样率的最大值)。

aptX音频示例(顶部-原始音频,底部-aptX编码的音频,仅左声道的频谱图,FLAC中的声音):

较高的频率稍微偏红,但听不到差异。

由于量化比特的固定分布,编解码器无法将比特“转移”到最需要它们的频率。 与SBC不同,aptX不会“切断”频率,但会向其添加量化噪声,从而减小音频的动态范围。

我们不应该假设例如在一个频带上使用2位将动态范围降低到12 dB:即使使用2个量化位,ADPCM仍允许使用高达96 dB的动态范围,但仅适用于特定类型的信号。
ADPCM以数字表示形式存储当前值和下一个值之间的差,而不是像PCM中那样使用绝对值。 这减少了对存储相同(无损失)或几乎相同(舍入误差较小)信息所需的位数的要求。 为了减少舍入误差,应用了因子表。
在创建编解码器时,作者在一组音乐音频文件上计算了ADPCM系数。 音频信号越接近构建表的音乐集,aptX产生的量化误差(噪声)越少。

因此,综合测试总是会产生比音乐更差的结果。 我做了一个特殊的合成示例,其中aptX的性能很差-正弦波为12.4 kHz(顶部-原始信号,底部-aptX。FLAC中的声音。强奸耳朵,减小音量!):

频谱图:
频谱图,最大噪声水平--55 dB

噪声清晰可见。

但是,如果生成幅度较小的正弦波使其更安静,则噪声也会变得更安静,这表明动态范围很广:
频谱图,最大噪声水平--75 dB

要收听原始音乐曲目和压缩音乐曲目之间的差异,您可以将信号之一反相并将曲目添加到各个通道。 这种方法通常是不正确的,使用更复杂的编解码器不会产生正确的结果,但是对于ADPCM类编解码器,此方法的使用是合理的。
原始音频和aptX编码的音频之间的区别
信号的均方根差在-37.4 dB的水平上,对于这种压缩音乐来说并不算多。

aptX HD

aptX HD不是独立的编解码器,而是经过改进的aptX编码配置文件。 更改会影响分配给频带编码的位数:0-5.5 kHz为10位,5.5-11 kHz为6位,11-16.5 kHz为4位,16.5-22 kHz为4位(值44.1 kHz) 。

编解码器采样率位深比特率编码支持解码支持
aptX HD16,32,44.1,48 kHz24位192/384/529/576 kb / s(取决于采样率)Android 8 + *一些音频设备(在硬件中)
*最高版本7需要修改蓝牙协议栈。 仅当Android设备的制造商已从Qualcomm许可使用编解码器时(如果操作系统包括了编码库),才支持编解码器。

该编解码器不如aptX常见:它似乎需要从高通获得单独的许可,并需要单独的许可费用。

让我们以12.4 kHz正弦波重复该示例:
频谱图,最大噪声水平--72 dB

比aptX好得多,但仍然很吵。


aptX低延迟

低延迟版本的aptX不是独立的编解码器。 它仅在延迟和应用于音频单元一侧的缓冲区设置方面有所不同。 除此之外,这是一个常用的aptX。
它设计用于低延迟(电影,游戏)的交互式音频传输,在这些传输中,无法通过编程方式调整声音延迟。 有适用于Intel蓝牙芯片Dell驱动程序软件实施 。 发射器,接收器,耳机和扬声器也支持此功能,但智能手机不支持。

采样率比特率编码支持解码支持
44.1 kHz的352 kb /秒Windows,带有Dell驱动程序和一些发射器(在硬件中)一些音频设备(在硬件中)


AAC

AAC或高级音频编码是具有复杂心理声学模型的计算复杂的编解码器。 它被广泛用于Internet上的音频,是仅次于MP3的第二流行的编解码器。 要求许可和许可费:一次性付款15,000美元(对于少于15名员工的公司,一次性付款1000美元)+前500,000台设备( 来源 )的0.98美元。
编解码器在MPEG-2和MPEG-4规范内已标准化,尽管经常被误解,但它不属于Apple。

采样率比特率编码支持解码支持
8-96 kHz8-576 kb / s(用于立体声),256-320 kb / s(典型用于蓝牙)macOS,Android 7 + *,iOS各种各样的设备(在硬件中)
*仅在制造商已支付版税的设备上

iOS和macOS包含迄今为止最好的Apple AAC编码器,可产生最高的音频质量。 Android使用第二好的Fraunhofer FDK AAC编码器,但也可以使用嵌入在平台(SoC)中的各种硬件编码器,其编码质量未知。 根据SoundGuys网站上发布的最新测试 ,不同Android手机上AAC编码的质量差异很大:
各种移动设备的AAC编码频谱图。华为P20 Pro在14 kHz区域,LG V30中-16 kHz区域,三星Note 8-17 kHz,苹果iPhone 7-19 kHz中急剧下降。

大多数无线音频设备的AAC的最大比特率均为320 kbps,有些仅支持256 kbps。 其他比特率极为罕见。
AAC可以在320和256 kb / s的比特率下提供出色的质量,但是在已经压缩的内容上容易产生世代损失 ,但是,即使使用多个连续编码,也很难听到iOS上原始和AAC 256 kb / s之间的差异。 对于MP3 320 kbps编码为AAC 256 kbps的损耗,可以忽略不计。
与其他任何蓝牙编解码器一样,任何音乐都首先被解码,然后使用编解码器进行编码。 聆听AAC格式的音乐时,它首先由OS解码,然后再次编码为AAC,以通过蓝牙传输。 混合几个音频流(例如音乐和新消息通知)是必要的。 iOS也不例外。 您会发现很多说法,认为iOS不会以AAC格式对音乐进行转码以通过蓝牙进行传输,这是不正确的。

AAC对标准编码方法有许多扩展。 其中之一-可伸缩至无损(SLS)-已针对蓝牙进行了标准化,可让您传输无损音频。 不幸的是,现有设备上找不到SLS支持。 减少传输延迟的扩展AAC-LD(低延迟)未针对蓝牙进行标准化。


MP1 / 2/3

MPEG-1 / 2第3部分编解码器由广为人知的MP3,不常见的MP2(主要用于数字电视和广播)和完全未知的MP1组成。

完全不支持旧的MP1和MP2编解码器,我找不到任何可以对它们进行编码或解码的耳机或蓝牙堆栈。
某些耳机支持MP3解码,但任何现代操作系统堆栈均不支持编码。 如果您手动编辑配置文件,则Windows的第三方BlueSoleil堆栈似乎可以对MP3进行编码,但是在我的安装中,它会导致Windows 10上的BSoD。结果:您实际上无法使用编解码器来播放蓝牙音频。
以前,在2006-2008年,在设备广泛使用A2DP标准之前,人们通过MSI BluePlayer程序在诺基亚BH-501耳机上收听MP3音乐,该程序可在Symbian和Windows Mobile上使用。 当时,智能手机的操作系统架构允许访问许多低级功能,甚至有可能在Windows Mobile上安装第三方蓝牙堆栈。

MP3编解码器的最新专利已过期,自2017年4月23日起,使用编解码器无需支付许可费用。

如果采取上述参考文献中提到的运行时间最长的专利作为措施,那么当Technicolor拥有并管理的美国专利6,009,399到期时,MP3技术将在2017年在美国成为免费专利。
资料来源: www.iis.fraunhofer.de/en/ff/amm/prod/audiocodec/audiocodecs/mp3.html

采样率比特率编码支持解码支持
16-48 kHz8-320 kb /秒任何地方都不支持一些音频设备(在硬件中)


LDAC

Sony积极推出的新型“ Hi-Res”编解码器,支持高达96 kHz的采样率和24位深度,比特率高达990 kbps。 它被宣传为发烧级编解码器,以替代现有的蓝牙编解码器。 它具有自适应比特率功能,可根据无线电传输条件调整比特率。

LDAC编码器( libldac )包含在标准的Android发行版中,从OS版本8开始的任何Android智能手机均支持编码。软件解码器不是免费提供的,编解码器规范也不为公众所用。在编码器上,内部结构类似于PlayStation 4和Vita中使用的Sony ATRAC9编解码器:两者均在频域中工作,使用改进的离散余弦变换(MDCT)和霍夫曼压缩。
LDAC将音频分为12或16个频段:12用于44.1和48 kHz,16用于88.2和96 kHz。

LDAC几乎仅受Sony耳机支持。 有时可以在其他制造商的耳机和DAC上找到LDAC解码,但很少见。

采样率比特率编码支持解码支持
44.1-96 kHz303/606/909 kb / s(用于44.1和88.2 kHz),330/660/990 kb / s(用于48和96 kHz)Android 8以上某些Sony耳机和其他制造商的精选设备(在硬件中)


LDAC高分辨率编解码器营销损害了其技术性能:在仍然无法无损压缩CD质量音频的情况下,花费比特率来编码和传输人耳无法听到的频率以及更高的比特深度是不明智的。 幸运的是,编解码器具有两种操作模式:CD音频传输和高分辨率音频传输。 在第一种情况下,仅44.1 kHz / 16位通过空中传输。

由于LDAC软件解码器不是免费提供的,因此如果没有其他对LDAC进行解码的设备,则无法测试编解码器。 根据SoundDAC工程师通过数字输出连接的LDAC在其支持下的LDAC测试结果并记录测试信号的输出声音,CD质量模式下的LDAC 660和990 kbit / s提供了信号噪声比略高于aptX HD。 这是一个很好的结果。

LDAC CD 990 kbit / s噪声曲线
资料来源: www.soundguys.com/ldac-ultimate-bluetooth-guide-20026

LDAC还支持已建立的配置文件之外的动态比特率-从138 kbps到990 kbps,但是据我所知,Android仅使用303/606/909和330/660/990 kbps的标准化配置文件。

其他编解码器

其他A2DP编解码器并未广泛使用。 它们的支持要么几乎完全消失,要么仅在某些型号的耳机和智能手机上可用。
甚至Sony也从未将A2DP标准化的ATRAC编解码器用作蓝牙编解码器。 三星高清,三星可扩展和三星UHQ-BT编解码器对发送和接收设备的支持非常有限。 HWA LHDC太新了,仅支持三(?)个设备。


音频设备的编解码器支持

并非所有制造商都发布有关某些无线耳机,扬声器,接收器或发射器中支持的编解码器的准确信息。 有时会发生某些编码解码器仅支持传输而不支持接收的情况(与组合的收发器有关),尽管制造商只是简单地声明“支持”,而没有任何注释(我认为应该归咎于编码器和解码器的单独许可) 。 在最便宜的设备中,您永远找不到对aptX的声明支持。

不幸的是,大多数操作系统界面上的任何地方都没有显示受支持的编解码器。 有关当前使用的编解码器的信息仅在版本8和macOS开始的Android中提供。 但是,即使在这些操作系统中,也只会显示电话/计算机和耳机都支持的编解码器。

如何找出设备支持的编解码器? 通过使用A2DP协商选项捕获和分析流量转储!
这可以在Linux,macOS和Android中完成。 在Linux中,您可以使用Wireshark或hcidump,在macOS中可以使用Bluetooth Explorer,而在Android中,可以使用开发人员工具中可用的Bluetooth HCI转储保存功能。 您将获得btsnoop格式的转储,可以在Wireshark分析器中打开它。
注意 :您需要从智能手机/计算机连接到耳机以捕获正确的转储,而不是相反(无论听起来多么愚蠢)! 耳机还可以建立与智能手机或PC的连接,在这种情况下,耳机将请求手机提供编解码器列表,而不会公开自己的编解码器集。 为确保捕获正确的转储,请先取消配对设备,然后在录制转储的同时将手机与耳机配对。

使用以下显示过滤器隐藏不相关的流量:
btavdtp.signal_id 


结果,您应该看到类似的内容:
Wireshark具有已加载的转储和用于显示A2DP命令GetCapabilities的过滤器

通过单击GetCapabilities命令,您可以获取编解码器的详细信息。
所选项目之一的特征。编解码器ID可见。

Wireshark并不知道所有编解码器标识符,因此某些编解码器将必须手动解密,具体取决于以下标识符表:
 Mandatory: 0x00 - SBC Optional: 0x01 - MPEG-1,2 (aka MP3) 0x02 - MPEG-2,4 (aka AAC) 0x04 - ATRAC Vendor specific: 0xFF 0x004F 0x01 - aptX 0xFF 0x00D7 0x24 - aptX HD 0xFF 0x000A 0x02 - aptX Low Latency 0xFF 0x00D7 0x02 - aptX Low Latency 0xFF 0x000A 0x01 - FastStream 0xFF 0x012D 0xAA - LDAC 0xFF 0x0075 0x0102 - Samsung HD 0xFF 0x0075 0x0103 - Samsung Scalable Codec 0xFF 0x053A 0x484C - Savitech LHDC 0xFF 0x000A 0x0104 - The CSR True Wireless Stereo v3 Codec ID for AAC 0xFF 0x000A 0x0105 - The CSR True Wireless Stereo v3 Codec ID for MP3 0xFF 0x000A 0x0106 - The CSR True Wireless Stereo v3 Codec ID for aptX 

您可以使用以下过滤器来确定您的设备是否支持3 Mbps EDR:
 bthci_evt.code==0x0b 

图片

为了不手动分析转储,我提供了一项将自动分析所有内容的服务: btcodecs.valdikss.org.ru

简单但有用的Windows Bluetooth Tweaker软件除了显示其他功能外,还显示了受支持的和当前使用的编解码器。
Linux用户还可以使用BlueZ软件包中的avinfo实用程序。


编解码器比较。 哪种编解码器更好?

每个编解码器都有其优点和缺点。
aptX和aptX HD使用硬编码配置文件,除非修改编码器和解码器,否则无法更改这些配置文件。 智能手机和耳机制造商都无法更改aptX的比特率或编码因子。 编解码器的所有者高通将参考编码器作为库分发给被许可方。 这些事实是aptX的强项-您必须事先知道将获得什么样的声音质量。

相反,SBC具有许多可调参数,动态比特率(编码器可以在无线电拥塞时降低比特池参数),并且没有硬编码配置文件,而只有推荐的“中等质量”和“高质量”在2003年已添加到A2DP规范中。按照现代标准,“高质量”已不再是很高的标准,尽管没有技术支持,但大多数蓝牙协议栈都不允许使用比“高质量”配置文件更好的参数。限制。
蓝牙SIG不提供库形式的SBC参考编码器,制造商可以自行实现。
这些是SBC的弱点-事先无法确定特定设备的声音质量。 SBC既可以产生低声音质量也可以产生非常高的声音质量,但是在不破坏或规避蓝牙协议栈人为限制的情况下,后者是无法实现的。

AAC的情况含糊不清:一方面,从理论上讲,编解码器应产生的质量与原始音频没有区别,但是根据SoundGuys实验室在不同Android设备上的测试判断,实践尚未得到证实。 故障很可能是由于各种电话芯片组中嵌入的低质量硬件音频编码器造成的。 仅在Apple设备上使用AAC是有意义的。 使用Android,您最好坚持使用aptX / HD和LDAC。

支持替代编解码器的设备通常具有更高的质量,这仅仅是因为为使用这些编解码器的非常便宜的低质量设备支付使用费是没有意义的。 根据我的测试,SBC在高质量硬件上听起来非常不错。

我制作了一个Web服务,可以在您的浏览器中实时将音频编码为SBC,aptX和aptX HD。 您可以使用它来测试这些音频编解码器,而无需通过蓝牙,在任何有线耳机,扬声器和您喜欢的音乐上实际传输音频,也可以在音频播放期间直接更改编码参数:
btcodecs.valdikss.org.ru/sbc-encoder
该服务使用BlueZ项目中的SBC编码库和ffmpeg中的libopenaptx,它们通过emscripten从C编译为WebAssembly和JavaScript,以便在浏览器中执行。 谁能想到这样的未来!

看起来是这样的:

请注意,不同编解码器的噪声水平在20 kHz之后如何变化。 原始MP3文件中没有高于20 kHz的频率。

尝试切换编解码器,看看是否可以听到原始的,SBC 53联合立体声(标准和最常见配置文件)与aptX / aptX HD之间的区别。


但是我可以听到耳机中编解码器之间的区别!

人们在通过Web服务进行测试时没有听到编解码器之间的区别,他们声称他们在使用蓝牙耳机听音乐时听到了。 不幸的是,这不是玩笑或安慰剂的效果:差异确实可以听见,但这不是由编解码器差异引起的。

用于接收无线设备的绝大多数蓝牙音频芯片组都配备了数字信号处理器(DSP),该处理器实现了均衡器, 压缩扩展器 ,立体声扩展器和其他旨在改善(或改变)声音的功能。 蓝牙硬件制造商可以为每个编解码器分别配置DSP,当在编解码器之间切换时,收听者会感觉到他们在收听不同的DSP设置时实际上可以听到编解码器性能的差异。

图中:DECODER-参数均衡器-立体声改善-压缩扩展器-母带制作-输出增益
CSR / Qualcomm SoC中的Kalimba DSP音频处理管道

在图片中:复选框分别为每个编解码器激活不同的DSP功能。
激活每个编解码器的各种DSP功能并分别输出

一些高端设备配备了允许您调整DSP参数的软件,但是大多数便宜的耳机没有此功能,并且用户无法使用标准工具关闭声音的后处理。


设备的功能特性

当前版本的A2DP标准具有绝对音量控制功能,允许通过使用AVRCP协议使用特殊命令控制输出增益,而不是通过编程方式减小音频流本身的音量。 如果您更改了耳机上的音量,并且更改与手机上的音量不同步,则表明您的耳机或手机不支持此功能。 在这种情况下,始终以手机上的最大音量收听音乐,并使用耳机按钮调整实际音量是有意义的-信噪比会更好,音频质量应该更高。
在现实中,有悲伤的情况。 通过RealForce OverDrive D1耳机,SBC使用了强大的压缩扩音器,音量的增加导致静音声音的级别增加,响亮的音量不变(发生信号压缩)。 因此,有必要将计算机上的音量设置为大约一半,在这种情况下,几乎没有压缩效果。
根据我的观察,所有带有附加编解码器的耳机都支持绝对音量控制功能,这可能是编解码器认证的要求之一。

有些耳机支持同时连接两个设备 。 例如,这允许从计算机听音乐并从电话接听电话。 但是,您应该注意,在此模式下禁用了其他编解码器,并且仅使用SBC。

AVDTP 1.3延迟报告功能使耳机可以向实际播放声音的发送设备报告延迟。 这有助于在观看视频文件时调整音频与视频的同步:如果发生无线电拥塞,音频将不会落后于视频,但是相反,视频播放器会放慢视频的播放速度,直到音频和视频消失为止。再次同步。
许多耳机,Android 9+和带有PulseAudio 12.0+的Linux都支持该功能。 我不了解其他操作系统的支持。


通过蓝牙进行双工通信。 语音传输。

面向同步连接(SCO)及其增强版本面向增强同步连接(eSCO)是用于蓝牙语音传输的模式。 该模式允许您以对称的发送和接收速度严格按顺序传输声音和语音,而无需等待传输和重新发送数据包的确认。 这减少了无线电信道上音频传输的总体延迟,但是对每单位时间传输的数据量施加了严格的限制,并且不利地影响了音频质量。
使用此模式时,来自麦克风的声音和音频都以相同的质量传输到耳机。
HSP配置文件对数据本身的传输进行了标准化,该配置文件还描述了其他功能,例如,音量控制按钮的操作,听筒的摘机和挂断。
不幸的是,截至2019年,通过蓝牙进行的语音传输质量仍然很差,并且不清楚蓝牙SIG为什么对此不做任何事情。

摄录机
基本的语音传输编解码器CVSD在2002年实现了标准化,并得到所有双向蓝牙设备的支持。 它以8 kHz的采样频率提供音频传输,这相当于常规有线电话的质量。

在此编解码器中记录的示例

微信
额外的mSBC编解码器在2009年实现了标准化,2010年已有芯片将其用于语音传输。 mSBC得到各种设备的广泛支持。
这不是独立的编解码器,而是A2DP标准的常规SBC,具有固定的编码配置文件:16 kHz,单声道,位池26。

在此编解码器中记录的示例

虽然它不很出色,但是比CVSD好得多,尽管使用它通过Internet进行通信仍然不愉快,尤其是当您在游戏中使用耳机进行通信时-游戏声音也将以16 kHz的采样频率进行传输。

快速流
CSR决定进一步发展重用SBC的想法。 为了克服SCO协议的局限性并使用更高的比特率,CSR采取了另一种方式-他们在单向音频传输A2DP标准中增加了对两路SBC音频的支持,并将其称为“ FastStream”。

FastStream以212 kbps的比特率向扬声器传输44.1或48 kHz立体声。 16 kHz和72 kbps的比特率(比mSBC的比特率略好)用于从麦克风传输音频。 这些参数更适合用于在线游戏中的通信-游戏的声音和队友的音质都很高。

在此编解码器中录制的示例来自麦克风的 + 音频,与mSBC中的相同 )。

该公司提出了一个有趣的骇客,但是由于它与A2DP标准相矛盾,因此只有部分公司的发射器支持它(作为USB音频卡,而不是蓝牙设备),但没有收到支持蓝牙堆栈。 不过,支持FastStream的耳机的数量并不是那么少。

目前,FastStream支持仅以PaliRohár的Linux PulseAudio补丁的形式提供,该补丁未包含在主程序分支中。

aptX低延迟
令人惊讶的是,aptX Low Latency还支持双向音频,实现与FastStream相同的原理。
无法在任何地方使用编解码器的此功能-据我所知,在任何操作系统和任何蓝牙堆栈中均不支持低延迟解码。


蓝牙5,经典且低能耗

由于一个品牌下存在两个不兼容的标准,因此蓝牙的规格和版本存在很多混乱,这两种标准都被广泛用于不同的目的。

有两种不同的不兼容的蓝牙协议:蓝牙经典和蓝牙低功耗(LE,也称为蓝牙智能)。 还有第三种协议,Bluetooth High Speed,但它并不常见,并且不在家用电器中使用。

从蓝牙4.0开始,规格的更改主要集中在低功耗蓝牙上,而经典版本仅获得了较小的改进。

蓝牙4.2和蓝牙5之间的更改列表:
从v4.2到5.0的9变化

9.1新功能

蓝牙核心规范5.0版本中引入了几个新功能。 主要的改进领域是:
•插槽可用性掩码(SAM)
•LE的2 Msym / s PHY
•LE远程
•高占空比不可连接广告
•LE广告附加信息
•LE通道选择算法2
9.1.1 CSA5中添加的功能-集成在v5.0中
•更高的输出功率
来源: www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id = 421043 (第291页)

只有一项更改影响了Bluetooth 5规范内的Classic版本:支持插槽可用性掩码(SAM)技术,该技术旨在改善射频共享。 所有其他更改仅影响蓝牙LE(同样适用于更高的输出功率)。

所有音频设备仅使用Bluetooth Classic。 不能通过低功耗蓝牙连接耳机和扬声器。 没有使用LE传输音频的标准。 用于传输高质量音频的A2DP标准只能通过Bluetooth Classic使用,LE中没有等效的标准。

总结一下:仅由于协议的新版本而购买具有蓝牙5的音频设备是没有意义的。 蓝牙4.0 / 4.1 / 4.2在音频传输的上下文中将以相同的方式工作。
如果新耳机的发布提到由于蓝牙5而使半径增加了一倍并降低了功耗,那么您应该知道他们要么不了解自己,要么误导您。 难怪即使是蓝牙芯片制造商也混淆了这两种标准的区别,并且某些蓝牙5芯片仅支持LE的第五个版本,而将Classic用于4.2。

音频传输延迟

音频中的延迟(延迟)量取决于许多因素:音频库,蓝牙堆栈和回放设备本身中的缓冲区大小,编解码器的算法延迟。

简单编解码器(例如SBC,aptX和aptX HD)的延迟非常小,大约3-6毫秒,可以忽略不计,但是复杂编解码器(例如AAC和LDAC)会产生明显的延迟。 44.1 kHz的算法延迟AAC为60 ms。 LDAC —大约30毫秒(通过对源代码的粗略分析。我可能是错的,但不多。)

总延迟高度取决于播放设备,其芯片组和缓冲区。 在测试期间,我在不同的设备(使用SBC编解码器)上的传播时间为150到250毫秒。 如果我们假设支持aptX,AAC和LDAC附加编解码器的设备使用质量更好的组件和较小的缓冲区大小,我们将获得以下典型延迟值:

SBC:150-250毫秒
aptX:130-180毫秒
AAC:190-240毫秒
LDAC:160-210毫秒

让我提醒您:操作系统不支持aptX Low Latency,这就是为什么只有使用发射器+接收器或发射器+耳机/扬声器捆绑才可以获得较低延迟的原因,并且所有设备都必须支持此编解码器。


认证,徽标和设备的问题

如何区分高品质音频设备和廉价工艺品? 首先,在外观上!

廉价的中文耳机,扬声器和接收器具有:
  1. 包装盒和设备上没有“蓝牙”字样,通常由“无线”和“ BT”代替
  2. 没有蓝牙徽标 蓝牙标志 盒装或设备上
  3. 无蓝灯闪烁

缺少这些元素表示该设备尚未通过认证,这意味着它可能有问题或质量低劣。 例如,Bluedio耳机未通过蓝牙认证,并且不完全符合A2DP规范。 他们不会通过认证过程。

让我们看看其中的几种设备和包装盒:






这些都是未经认证的设备。 说明中可能带有徽标和“蓝牙”名称,但最重要的是,这些元素应出现在设备或包装盒本身上。

如果您的耳机或扬声器说“成功连接了Zee蓝牙功能”,这也不能很好地说明质量:



结论

蓝牙可以完全取代有线耳机吗? 可能但以降低语音质量为代价,声音传输的延迟增加,这在游戏中可能会令人烦恼,并且许多专有编解码器需要许可费并增加了智能手机和耳机的最终成本。

替代编解码器的市场营销非常强大:aptX和LDAC是人们期待已久的“过时和不良” SBC的替代品,而SBC远没有人们普遍认为的那么糟糕。

事实证明,可以绕过SBC上蓝牙堆栈的人为限制,从而使SBC与aptX HD相提并论。 我主动提出了针对LineageOS固件的补丁: 修改蓝牙堆栈以改善没有AAC,aptX和LDAC编解码器的耳机上的声音

有关编解码器的更多信息,请参见SoundGuysSoundExpert网站。

奖励: SBC参考编码器,A2DP比特流信息和测试文件 。 该文件以前曾公开发布在Bluetooth网站上,但现在仅对加入Bluetooth SIG的用户可用。

Source: https://habr.com/ru/post/zh-CN456182/


All Articles