需要了解 sending/receiveing 设备之间通过 A2DP 传输的音频

need idea on sending/receiveing audio over A2DP between android/non-android device

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

使用给定的代码 here,我设法让我的 phone 检测并与远程蓝牙设备配对,然后建立 A2DP 连接,发送 [= 的所有音频输出31=] 设备通过蓝牙连接到远程设备

我以前能够通过 RFCOMM 与同一个远程蓝牙设备进行这种双向数据通信(android phone 需要是发起通信的那个,但我做不到它通过远程设备,虽然我知道这是可能的)。一旦 RFCOMM link 建立,android 设备就可以向远程设备发送数据,也可以从它接收数据

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

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

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

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

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

回答您关于为什么耳机能够连接到 Android 的问题,那是因为耳机使用不同的配置文件 Headset profile (HSP),通常由耳机使用,或者 Handsfree profile (HFP)常用于汽车。两个配置文件都有两个方面:客户端和网关端(移动 phone)。这两个配置文件的音频质量被认为是语音质量。 8 或 16kHz 采样率和糟糕的编解码器。还有很多用于 answering/making 调用等的协议...我不确定您是否可以在没有活动连接到 phone 网络的情况下传输音频。

对于 A2DP 接收器支持 - 是的。有可能的。我在 Android JB 做过。 - 请阅读我的回复。