繁体   English   中英

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

[英]Android device as a receiver for A2DP profile

基本上,我现在要做的是使用Android设备作为A2DP接收器,当配对建立时,android播放从发射器接收的声音。 我担心如果我使用STP配置文件,可能会导致流式传输延迟。 所以,我想使用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中 这启用了特定的UI。

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

以下是这些更改的列表:

是。 有可能的。 我在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'sbc解码器层完成。

构建它并将其闪存到您的手机并享受音乐。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM