蓝牙的音频配置文件A2DP支持多个编解码器。所有设备都必须支持SBC(子带编解码器),然后它们才能支持其他“可选编解码器”(例如MP3和AAC)或“非A2DP”编解码器(例如apt-X)。如果接收器也不支持它们,则实际上不会使用它,在这种情况下,两个设备都将退回到SBC。
如何找出当前使用的编解码器? (例如,如果它直接传递MP3 / AAC文件而不进行重新编码,则可能也取决于曲目)


评论

本文说:“ Android用户很幸运,因为现代的Android手机确实支持AptX。与Windows不同,甚至可以检查连接是否使用AptX!”但是没有任何说明。

#1 楼

在我的Cyanogen 10.1手机(AOSP 4.2.2)上,可以捕获蓝牙流量。然后,您可以将此捕获内容加载到Wireshark中,并查看协商阶段,以确定配对的音频输出设备支持哪些编解码器。不确定哪些操作系统支持此功能:当我第一次使用此方法时,它声称仅支持4.4以上版本,但Doubleshot上的CM显然不支持。 :-)

假设您具有必需的设置(植根于4.2.2或更高版本),请按照以下步骤操作:


将手机与A2DP配对感兴趣的设备
禁用手机上的蓝牙
编辑此文件:/etc/bluetooth/bt_stack.conf,将BtSnoopLogOutput设置从其默认值false更改为true。为此,我使用ES Note编辑器,该编辑器在启用“根浏览器”设置后从ES File Explorer启动。
启动CatLog,启用所有日志记录类型
配对后在手机上启用蓝牙
在输出设备上,用您选择的播放器播放一段音频
(我使用Apollo)。大约需要十秒钟

再次禁用蓝牙
停止CatLog的记录并将其日志文件保存到SD卡中
[重要!]编辑bt_stack.conf,更改BtSnoopLogOutput返回false。
从SD卡(/sdcard/btsnoop_hci.log)复制BT捕获,并与保存的CatLog文件一起复制到具有Wireshark当前副本的计算机上。已安装。
将捕获文件加载到Wireshark中,并将Wireshark
显示过滤器设置为“ btavdtp”(无引号)。现在,您将仅看到一些
数据包,查找输出设备对AVDTP的答复
GetCapabilities查询,您将得到答案。使用CatLog日志的时间戳捕获捕获的时间戳,以查找提示性的日志条目。我发现了一对夫妇,并巧妙地忘记了将它们包含在本帖子所基于的注释中。

一旦有更多时间,我希望将这相当冗长的步骤减少到一个应用程序,但是不确定是否有可能,而且暂时还没有时间。同时,欢迎对上述过程进行改进的建议。

评论


谢谢。这很棒。我在CatLog日志中没有发现与功能相关的任何内容。无论如何,请在运行CM 4.4.2的Moto G(2013)和LG HBS-730耳机上进行尝试。日志中没有apt-X,因为CM没有专用的库。

–dvim
2014年11月23日在17:54

谢谢@Martynas,很高兴知道。它包括对mp3的支持吗?我想知道我的手机支持mp3的测试目标是什么?不幸的是,车载收音机并非如此,我还没有找到任何(!)产品说明其A2DP编解码器支持。关于CatLog,我不认为实际的编解码器列表会在其中出现那么多可用来搜索源代码的提示性消息。另一天..

–ewedel
2014-11-25 6:47



因此,对“发现”的响应返回了三个音频接收器。对ACP SEID [2-音频接收器]的GetCapabilities的响应包括服务:媒体编解码器-音频MPEG-1,2,具有MP3的音频:True。我已将捕获的日志文件上传到github。

–dvim
2014年11月25日10:42

再次感谢@Martynas。即使730的评测更好,还是抓住了LG HBS-750进行测试。与730相同的编解码器套件。已分叉您的存储库,并在此处添加了另一个捕获。不幸的是,在我们的两个记录中,手机都选择使用SBC而不是mp3。不知道您使用了哪种媒体文件类型,但是我的CM 4.2.2测试使用了128kb / s的VBR mp3(为了避免增加BT带宽,故意使用小的比特率)。开始认为ce4在许可问题上可能是正确的。

–ewedel
15年1月18日在11:03

/etc/bluetooth/bt_stack.conf的整理似乎没有用,但是我在开发人员设置中设置了完全相同的设置,并且有效。感谢您的回答,我设法发现Parrot Zik 2大部分时间都在使用SBC。

–零
16年6月22日在9:35

#2 楼

从源头来看,至少有4个编解码器:SBC(强制性),MP3(MPEG12),AAC(MPEG24)和索尼的ATRAC。

./android/external/bluetooth/bluez/audio/a2dp.h:  
#define A2DP_CODEC_SBC          0x00
#define A2DP_CODEC_MPEG12       0x01
#define A2DP_CODEC_MPEG24       0x02
#define A2DP_CODEC_ATRAC        0x03


基础软件是linux的“ bluez”堆栈。它支持SBC并具有有限的MP3功能。

v3.25(2009?)的变更日志显示:“添加对MPEG12 / MP3编解码器的有限支持”。 br />
另请参阅v3.25公告。 MP3支持似乎取决于Android上不可用的gstreamer,因此我只能猜测SBC是A2DP引导的唯一选择。专利/许可问题(包括Linux)。

评论


这些是3个可选的编解码器,是的,或者它可以使用其他使用apt-X的编解码器,例如Galaxy S III。我以为编码是由硬件提供的,但是? Android可以播放MP3,所以我怀疑是否存在任何专利限制。

– Endolith
2012年7月24日在21:49



我认为SBC在Android设备中没有专用的硬件编码器。它在计算上适中,所以我猜它是在软件中完成的。至少有资料表明。 PS:我在看的是Cyanogenmod的消息源,而不是HTC或Samsung的消息源。 PS2:我的意思是另一侧的音频接收器设备缺少mp3 / aac(耳机等)

–ce4
2012年7月24日在22:03



#3 楼

对于Nexus 4(5.0.1)或Nexus 7(2012)(4.4.4)设备,可以使用开发人员模式获取btsnoop_hci.log。 “启用蓝牙HCI监听日志”。无需根设备。
这两个设备似乎都不提供aptx。
我用Moto Stream(无aptx)和Philips AEA2500(带aptx)进行了测试。

评论


我使用的是CM 12.1,我也可以使用这种药水。也许最近所有手机上都有它。谢谢。

–pedro_sland
15/12/22在9:42

#4 楼

在许多情况下,您不需要执行此过程,因为valdikss现在可以在他的网站上跟踪许多贡献的结果

https://btcodecs.valdikss.org.ru/codec-compatibility/
https://btcodecs.valdikss.org.ru/

如果找不到btsnoop_hci.log文件,请尝试此处发布的解决方案:

https ://stackoverflow.com/questions/28445552/bluetooth-hci-snoop-log-not-generation/30352487#30352487

一旦找到btsnoop_hci.log,请从上一步中的第7步开始下面的答案。

上一个答案:
[此答案的信用主要归于ewedel,后者使用Wireshark阐明了答案在btsnoop_hci.log文件中;和prittstift69,用于共享创建此日志文件的简便方法。]

这是一个新手友好的分步教程,总结了已经给出的答案,并对我的结果进行了一些解释。

如prittstift69和其他提到的那样,您可以在“开发人员”选项下“启用蓝牙HCI监听日志”。无需遵循ewedel建议的更为复杂的方法。


首先在Android设备上关闭蓝牙功能(我将其称为“电话”)。
在开发人员选项下打开Bluetooth HCI监听日志。
在电话上打开Bluetooth并将其连接到Bluetooth接收器(我将其称为“接收器”)。此步骤假定接收机先前已与电话配对。
在手机上播放音乐(最好是未压缩的WAV或FLAC文件)。您只需要十秒钟。 (甚至更少)
关闭手机上的蓝牙。
关闭Bluetooth HCI监听日志
将文件btsnoop_hci.log(我在/ sdcard / Android / Data /中找到)传输到您的计算机。在计算机上运行wireshark,然后打开文件btsnoop_hci.log
筛选“ btavdtp”(无引号)从电话搜索到接收方的消息“已发送命令-SetConfiguration ....”。这是电话发送给接收方的消息,具有用于此音频的最终配置握手完成后。 “信息”字段中的文本将告诉您最终的配置是什么。

[SBC]如果是SBC,则可能想知道位池是什么。为此,请删除btavdtp过滤器,然后查找带有协议SBC的消息,然后单击它。在下面的“详细信息”部分中,展开“蓝牙SBC编解码器”信息。然后展开任何(或全部)框架数据。在那里,它应该清楚地显示该框架使用的位池。如果是35,则很有可能您的采样率为44.1 kHz,您正在使用“联合立体声”并使用“中等质量” SBC音频配置文件(http://soundexpert.org/news/-/blogs/bluetooth-audio -quality-a2dp)。压缩音频的比特率则为229 kbit / sec SBC,在Sound Expert的测试(http://soundexpert.org/encoders-224-kbps)中得分为4.68,与mp3大约110-130 kbit / sec相当。

[APT-X]如果它是APT-X,则您的电话和接收器都支持APT-X,这就是它所使用的。假设16位44.1kHz,编解码器以352kbits / s的速度运行。

评论


“理想情况下是未压缩的WAV或FLAC文件”您是否不想播放MP3来查看其是否以MP3格式发送,等等?

– Endolith
17年2月20日在14:44

仅当您的目标是查看A2DP双方是否都支持mp3时(一个有效的问题)。但是,我的经验是,双方对mp3的支持都很罕见(我从未在任何设备上看到它,并且已经有很多)。因此,至少在Android设备上,最可能的A2DP编解码器选项是SBC和APTX。播放未压缩的音频文件会强制电话重新编码。

– klaberte
17年2月20日在16:53

我没有写答案

– Endolith
17年2月20日在17:23