Android的RTP库是否支持多播?

tri*_*468 5 java android multicast rtp

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

完全不希望使用任何第三方库。

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

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

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

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            multicastLock = wifi.createMulticastLock("multicastLock");
            multicastLock.setReferenceCounted(true);
            multicastLock.acquire();
Run Code Online (Sandbox Code Playgroud)

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

   <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" />
Run Code Online (Sandbox Code Playgroud)

tri*_*468 4

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

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

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