我试图发送和通过UDP和困惑接受一些音频编码数据。
首先,我已经做了UDP C#和Node.js的前发送 - 接收,在接收到数据包逐一是非常简单和容易的,但它在Java的不同,混淆了我。
的每一个编码的数据大小是大约360-380 bytes
的每个,
我需要经由UDP 作为分组发送该编码的数据到远程(或迄今本地主机 )。
了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个分组joind在一起,然后作为一个单一字节数组处理?
如果我设置了DatagramPacket
大小512 bytes
,其大小是包360-380 bytes
来两次到缓冲区汇集,然后因为它是溢出的缓冲区大小,单个数据包到达刷卡要处理?
再次,这是足够的,至少,接收器可以通过一个接收数据包1,那么对于每一个进程,但事情看起来在这里复杂。
请指导我。 谢谢。