作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 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();
此外,我的 list 文件中还有以下权限:
<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 类支持发送多播,但不支持接收。大概这是因为使用的套接字不是 MulticastSocket
。
此外,对于那些感兴趣的人,选项卡 2 实际上是不支持加入多播组的设备之一(即它不发送 IGMP 加入数据包),但是如果您在网络基础结构中设置静态多播组,然后数据包将被接收 - 这就是为什么我在上面提到我知道他们确实支持它。
查看 Android 设备是否支持加入多播组的快速方法是查找 /proc/net/igmp
文件是否存在。
关于java - Android 的 RTP 库是否支持多播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18984994/
我是一名优秀的程序员,十分优秀!