如何通过蓝牙将音频从一个Android设备流式传输到另一个Android设备?

时间:2013-05-28 10:11:03

标签: android bluetooth audio-streaming android-bluetooth a2dp

是否可以通过蓝牙传输音频?在我的研究过程中,我发现只能使用A2DP(Advanced Audio Distribution Profile)。每个Android设备都支持A2DP吗?如果没有,是否可以使用蓝牙在两个Android设备之间传输音频?请帮我理解这一点。

我查看了以下链接:

5 个答案:

答案 0 :(得分:11)

  

是否可以通过蓝牙传输音频?

下面的一些帖子说它可能在设备之间通过蓝牙传输音频,但是在谷歌官方宣布We have fixed the a2dp streaming stutter problem on N7. The next release should have the fix. Sorry about the problem.

之前,其成功率存在问号

Fix for poor A2DP quality on 4.2.2

Bluetooth sound quality suffer after upgrade to 4.2 with Galaxy Nexus

Android 4.3 Bluetooth Audio Quality Fix for Nexus 7 Flo

  

每个Android设备都支持A2DP吗?

Android developers site提到支持兼容性,API Level-11 with appropriate features.已添加Android 2.1但我遇到了XDA tread,其中OP提及{{1}}中的问题,意味着它也支持以前的api级别但OP面临问题。

希望理解有意义,我建议推荐XDA forum以获取有关A2DP兼容性及其成功的更多信息。

答案 1 :(得分:1)

我认为,如果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获取OutputStreamBluetoothSocket并发送音频流,就像HttpConnection

一样

2)客户端设备:

假设您已获得BluetoothDevice

// you should implement the method getBlutoothDevice
BluetoothDevice device = getBluetoothDevice();
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);

答案 2 :(得分:1)

您还可以通过不依赖于任何配置文件的基本SCO连接来传输音频。但请注意,A2DP是专为流媒体音乐开发的配置文件。因此,与A2DP相比,您自己制作的任何实现都会受到影响。

除非您将音乐流式传输到不支持A2DP的设备,否则我肯定会使用A2DP。真的,你唯一的另一个选择是使用SCO链接。

答案 3 :(得分:-1)

尝试使用以下代码段:

    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);
  }
 }
}

答案 4 :(得分:-1)

真的很难做到这一点。但我做了很多研究并找到了方法。有几个延迟,连接和根问题,但显然有效。为此,您需要在服务器和“AllConnect”接收器上安装“AirAudio”应用程序。然后在主屏幕上打开AirAudio,然后打开AllConnect,按设备,然后在源上选择服务器,然后选择流式mp3。问题是延迟非常大,另一个缺点就是只传输android服务器系统的声音,你应该在手机上有root ...我也试过流媒体接收器是VLC,少了延迟但仍然很不舒服。

相关问题