5

我正在尝试使用 Android 的 RTP 类将音频流从一台设备多播到许多其他设备。

如果可能的话,我不想使用任何第三方库。

我能够使用AudioStreamAudioGroup设置彼此的 IP 地址在两个设备之间流式传输双向音频,但我想流式传输到多播组。

如果我尝试AudioStream使用多播地址实例化239.1.1.1,然后在另一台设备上使用audioStream.associate()相同的多播地址,但听不到流。

我读过一些不支持多播的 Android 设备,但我的设备(三星 Galaxy Tab 2s)确实支持它。我什至在我的代码中添加了以下内容以尝试获取多播锁定:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            multicastLock = wifi.createMulticastLock("multicastLock");
            multicastLock.setReferenceCounted(true);
            multicastLock.acquire();

此外,我在清单文件中具有以下权限:

   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.RECORD_AUDIO" />
4

1 回答 1

4

在研究了很多之后,我发现 RTP 类确实支持发送多播,但不支持接收。大概这是因为使用的套接字不是MulticastSockets。

此外,对于那些感兴趣的人,Tab 2 实际上是不支持加入多播组的设备之一(即它不发送 IGMP 加入数据包),但如果您在网络基础设施中设置静态多播组,那么将收到数据包 - 因此我在上面提到我知道他们确实支持它。

查看 Android 设备是否支持加入多播组的一种快速方法是查找/proc/net/igmp文件是否存在。

于 2013-10-10T09:20:25.207 回答