蓝牙的音频配置文件A2DP支持多个编解码器。所有设备都必须支持SBC(子带编解码器),然后它们才能支持其他“可选编解码器”(例如MP3和AAC)或“非A2DP”编解码器(例如apt-X)。
当然,如果接收器也不支持这些编解码器,那么这两种设备都将退回到SBC。
- 如何找出我的硬件/ ROM支持的编解码器?
- 如何找出当前使用的编解码器?(例如,如果它直接传递MP3 / AAC文件而不进行重新编码,也许这也取决于音轨)
蓝牙的音频配置文件A2DP支持多个编解码器。所有设备都必须支持SBC(子带编解码器),然后它们才能支持其他“可选编解码器”(例如MP3和AAC)或“非A2DP”编解码器(例如apt-X)。
当然,如果接收器也不支持这些编解码器,那么这两种设备都将退回到SBC。
Answers:
在我的Cyanogen 10.1手机(AOSP 4.2.2)上,可以捕获蓝牙流量。然后,您可以将此捕获内容加载到Wireshark中,并查看协商阶段,以确定配对的音频输出设备支持哪些编解码器。不确定哪些操作系统支持此功能:当我第一次使用此方法时,它声称仅支持4.4以上版本,但Doubleshot上的CM显然不支持。:-)
假设您具有必需的设置(root〜4.2.2或更高版本),请执行以下步骤:
您还可以将捕获时间戳记与CatLog日志的时间戳记对齐,以查找提示性的日志条目。我发现了一对夫妇,但巧妙地忘记了将它们包含在本帖子所基于的注释中。
一旦有更多时间,我希望将这相当长的步骤减少到一个应用程序上,但是不确定是否有可能,而且暂时还没有时间。同时,欢迎对上述过程进行改进的建议。
Discover
返回的三个音频接收器的响应。到的响应GetCapabilities
为ACP SEID [2 - Audio Sink]
包括Service: Media Codec - Audio MPEG-1,2 Audio
其中有MP3: True
。我已将捕获的日志文件上传到github。
从源头来看,至少有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。
对于Nexus 4(5.0.1)或Nexus 7(2012)(4.4.4)设备,可以使用开发人员模式获取btsnoop_hci.log。“启用蓝牙HCI监听日志”。无需根植设备。似乎两个设备都不提供aptx。我用Moto Stream(无aptx)和飞利浦AEA2500(有aptx)对此进行了测试。
[此答案的信用主要归于ewedel,后者使用Wireshark阐明了答案在btsnoop_hci.log文件中;和prittstift69,用于共享创建此日志文件的简便方法。
这是一个新手友好的分步教程,总结了已经给出的答案,并对我的结果进行了一些解释。
如prittstift69和其他提到的那样,您可以在“开发人员”选项下“启用蓝牙HCI监听日志”。无需遵循ewedel建议的更为复杂的方法。
首先在android设备上关闭蓝牙(我将其称为“电话”)。
在“开发人员选项”下打开“蓝牙HCI监听日志”。
打开手机上的蓝牙,然后将其连接到蓝牙接收器(我将其称为“接收器”)。此步骤假定接收机先前已与电话配对。
在手机上播放音乐(最好是未压缩的WAV或FLAC文件)。您只需要十秒钟。(可能更少)
关闭手机上的蓝牙。
关闭蓝牙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的速度运行。