简单的UDP优化

时间:2014-07-20 20:09:43

标签: java android sockets udp audio-streaming

我正在创建一个音乐流应用程序,我需要通过UDP传输数据。 目前我每隔10ms发送一个大小为1.4千字节的数据包。但这似乎很慢。现在我已经读过由于MTU问题而建议的数据包大小为1400。还应该进行数据包调步以减少数据包丢失。 我测试了超过3克,质量损失不是那么多。也许我可以增加我的数据包大小,或减少节奏? 有人可以提出最佳策略吗? 我也很感激有关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
}

1 个答案:

答案 0 :(得分:0)

  

目前我每10分钟发送一个大小为1.4千字节的数据包。

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

  

但这似乎很慢。

为什么?

  

现在我已经知道由于MTU问题,建议使用1400的数据包。

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

  

也许我可以增加数据包大小,或减少节奏?

数据包越大,丢失时丢失的越多。我会尝试0.5 KB的数据包,因为这些对我来说是一个很好的规模。