我正致力于在java中开发基本的IP语音系统。音频可以使用线程与发送者和接收者一起发回。但是,当使用不同的数据报包时,它们会丢失一些数据包。因此,我正在尝试为每个发送的数据包添加一个标头,以便更容易识别接收时丢失的确切数据包,因此我们可以开发一些补偿方法。
我已经开始了一些事情,但是我不确定它是否有丰富的想法,一般的想法是向数组添加2个字节,并将这2个额外的字节分配给标题信息,这是每个字符串序列号分组...
Vector<byte[]> voiceVector = new Vector<byte[]>();
int recordTime = 30;
System.out.println("Recording Audio...");
for (int i = 0; i < Math.ceil(recordTime / 0.032); i++)
byte[] block = recorder.getBlock();
DatagramPacket packet = new DatagramPacket(fPacket, fPacket.length, clientIP, PORT);
//Send it
sending_socket.send(packet);
voiceVector.add(block);
有人有任何想法吗?我知道要创建一个包含语音向量和2个额外字节的新数组,但我不确定如何执行此操作,因为我曾经在一段时间内使用过java ...
干杯
答案 0 :(得分:0)
我建议您首先使用TCP实现此功能,并且只有在此工作时才尝试使用UDP。可靠的UDP是一个复杂的主题,检测丢弃的数据包只是一个开始。
即使你必须向许多接收器发送相同的音频,使用TCP仍然可以更简单。 (如果必须的话,可能还有更快的网卡)
答案 1 :(得分:0)
不要使用TCP - 由于其确认,它会增加延迟的开销。 您应该做的是使用RTP的实现作为数据包的传输。它运行在UDP上,并添加时间戳和其他有用且需要的东西。
检查出来:http://en.wikipedia.org/wiki/Real-time_Transport_Protocol
不要自己实现 - 找到一个现成的库。