UDP数据包重新排序

时间:2018-05-05 10:36:29

标签: java networking udp sip voip

我正在制作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
    }

我正在寻找用于数据包重新排序的Linux TCP代码,但这对我来说非常复杂。

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

由于

1 个答案:

答案 0 :(得分:0)

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

如果接收方获得了序列号无序的数据包,请保留一段时间以查看是否有正确的数据包到达。如果没有,那么无论如何都要使用该数据包作为下一个数据包。