普通的DatagramSocket很好..。ICE4J DatagramSocket似乎截断了数据!?
发送大小为2,500,但接收端始终为1,500(对于常规的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的原因)。
发布于 2015-04-13 23:03:57
我发现了首要问题..。
见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,而实际的数据包数据是正确的数量。也许我会请求合并。
发布于 2015-04-12 09:38:56
发送大小为25,000包,但接收端总是1500。
您永远不会收到比路径MTU更大的UDP数据报,除非:
否则,任何碎片的丢失都会导致整个数据报的丢失。
UDP数据报普遍接受的有效负载限制为534字节。不是25k。
https://stackoverflow.com/questions/29587593
复制相似问题