BlueZ 与 Bluedroid 蓝牙堆栈

Posted

技术标签:

【中文标题】BlueZ 与 Bluedroid 蓝牙堆栈【英文标题】:BlueZ vs Bluedroid bluetooth stack 【发布时间】:2013-12-22 19:49:30 【问题描述】:

BlueZ 有很多文档。同样,我了解 BlueZ 支持 A2DP 接收器支持。同时,通过修改其中的audio.conf文件,可以使android设备充当A2DP接收器。

我还了解到,从 android 4.2 开始,BlueZ 堆栈被 Broadcom 的 Bluedroid 堆栈取代。我搜索了很多关于 Bluedroid 堆栈的信息。但是我没能找到很多相同的细节。

希望有人可以帮助我解决以下疑问。

1)。 Bluedroid 是否支持 A2DP 接收器?

2)。 audio.conf 文件是否可用于具有 bluedroid 堆栈的设备?

3)。我将通过直接调用 BlueZ 堆栈的 API 来为 Android 设备编写 A2DP 接收器支持。但我的最后一个问题是 Bluedroid 堆栈是否也可以使用相同的功能? Hope Bluedroid 只是 BlueZ 的扩展。

请帮忙。

【问题讨论】:

【参考方案1】:

除了上述答案之外,自 Android L 以来,引入了接收器支持,但仍未完成代码的音频流部分。但是,我发现 this 更改列表,其中 a2dp 接收器实现已完成,并且可以通过接收器设备播放媒体,如更改列表的提交消息中所述:

蓝牙 A2DP 接收器

此更改实现了 A2DP 接收器功能。如果安卓设备是 一个接收器角色,它可以通过BT接收来自手机的音乐。这个功能可以 适用于多媒体车载套件、机顶盒和家庭HiFi。放 BLUETOOTH_A2DP_SINK := 在 BoardConfig.mk 中为 true 以启用 A2DP 接收器 bluedroid 中的功能。

您还需要在框架中进行以下更改才能将音乐路由到 扬声器。 https://android-review.googlesource.com/#/c/97832/ https://android-review.googlesource.com/#/c/97853/ https://android-review.googlesource.com/#/c/97833/ https://android-review.googlesource.com/#/c/98130/ https://android-review.googlesource.com/#/c/98131/

此更改不包括 SBC 解码器。你可以得到一个SBC解码器 来自 github.com/tieto/sbc-decoder。

万事如意!!!

【讨论】:

更进一步,问题是this patch 适用于andoroid 4.4.*。补丁中的更改已(可能部分)应用于 Android L【参考方案2】:

正如 user987500 所说,android L 支持 A2DP sink,只需稍作修改,您的设备就可以从 A2DP src 更改为 sink。 但要确保一台设备只能支持一个角色,可以通过xml文件进行配置。

【讨论】:

只做微小的修改你能说得更具体一点吗?【参考方案3】:

Android Lollipop (5.0) 现在支持 A2DP Sink 角色。他们修改了 Bluedroid 源代码以支持相同的功能。要完全支持,需要修改audio HAL(audio.h)、AudioPolicyManagerBase.cpp和audio_policy.conf以及Audio Manager、A2DPStateMachine等。

【讨论】:

您能否指出任何有关如何完全支持A2DP sink 角色的指南?【参考方案4】:

Bluedroid 是 Broadcom 提供的堆栈,现已在 android 中开源。 Bluedroid 在任何方面都与 bluez 无关,它与 bluez 相比几乎没有优势(我与此不同)。

[1]。 Bluedroid 目前不支持 a2dp 接收器,根据可用的代码 source code 只有 a2dp 源支持可用

[2]。 Audio.conf 文件用于 bluez 堆栈,它不是 bluedroid 的一部分

[3]。直接调用Bluez API——我想你会使用dbus调用,但是bluedroid不支持dbus方法调用,它实现了回调机制,所以它不起作用,bluedroid不是bluez的扩展。

【讨论】:

那是我得到的最好的答案之一。太感谢了。解决了我所有的困惑:) 我还想知道一件事。从 android 4.3 开始,整个 BlueZ 堆栈被 Bluedroid 堆栈取代?或两者都以支持向后兼容性的方式集成。我不知道这个问题在任何意义上是否有意义。但我只是想确认这一点,继续我的研究:) 我认为如果某些供应商还想继续使用 bluez,他可以通过 android build 中的配置更改来做到这一点,但我仍然不清楚 @ashish,您知道在上述任一堆栈中同时支持多个 a2dp 流吗? @JRC :根据 A2DP 规范,“该配置文件不支持同步的点对多点分发。”但我相信您可以在 bluez 中进行自定义实现——检查并在 bluez IRC 中询问并让我们所有人都知道 :)

以上是关于BlueZ 与 Bluedroid 蓝牙堆栈的主要内容,如果未能解决你的问题,请参考以下文章

使用 DBus 和 Bluez 将数据写入蓝牙设备

Linux over BlueZ下的C++蓝牙耳机

蓝牙:如何使用 Bluez 创建一个套接字以连接到具有特定 UUID 的服务?

Bluez 架构:解释这个架构

Android BlueDroid(蓝牙协议栈)

Android BlueDroid:BlueDroid蓝牙开启过程init