2013-05-28 576 views
24

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

我已经通过以下链接看:

+2

1.几乎所有设备都支持A2DP,A2DP和HFP(免提)配置文件是手机需要的基本配置文件。 2. Android 4.2.1在蓝牙上存在音频流问题,这是一个波涛汹涌的音频,在谷歌最新版本中得到修复。 3.早先大多数人曾尝试使用bluez(开源蓝牙)协议栈,但从JB开始,bluez被broadcomm协议栈取代。您需要在手机中实现音频接收器配置文件。使用Alljoyn可以在2台设备之间进行音频流式传输,请查看[link](https://www.alljoyn.org/about/core-services) – ashish

+0

谢谢您的链接@ashish。我正在经历这个。并会让你知道发生了什么。再次感谢。 –

+0

音频是否需要通过蓝牙进行流式传输?使用[WiFi-Direct](http://developer.android.com/guide/topics/connectivity/wifip2p.html)怎么样?这实际上会给你更多的灵活性和功能。 – BigMacAttack

回答

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.添加,但我遇到XDA tread来的地方在Android 2.1 OP提到的问题,意味着其还支持以前的API的水平,但OP面临的问题。

希望能够理解,我想推荐XDA forum以获得有关A2DP兼容性及其成功的更多信息。

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

,然后你可以从这个BluetoothSocketInputStreamOutputStream和发送音频流就像HttpConnection

2)客户端设备:

假设你已经拿到了BluetoothDevice

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

应该注意的是,普通的A2DP是通过L2CAP进行流式传输的,该L2CAP具有比RFCOMM数据包大得多的有效载荷大小。由于较小的有效载荷大小和涉及的附加层,因此通过RFCOMM进行流式传输会导致音质不佳 – TwinPrimesAreEz

0

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

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

0

尝试使用下面的代码片段:

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服务器系统的声音,你应该在手机上有根目录...我也尝试了流媒体接收器是VLC,延迟但仍然不舒服。

相关问题