常规 DatagramSocket 工作正常... ICE4J DatagramSocket 似乎截断数据!?
发送数据包大小为 2,500,但接收端始终为 1500(使用常规 Java DatagramSocket,接收数据包大小与发送大小相同)。
接收端:
Component rtpComponent = stream.getComponent(org.ice4j.ice.Component.RTCP);
CandidatePair rtpPair = rtpComponent.getSelectedPair();
videoDS = rtpPair.getDatagramSocket();
在线程中:
byte[] buffer = new byte[250000000];
final DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
videoDS.receive(dp);
final byte[] clone = new byte[dp.getLength()];
System.arraycopy(dp.getData(), dp.getOffset(), clone, 0, dp.getLength());
final Image image = new Image(new ByteArrayInputStream(clone));
发送端几乎相同,只是它在 Android 上运行...
非工作代码唯一的区别是第一段用于发送和接收。如果我使用常规的 Java 套接字,它会工作(但当然不能在路由器后面,这就是我使用 Ice4J 的原因)。
最佳答案
我找到了主要问题....
参见 org.ice4j.stack.Connector 第 160 行
/*
* Make sure localSock's receiveBufferSize is taken into
* account including after it gets changed.
*/
int receiveBufferSize = 1500;
数据显然被截断了....请参阅第 188 行
packet.setData(
new byte[receiveBufferSize],
0,
receiveBufferSize);
....
localSock.receive(packet); //line 200
我当前的解决方案是将 receiveBufferSize 编辑为 25000,实际的数据包数据量是正确的。也许我会要求合并。
关于java - ICE4J 数据报包太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587593/