常规DatagramSocket可以正常工作... ICE4J DatagramSocket似乎会截断数据!

发送大小的数据包为2500,但接收端始终为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,而实际的数据包数据是正确的数量。也许我会要求合并。

08-27 16:19