我正在制作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数据包的简单算法将不胜感激。
由于
答案 0 :(得分:0)
让您发送的每个数据包都包含一个标题。每个标题都有一个序列号。每个发送的数据包按顺序增加序列号。
如果接收方获得了序列号无序的数据包,请保留一段时间以查看是否有正确的数据包到达。如果没有,那么无论如何都要使用该数据包作为下一个数据包。