我正在尝试通过UDP发送和接收一些音频编码数据,并且很困惑。
首先,我在C#和node.js之前完成了UDP send-receive,并且逐个接收数据包非常简单直接,但它在Java中有所不同,让我感到困惑。
每个编码数据大小约为360-380 bytes
,
我需要通过UDP将此编码数据作为数据包发送到远程(或 localhost )。
UDP接收器应接收编码数据作为数据包并处理解码。
这是一个简短的例子来说明我的所作所为。
编码器和UDP发件人
ds = new DatagramSocket(localPort);
//a Thread with While loop----------
Log.d("AudioEncoder", outData.length + " bytes encoded");
//The encoded data size is about 370 bytes for each
packet = new DatagramPacket(outData, outData.length,
InetAddress.getByName("127.0.0.1"), localPort);
ds.send(packet);
UDP接收器和解码器
ds = new DatagramSocket(localPort);
byte[] buffer2 = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer2, buffer2.length);
while (isPlaying)
{
ds.receive(packet);
Log.d("UDP-receiver", buffer2.length + " bytes received");
//do Decoding on buffer2
//..........
}
基本上,每个发送和接收的数据包(编码字节数据)大小约为360-380字节。
然后,我理解Java Datagram
,为特定的字节大小(例如512 or 1024
创建一个缓冲区(我不知道在这种情况下最优化的是什么大小,在这些日子里)
如果我设置DatagramPacket
大小1024 bytes
,则大小为360-380 bytes
的数据包将在缓冲区中汇集两次,然后将原始的2个数据包连接在一起,然后作为单字节数组?
如果我设置DatagramPacket
大小512 bytes
,那么大小为360-380 bytes
的数据包会在缓冲区中汇集两次,然后由于缓冲区大小溢出,单个数据包到达被刷过来处理?
同样,至少,接收器可以逐个接收数据包,然后为每个数据包进行处理,但事情看起来很复杂。
请指导我。感谢。
答案 0 :(得分:0)
如果我将DatagramPacket的大小设置为1024字节,那么大小为360-380字节的数据包会在缓冲区中汇集两次,然后将原来的2个数据包连接在一起然后作为单字节数组处理?
没有。您收到两个单独的数据包。
如果我将DatagramPacket的大小设置为512字节,则大小为360-380字节的数据包将两次汇总到缓冲区中
没有
然后因为它溢出了缓冲区大小,所以到达的单个数据包被刷过来处理?
我不知道'刷过'是什么意思,但这一切都不会发生。您收到两个单独的数据包。