首页 文章

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

提问于
浏览
25

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

我查看了以下链接:

5 回答

  • 1

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

    以下类型的线程说,它可能在设备之间通过蓝牙传输音频,但是在谷歌官方宣布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. 添加的但是我遇到XDA tread其中OP提到 Android 2.1 中的问题,意味着它也支持以前的api级别但OP面临问题 .

    希望理解它是有意义的,我想建议参考XDA forum以获得有关A2DP兼容性及其成功的更多信息 .

  • 1

    我认为,如果A2DP无法正常工作,我们最好转移到较低层,我们可以创建一个基本流,可用于发送任何形式的日期 . 我成功通过J2ME设备之间的蓝牙发送字节流 .

    如果在两个设备上安装应用程序是可以接受的,我会通过套接字创建蓝牙服务器和客户端进行通信的示例代码,一旦套接字 Build ,你就可以发送音频流:)

    这里有一些核心代码:

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

    然后你可以从这个 BluetoothSocket 获得 InputStreamOutputStream 并发送音频流就像 HttpConnection

    2)客户端设备:

    假设你已经拥有 BluetoothDevice

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

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

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

  • 11

    尝试使用以下代码段:

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

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

相关问题