所以我通过多播通过UDP发送音频。发送方每 10 毫秒发送一次原始音频 UDP 数据包。不幸的是,它时不时会错过一个数据包。所以我所做的是尝试对发送/接收进行计时,以便我可以确定我是否错过了一个。
这是我目前拥有的:
prevReceived = System.currentTimeMillis();
socket.receive(recv);
long messageReceived = System.currentTimeMillis();
if (dateDiff > 20) {
... Missed packet add the previous packet
我遇到的问题是,有时 java 多路接收方法需要 70 毫秒才能接收消息。但是当我与网络监视器Microsoft检查时,发送仍在发送消息。
所以我想知道是否有办法查看多套接字对象是否有任何待处理的数据包:socket.count() 或其他东西。或者数据报数据包是否从套接字时间接收时间。例如,类似于recv.timestamp()。
到目前为止,我还没有找到任何东西,也无法弄清楚为什么当网络监视器每 70 毫秒处理一次消息时Microsoft需要 10 毫秒来处理消息。
Apache mina 可以计算你的数据报数据包。
http://mina.apache.org/mina/userguide/ch2-basics/sample-udp-server.html
http://mina.apache.org/mina/userguide/user-guide-toc.html