4

我需要能够通过蓝牙发送和接收音频,似乎 A2DP 就是这样做的

使用这里给出的代码,我设法让我的手机检测并与远程蓝牙设备配对,然后建立一个 A2DP 连接,将安卓设备的所有音频输出通过蓝牙发送到远程设备

我以前能够通过 RFCOMM 与同一个远程蓝牙设备进行这种两种方式的数据通信(虽然安卓手机需要是发起通信的一方,但我无法通过远程设备进行,尽管我知道这是可能的)。一旦 RFCOMM 链接建立,android 设备就可以向远程设备发送数据,也可以从远程设备接收数据

我现在需要的是类似的东西,但对于音频(最好使用 A2DP,但我愿意使用其他任何东西,只要它能完成工作)。在四处窥探时,我得到提示,无法通过 A2DP 在手机上接收音频数据(至少是一个无根的普通数据,生根不是我的选择)(例如,请参见此处)。但我也见过允许完全通过蓝牙拨打电话的耳机(嗯,实际上是无线的,我假设它必须是蓝牙)。例如,来电时,您只需按下蓝牙耳机上的一个按钮,即可通话和收听对方。如果手机不能用作音频接收器,那么这样的耳机是如何做到的呢?

我需要一些关于如何编写 android 应用程序以通过蓝牙发送和接收音频数据的想法(为简单起见,让我们认为它类似于Bluechat 示例程序,但涉及音频而不是文本)。有可能(通过java)吗?只能通过NDK吗?市面上的设备是如何做到的?它与 A2DP 的配置文件不同吗?

PS:我的测试设备是带有 Gingerbread 的 Samsung Galaxy 2(手机)和带有 KitKat 的 Asus Nexus 7(平板电脑)。顺便说一句,远程蓝牙设备(它是一个开发板)附带一个示例项目,该项目应该将板变成 A2DP 音频源。如果我在板上运行这个示例项目,使用手机和平板电脑的内置蓝牙设置,我可以与远程板配对,但安卓设备不接收任何音频。

4

2 回答 2

3

有两种不同的 A2DP 配置文件A2DP sourceA2DP sink. A2DP sourceAndroid 支持该配置文件,因此您可以将音乐从设备流式传输到蓝牙扬声器等接收器。据我所知,该A2DP sink配置文件未启用,这就是为什么您无法将音乐流式传输到您的手机并让它充当扬声器。我只是在一段时间前用谷歌搜索过才知道这一点,所以事情可能已经改变了。

可以A2DP sink通过编辑/etc/bluetooth/audio.conf和重启手机来启用配置文件。不幸的是,这具有禁用配置文件的副作用,A2DP source因此不能在广泛分布的应用程序中使用。另一个缺点是没有太多的 java 软件堆栈可以使用该配置文件,因此您必须做很多工作才能使事情顺利进行。

要回答您关于为什么耳机能够连接到 Android 的问题,那是因为耳机使用不同的配置文件,称为Headset profile (HSP),通常由耳机使用,或Handsfree profile (HFP)通常用于汽车。两种配置文件都有两个方面:客户端和网关端(手机)。这两个配置文件的音频质量都被认为是语音质量。8 或 16kHz 采样率和蹩脚的编解码器。还有很多用于接听/拨打电话等的协议...我不确定您是否甚至可以在没有与电话网络的有效连接的情况下传输音频。

于 2015-01-14T02:02:12.480 回答
1

对于 A2DP 接收器支持 - 是的。有可能的。我已经在 Android JB 中完成了。 Android 设备作为 A2DP 配置文件的接收器- 请阅读我的回复。

于 2015-03-06T05:50:08.310 回答