Android设备作为A2DP配置文件的接收器

时间:2015-01-04 08:23:58

标签: android bluetooth streaming audio-streaming a2dp

基本上,我现在要做的是使用Android设备作为A2DP接收器,当配对建立时,android播放从发射器接收的声音。我担心如果我使用STP配置文件,可能会导致流式传输延迟。所以,我想使用A2DP,但是这可能使用Android设备作为A2DP的接收器吗?怎么做?

3 个答案:

答案 0 :(得分:15)

自Android L以来,BlueDriod堆栈确实支持A2DP接收器,但默认情况下禁用它。

要启用它,请执行以下操作:

/* Enable bluetooth av sink. */
#define BTA_AV_SINK_INCLUDED TRUE
/external/bluetooth/bluedroid/include/bt_target.h中的

。 这使得蓝牙堆栈中的接收器支持。

此外,你必须做这个改变:

<!-- Enable sink support. -->
<bool name="profile_supported_a2dp_sink">true</bool>
/packages/apps/Bluetooth/res/values/config.xml中的

。这可以启用特定的UI。

现在您可以配对设备并开始流式传输。不幸的是,虽然你会收到数据包,但你听不到声音。原因是A2DP接收器没有音频路由。在此修补程序https://android-review.googlesource.com/#/c/98161/的提交消息中,您可以找到有关如何解决此问题的示例实现。

以下是这些更改的列表:

答案 1 :(得分:4)

是。有可能的。我在JB做过。 Android内部使用Broadcomm的“Bluedroid”堆栈进行蓝牙。以前这个堆栈不支持A2DP Sink Role(你提到的接收器)。从Lollipop版本开始,Bluedroid中添加了A2DP Sink角色配置文件。 但是,它不能被框架/上层(应用程序)使用。 您需要在框架中进行更改以启用它或“使用”它。 您可以参考Android源代码中的以下文件和相关文件来启用它。

audio.h - put a new audio source
audio_policy.conf - put a new input source for a2dp 'inputs'
AudioManager.java
AudioPolicyManagerBase.cpp
AudioService.java
AudioSystem.java
BluetoothA2dp.java
MediaRecorder.java
A2DPStateMachine.java

等。并实现它(这个文件列表不全面,但如果你有相关领域的经验,你可以弄明白)。 当建立任何流连接时,您将在a2dp状态机中获得回调,并从那里开始一个线程从“新”音频源读取解码的PCM字节并将其发送到您的媒体播放器。 用于PCM解码的SBC编解码器将在'bluedroid'sbb解码器层完成。

构建它并将其闪存到手机上并欣赏音乐。

编辑: 此外,您可能会对Bluedroid堆栈中的A2DP SDP记录进行更改,以宣传A2DP接收器角色。

答案 2 :(得分:2)

您可能无法在两部手机之间手动执行此操作,因为流式传输一台设备需要是A2DP接收器和其他其他A2DP源,手机通常只有源设备(可以流式传输到设备的流源) ,Sinks是耳机或蓝牙音箱。