Android设备作为A2DPconfiguration文件的接收者
基本上,我现在想要做的是使用Android设备作为A2DP接收器,当配对build立时,android会播放从发送器接收到的声音。 我担心,如果我使用STPconfiguration文件,可能会导致stream式传输延迟。 所以,我想使用A2DP,但是这可能使用Android设备作为A2DP的接收器? 以及如何做到这一点?
自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中 。 这使特定的用户界面。
现在你可以配对你的设备,并开始stream式传输。 不幸的是你会听到没有声音,虽然你会收到数据包。 原因是没有A2DP信宿的audio路由。 在这个补丁的提交信息中https://android-review.googlesource.com/#/c/98161/你可以find一个关于如何解决这个问题的示例实现。;
以下是这些更改的列表:
是。 有可能的。 我在JB里完成了。 Android内部使用Broadcomm的蓝牙“蓝牙”(Bluedroid)堆栈来进行蓝牙。 以前这个堆栈不支持A2DP接收器angular色(你提到的接收器)。 从棒棒糖版本开始,Bluedroid中添加了A2DP Sinkangular色configuration文件。 但是,它不能被框架/上层(应用程序)使用。 您需要在框架中进行更改以启用或“使用”它。 您可以参考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
并执行它(这个文件列表并不全面,但如果你有相关领域的经验,你可以弄清楚)。 当任何stream连接build立时,您将在a2dp状态机中获得回叫,并从那里开始一个线程,从“新”audio源读取已解码的PCM字节,并将其发送到媒体播放器。 SBC编解码器到PCM解码将在'bluedroid'sbc解码器层完成。
build立它,并将其闪光到您的手机,并享受音乐。
编辑:此外,您可能已经在Bluedroid堆栈中的A2DP SDPlogging做出更改,以宣传A2DP接收器angular色。