Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UDP数据包重新排序_Java_Networking_Udp_Sip_Voip - Fatal编程技术网

Java UDP数据包重新排序

Java UDP数据包重新排序,java,networking,udp,sip,voip,Java,Networking,Udp,Sip,Voip,我正在制作VOIP呼叫Android应用程序。在这里,我使用简单的UDP部分完成了它,而没有使用SIP、RTP等。。。 当我尝试在我的家庭局域网,质量是非常好的。 但当我在互联网上使用它时,声音质量对于抖动来说非常差 现在事情在接收器端,我需要重新排序接收到的数据包。我不想使用RTP,因为此时它需要额外的编码 在接收循环中,我不断地接收UDP数据包并将其发送给扬声器。 我需要缓冲这些收到的数据包,并将其发送给扬声器 While(true){ byte[] data = new b

我正在制作VOIP呼叫Android应用程序。在这里,我使用简单的UDP部分完成了它,而没有使用SIP、RTP等。。。 当我尝试在我的家庭局域网,质量是非常好的。 但当我在互联网上使用它时,声音质量对于抖动来说非常差

现在事情在接收器端,我需要重新排序接收到的数据包。我不想使用RTP,因为此时它需要额外的编码

在接收循环中,我不断地接收UDP数据包并将其发送给扬声器。 我需要缓冲这些收到的数据包,并将其发送给扬声器

    While(true){
    byte[] data = new byte[..];
    Udpsocket.receive(data);
    // Store data in a big buffer. after receiving enough packets say 500 packets 
    // properly send to Speaker in proper order
    }
我在寻找LinuxTCP代码进行数据包重新排序,但对我来说这非常复杂

你能告诉我如何有效地重新订购吗?我的意思是我需要缓冲多少数据等等。我需要等待多长时间的数据。。 任何建议,样本代码或简单算法重新排序UDP数据包将不胜感激


谢谢

让您发送的每个数据包都包含一个标题。每个标题都有一个序列号。按顺序增加发送的每个数据包的序列号


如果接收者收到一个数据包,其序列号如果不符合顺序,则将其保留一段时间,以查看正确的数据包是否稍后到达。如果没有,则将该数据包用作下一个数据包。

是。该部分已实现-序列号。我的意思是我需要缓冲多少数据等等。我需要等待多长时间的数据。。任何关于重新排序UDP数据包的建议、示例代码或简单算法都将不胜感激。我还在寻找一个缓冲区的简单实现来对数据包进行排序。尤其是正确地处理序列号溢出似乎不是件小事。“在接收方,我需要对接收到的数据包重新排序。”对于VoIP,你们真的不想这样做。VoIP将丢弃无序接收的旧数据。通过缓冲,您引入了延迟,通信各方会注意到它。实时协议,如VoIP,只需忽略无序接收的旧数据。如果您只从一个方向接收录制的声音,缓冲可以工作,但在双向对话中,缓冲不起作用。谢谢。好啊但我要说的是,如果我毫无延迟地收到序列号为3和4的两个数据包。但如果seq 3紧跟在seq 4之后..我仍然不需要重新排序..在这里我根本不需要等待..或者你的意思是我将丢弃seq 4之后的seq 3的数据包。。。。总的来说,它会增加丢弃的数据包数量,并且通话质量会很差。。不是吗..通话质量可能会变得更差,也可能以明显的延迟结束。像VoIP或视频这样的实时协议假设某些数据包会丢失或接收不正常,他们对此没有问题,并进行处理。它们不会通过缓冲、重新发送丢失的数据包或重新排序数据包来引入延迟。当一个数据包出现故障时,很可能是前一个数据包丢失了,等待丢失的数据包是没有意义的。