在Android /非Android设备之间通过A2DP发送/接收音频的想法

我需要能够通过蓝牙发送和接收音频,看来A2DP就是做到这一点的东西

使用here给出的代码,我设法让手机检测到远程蓝牙设备并与之配对,然后建立A2DP连接,该设备通过蓝牙将android设备的所有音频输出发送到远程蓝牙设备.

我以前能够通过RFCOMM与同一个远程蓝牙设备进行这种双向数据通信(尽管Android手机必须是启动通信的设备,尽管我知道有可能通过远程设备进行通信).建立RFCOMM链接后,Android设备可以将数据发送到远程设备,以及从远程设备接收数据

我现在需要的是类似的东西,但是对于音频(最好使用A2DP,但只要可以完成工作,我愿意使用其他任何东西).在窥探SO的同时,我得到的提示是不可能通过A2DP在电话上接收音频数据(至少是无根的普通对象,对我来说不是生根的选择)(例如,参见here).但是我也看到过头戴式耳机可以完全通过蓝牙拨打电话(嗯,实际上,我假设它一定是蓝牙).例如,对于来电,您只需按一下蓝牙耳机上的一个按钮,即可通话和收听对方.如果电话不能用作音频接收器,那么如何使用此类耳机?

我需要一些有关如何编写一个可通过蓝牙发送和接收音频数据的Android应用程序的想法(为简单起见,我们将其视为类似于Bluechat sample program,但涉及音频而不是文本).是否有可能(通过java)?是否只能通过NDK进行?市场上的设备如何做到这一点?它与A2DP是否不同?

PS:我的测试设备是带有姜饼的Samsung Galaxy 2(手机)和带有KitKat的Asus Nexus 7(平板电脑).附带地,远程蓝牙设备(它是一个开发板)带有一个示例项目,该示例项目应将开发板变成A2DP音频源.如果我使用手机和平板电脑的内置蓝牙设置在开发板上运行此示例项目,则可以与远程开发板配对使用,但android设备不会收到任何音频.

解决方法:

有两个不同的A2DP配置文件,A2DP源和A2DP接收器. Android支持A2DP源配置文件,因此您可以将音乐从设备流式传输到接收器,例如蓝牙扬声器.据我所知,未启用A2DP接收器配置文件,这就是为什么您无法将音乐流式传输到手机并使其充当扬声器的原因.我仅在大约一段时间前通过Google才知道这一点,所以情况可能已经改变.

可以通过编辑/etc/bluetooth/audio.conf并重新启动手机来启用A2DP接收器配置文件.不幸的是,这具有禁用A2DP源配置文件的副作用,因此不能在广泛分布的应用程序中使用.另一个缺点是,没有太多的Java软件堆栈可用于处理该概要文件,因此您必须做很多工作才能使工作进展顺利.

为了回答您为什么耳机能够连接到Android的问题,这是因为耳机使用了耳机常用的另一个配置文件,即耳机配置文件(HSP)或汽车中常用的免提配置文件(HFP).这两个配置文件都有两个方面:客户端和网关(移动电话).这两个配置文件的音频质量都被认为是语音质量. 8或16kHz采样率和糟糕的编解码器.还有很多用于接听/拨打电话的协议,等等…我不确定在没有有效连接到电话网络的情况下,是否可以传输音频.

上一篇:【Spark Summit East 2017】使用Spark进行时间序列分析


下一篇:如何在Android中以编程方式启用或禁用蓝牙配置文件?