我正在创建一个音乐流应用程序,我需要通过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
}
答案 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的数据包,因为这些对我来说是一个很好的规模。