是否可以通过蓝牙流式传输音频?在我的研究中,我发现只能使用A2DP(Advanced Audio Distribution Profile)
. 每个安卓设备都支持A2DP吗?如果没有,是否可以使用蓝牙在两个安卓设备之间传输音频?请帮助我理解这一点。
我浏览了以下链接:
是否可以通过蓝牙流式传输音频?在我的研究中,我发现只能使用A2DP(Advanced Audio Distribution Profile)
. 每个安卓设备都支持A2DP吗?如果没有,是否可以使用蓝牙在两个安卓设备之间传输音频?请帮助我理解这一点。
我浏览了以下链接:
是否可以通过蓝牙传输音频?
下面的线程说它有可能在设备之间通过蓝牙流式传输音频,但在谷歌官方宣布我们已经修复了 N7 上的 a2dp 流式传输卡顿问题之前,它的成功率一直存在问号。下一个版本应该有修复。对不起这个问题。
使用 Galaxy Nexus 升级到 4.2 后,蓝牙音质受到影响
Nexus 7 Flo 的 Android 4.3 蓝牙音频质量修复
每个安卓设备都支持A2DP吗?
在Android 开发者网站上提到了支持兼容性,它是从它添加的API Level-11 with appropriate features.
但是我遇到了XDA 踏板,其中 OP 提到了问题Android 2.1
,这意味着它也支持以前的 api 级别,但 OP 面临问题。
希望理解起来有意义,我建议参考XDA 论坛以获取有关 A2DP 兼容性及其成功的更多信息。
您还可以通过不依赖于任何配置文件的基本 SCO 连接流式传输音频。但是,请注意 A2DP 是专为流媒体音乐开发的配置文件。因此,与 A2DP 相比,您自己制作的任何实现都会在质量上受到影响。
除非您将音乐流式传输到不支持 A2DP 的设备,否则我肯定会使用 A2DP。实际上,您唯一的其他选择是使用 SCO 链接。
我的观点是,如果 A2DP 不能正常工作,我们最好移到较低层,我们可以创建一个基本流,可以用于发送任何形式的日期。我成功通过蓝牙在 J2ME 设备之间发送字节流。
如果在两个设备上都安装一个应用程序是可以接受的,我有示例代码来创建一个蓝牙服务器和一个客户端通过套接字相互通信,一旦套接字建立,你可以向你发送音频流:)
以下是一些核心代码:
1)服务器设备:
// you can generate your own UUID and use it as an port to eatablish a socket
private static final UUID MY_UUID = UUID.fromString("20687DAD-B023-F19E-2F60-A135554CC3FD")
BluetoothServerSocket serverSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME_INSECURE, MY_UUID);
现在你有了 serverSocket,把它当作普通的 ServerSocket 使用:
BluetoothSocket socket = serverSocket.accept();
然后你可以从中获取并InputStream
发送音频流,就像OutputStream
BluetoothSocket
HttpConnection
2)客户端设备:
假设你已经得到了BluetoothDevice
// you should implement the method getBlutoothDevice
BluetoothDevice device = getBluetoothDevice();
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
尝试使用以下代码片段:
public class AudioStream extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String url = "http://www.example.mp3";
MediaPlayer mp = new MediaPlayer();
try {
mp.setDataSource(url);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.prepare();
mp.start();
} catch (Exception e) {
Log.i("Exception", "Exception in streaming = " + e);
}
}
}
真的很难做到这一点。但是我做了很多研究并找到了方法。有几个延迟、连接和根问题,但显然有效。为此,您需要在服务器上安装“AirAudio”应用程序和“AllConnect”接收器。然后您在主屏幕上打开 AirAudio,然后打开 AllConnect,按您的设备,然后按源并选择服务器,然后选择流媒体 mp3。问题是延迟非常大,另一个缺陷是只传输android服务器系统的声音,你应该在手机上拥有root权限......我还尝试了流媒体的接收器是VLC,更少延迟但仍然所以它很不舒服。