如何确定我的手机支持/当前正在使用哪些A2DP编解码器?


24

蓝牙的音频配置文件A2DP支持多个编解码器。所有设备都必须支持SBC(子带编解码器),然后它们才能支持其他“可选编解码器”(例如MP3和AAC)或“非A2DP”编解码器(例如apt-X)。

当然,如果接收器也不支持这些编解码器,那么这两种设备都将退回到SBC。

  1. 如何找出我的硬件/ ROM支持的编解码器?
  2. 如何找出当前使用的编解码器?(例如,如果它直接传递MP3 / AAC文件而不进行重新编码,也许这也取决于音轨)

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

Answers:


10

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

假设您具有必需的设置(root〜4.2.2或更高版本),请执行以下步骤:

  1. 将手机与感兴趣的A2DP设备配对
  2. 禁用手机上的蓝牙
  3. 编辑此文件:/etc/bluetooth/bt_stack.conf,将BtSnoopLogOutput设置从其默认值false更改为true。为此,我使用了ES注释编辑器,该编辑器在启用“根浏览器”设置后从ES文件资源管理器启动。
  4. 启动CatLog,并启用所有日志记录类型
  5. 在手机上启用蓝牙
  6. 与输出设备配对后,与您选择的播放器一起播放一段音频(我使用Apollo)。十秒钟左右应该足够了。
  7. 再次禁用蓝牙
  8. 停止CatLog的日志记录并将其日志文件保存到SD卡
  9. [重要!]编辑bt_stack.conf,将BtSnoopLogOutput更改为false。
  10. 将SD卡(/sdcard/btsnoop_hci.log)中的BT捕获以及保存的CatLog文件复制到装有Wireshark当前副本的计算机上。
  11. 将捕获文件加载到Wireshark中,并将Wireshark显示过滤器设置为“ btavdtp”(无引号)。现在,您将仅看到一些数据包,查找输出设备对AVDTP GetCapabilities查询的答复,然后您将得到答案。

您还可以将捕获时间戳记与CatLog日志的时间戳记对齐,以查找提示性的日志条目。我发现了一对夫妇,但巧妙地忘记了将它们包含在本帖子所基于的注释中。

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


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

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

1
因此,对Discover返回的三个音频接收器的响应。到的响应GetCapabilitiesACP SEID [2 - Audio Sink]包括Service: Media Codec - Audio MPEG-1,2 Audio其中有MP3: True。我已将捕获的日志文件上传到github
dvim 2014年

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

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

8

从源头来看,至少有4个编解码器:SBC(强制性),MP3(MPEG12),AAC(MPEG24)和Sony的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编解码器的有限支持”。

./android/external/bluetooth/bluez/ChangeLog:
ver 3.25:
    Add limited support for Handsfree profile.
    Add limited support for MPEG12/MP3 codec.

另请参见v3.25 公告。对MP3的支持似乎取决于Android上不可用的gstreamer,因此我只是猜测SBC是A2DP引导的唯一选择。

PS:由于专利/许可问题(包括Linux),大多数A2DP设备似乎都不支持MP3 / AAC。


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

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

7

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


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

4

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

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

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

  1. 首先在android设备上关闭蓝牙(我将其称为“电话”)。

  2. 在“开发人员选项”下打开“蓝牙HCI监听日志”。

  3. 打开手机上的蓝牙,然后将其连接到蓝牙接收器(我将其称为“接收器”)。此步骤假定接收机先前已与电话配对。

  4. 在手机上播放音乐(最好是未压缩的WAV或FLAC文件)。您只需要十秒钟。(可能更少)

  5. 关闭手机上的蓝牙。

  6. 关闭蓝牙HCI监听日志

  7. 将文件btsnoop_hci.log(我在/ sdcard / Android / Data /中找到)传输到您的计算机。在计算机上运行wireshark,然后打开文件btsnoop_hci.log

  8. 筛选“ 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格式发送,等等?
endlith '02

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

我没有写答案
endolith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.