【问题标题】:need idea on sending/receiveing audio over A2DP between android/non-android device需要在 android/non-android 设备之间通过 A2DP 发送/接收音频的想法
【发布时间】:2023-03-15 22:07:01
【问题描述】:

我需要能够通过蓝牙发送和接收音频,似乎 A2DP 就是这样做的

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

我以前能够通过 RFCOMM 与同一个远程蓝牙设备进行这种两种方式的数据通信(虽然安卓手机需要是发起通信的设备,但我无法通过远程设备进行,尽管我知道它是可能的)。一旦 RFCOMM 链接建立,android 设备就可以向远程设备发送数据,也可以从远程设备接收数据

我现在需要的是类似的东西,但用于音频(最好使用 A2DP,但我愿意使用其他任何东西,只要它能完成工作)。在窥探 SO 时,我得到提示,无法通过 A2DP 在手机上接收音频数据(至少是一个无根的普通数据,root 对我来说不是一种选择)(例如,参见 @987654322 @)。但我也见过允许完全通过蓝牙拨打电话的耳机(嗯,实际上是无线的,我假设它必须是蓝牙)。例如,来电时,您只需按下蓝牙耳机上的一个按钮,即可通话和收听对方。如果手机不能用作音频接收器,那么这样的耳机是如何做到的呢?

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

PS:我的测试设备是带有 Gingerbread 的 Samsung Galaxy 2(手机)和带有 KitKat 的 Asus Nexus 7(平板电脑)。顺便说一句,远程蓝牙设备(它是一个开发板)附带一个示例项目,该项目应该将板变成 A2DP 音频源。如果我在板上运行这个示例项目,使用手机和平板电脑的内置蓝牙设置,我可以与远程板配对,但安卓设备没有收到任何音频。

【问题讨论】:

    标签: android audio bluetooth a2dp


    【解决方案1】:

    有两种不同的 A2DP 配置文件,A2DP sourceA2DP sink。 Android 支持A2DP source 配置文件,因此您可以将音乐从设备流式传输到蓝牙扬声器等接收器。据我所知,A2DP sink 配置文件未启用,这就是为什么您无法将音乐流式传输到您的手机并让它充当扬声器。我只是在一段时间前用谷歌搜索过才知道这一点,所以事情可能已经改变了。

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

    回答您关于耳机为何能够连接到 Android 的问题,这是因为耳机使用不同的配置文件,称为 Headset profile (HSP),耳机通常使用,或 Handsfree profile (HFP),通常用于汽车。两种配置文件都有两个方面:客户端和网关端(手机)。这两个配置文件的音频质量都被认为是语音质量。 8 或 16kHz 采样率和蹩脚的编解码器。还有很多用于接听/拨打电话等的协议...我不确定您是否甚至可以在没有与电话网络的有效连接的情况下传输音频。

    【讨论】:

    • 质量不是那么重要,只要我能在android设备和远程设备之间传输一些语音音频。我认为远程设备也支持 HFP 和 HSP,但我现在所做的似乎是 a2dp。这究竟是如何工作的?它是否使用我的手机尝试连接的任何配置文件?或者这样的事情是不可能的,我必须找到一种方法来修改远程设备中的代码,以便它专门寻找 HFP 或 HSP 连接尝试?是否有任何示例程序(android 端)显示如何使用它们?
    • cat audio.conf 在 adb shell 上显示权限被拒绝。我想这需要root,而root不是我的选择
    • @user13267。关于如何启动连接有很多细节,但总的来说,我认为免提设备(汽车或耳机)在检测到网关时会启动与网关的连接。它会定期进行扫描,然后在找到配对设备时启动。我认为该协议将允许任何一种方式。至于确定特定设备支持哪些配置文件,您需要阅读 SDP(服务发现协议)。
    【解决方案2】:

    对于 A2DP 接收器支持 - 是的。有可能的。我已经在 Android JB 中完成了。 Android device as a receiver for A2DP profile - 请阅读我的回复。

    【讨论】:

      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 2015-03-02
      • 2013-03-26
      相关资源
      最近更新 更多