java – Android的RTP库是否支持多播?

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

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

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

如果我尝试使用多播地址(如239.1.1.1)实例化AudioStream,然后在另一台设备上使用具有相同多播地址的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" />

解决方法:

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

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

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

上一篇:wireshark 还原语音包 RTP,以及wireshark对包进行过滤分析


下一篇:几种直播流媒体协议