Я немного учусь использовать voip поверх udp в небольшой сети. Я знаю, что есть пакеты библиотек, готовые сделать и переделать все, что мне когда-либо понадобится, с помощью нескольких вызовов методов, но, как я уже сказал, я учусь, поэтому мне нужно заново изобретать колесо, чтобы увидеть, как это работает.
В настоящее время я изучаю класс DatagramPacket и заметил, что в классе DatagramPacket нет метода, который бы устанавливал информацию заголовка (т. е. порядковый номер пакета, который мне нужно знать для чередования).
Небольшой код для отражения среды:
byte[] block;
DatagramPacket packet; // UDP packet
/* x Bytes per block , y blocks per second,
z ms time block playback duration */
block = recorder.getBlock(); // assume I have class that handles audio
// recording and returns speech in a
// uncompressed form of bytes
packet = new DatagramPacket(block, block.length, clientIP, PORT);
Во-первых, я предполагаю, что, поскольку это UDP, отправителю на самом деле все равно, кроме того факта, что он куда-то швыряет пакеты. Вот почему внутри нет такого метода.
Во-вторых, я предполагаю, что мне нужно сделать это самому — добавить в отправляемый блок байтов лишние байты, которые бы содержали порядковый номер пакета? Однако я также обеспокоен тем, что если я это сделаю, то как мне распознать, являются ли байты байтами заголовка, а не аудиобайтами? Я могу предположить, что первый байт представляет собой число, однако мы знаем, что байт может представлять только 258 чисел. Я никогда раньше не работал на уровне байтов. Или может есть другие техники?
Короче говоря, для чередования мне нужно знать, как настроить порядковый номер пакета, так как я не могу упорядочивать неупорядоченные пакеты :-)
Спасибо,