Java Simpe-UDP优化

Java Simpe-UDP优化,java,android,sockets,udp,audio-streaming,Java,Android,Sockets,Udp,Audio Streaming,我正在制作一个音乐流应用程序,其中我需要通过UDP传输数据。 目前,我每10毫秒发送1.4千字节大小的数据包。但这似乎是缓慢的。现在我已经了解到,由于MTU问题,建议将数据包大小设置为1400。此外,应进行数据包调整以减少数据包丢失。 我在3g上进行了测试,质量损失并没有那么大。也许我可以增加我的数据包大小,或者减少速度? 有人能提出最佳策略吗? 此外,我将感谢任何其他关于UDP流的建议。 谢谢 发件人: while(audio_stream.read(buf, 0, BUF_SIZE) !=

我正在制作一个音乐流应用程序,其中我需要通过UDP传输数据。 目前,我每10毫秒发送1.4千字节大小的数据包。但这似乎是缓慢的。现在我已经了解到,由于MTU问题,建议将数据包大小设置为1400。此外,应进行数据包调整以减少数据包丢失。 我在3g上进行了测试,质量损失并没有那么大。也许我可以增加我的数据包大小,或者减少速度? 有人能提出最佳策略吗? 此外,我将感谢任何其他关于UDP流的建议。 谢谢

发件人:

while(audio_stream.read(buf, 0, BUF_SIZE) != -1) {

                final DatagramPacket pack = new DatagramPacket(buf, BUF_SIZE,
                        InetAddress.getByName(connection.getRecIp().substring(1)),
                        Integer.parseInt(connection.getRecPort()));
                datagramSocket.send(pack);
                bytes_count += BUF_SIZE;
                Log.d("Ayush", "bytes_count : " + bytes_count);
                Thread.sleep(70L, 0);
            }
接收人:

while(receivedBytes < length) {

                final DatagramPacket pack = new DatagramPacket(new byte[BUF_SIZE], BUF_SIZE);
                try {
                    datagramSocket.receive(pack);
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
                if(pack.getLength() < BUF_SIZE/2) continue;
                mappedByteBuffer.put(pack.getData());
                receivedBytes += pack.getLength();
//Some more code for other stuff
}
while(接收字节
目前,我每10毫秒发送1.4千字节大小的数据包

您正在发送音频或视频。如果使用320 Kbit/s的MPEG,则每10毫秒需要40 KB/秒或400字节。128 Kbut/秒每10毫秒需要160字节

但这似乎是缓慢的

为什么?

现在我已经了解到,由于MTU问题,建议将数据包大小设置为1400

MTU接近1500,这适用于TCP而不是UDP

也许我可以增加我的数据包大小,或者减少速度


包裹越大,丢失的东西越多。我会尝试0.5 KB的数据包,因为这些数据包在过去对我来说是一个很好的尺寸。

我正在播放mp3音乐。流的速度很慢。我试试0.5KB。很抱歉,我的步速实际上是70毫秒。我也会尝试减少这个。好的,如果你以128 Kbit或16 kByte的速率传输512字节,你需要每秒发送32个,或者每31毫秒发送一次。嗨,我可以再给你一个建议。由于我没有适当的测试方法,你能给我更多的意见吗:我正在经历大约7%的数据包丢失。我在想,如果我创建x个套接字,并将文件分部分流式传输,即每个套接字上文件的流长度/x部分,是否有助于减少数据包丢失?另外,使用较小的数据包并将速度降低到10确实提高了流质量,我认为数据包大小比pacing@Dexter数据包丢失可能因一系列因素而变化,包括服务器和设备本身之间的网络。您可能会发现,您需要根据客户的需求调整您所做的工作。i、 e.您应该从设备获得关于未命中率的反馈。你可能需要每包发送两次,比如说相隔半秒,以确保你至少收到一次几乎所有的包。好的,我明白了,没有银弹。我将深入研究QUIC,也许在高噪声网络中保留TCP作为备用方案。谢谢你的帮助。