java - ICE4J 数据报包太小

标签 java android udp ice4j

常规 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/

相关文章:

java - 如何从父类(super class)调用子类方法?

android - java.net.ConnectException : Connection refused: connect Error while Installing APK 异常

sockets - sendto() + recvfrom() 缓冲区混淆数据报

android - 如何隐藏启动屏幕中间的应用程序图标/启动器图标

c - 是否可以在winsock中将tcp服务器连接到udp客户端

java - 广播服务器发现

java - 使用 Tomcat JDBC 连接池时在 jconsole 中看不到 JMX 条目

java - 如何在 MainActivity 中找到最后一个 fragment

java - 给定一个字符串,找到元音和辅音数量相同的最长子串?

android - 如何在android中的Retrofit 2的 'Body'参数中传递字符串