Переупорядочение пакетов UDP - PullRequest
0 голосов
/ 05 мая 2018

Я делаю VOIP, вызывая приложение для Android. где я частично завершил это с использованием простого UDP без использования SIP, RTP и т. д ... Когда я пробую это в моей домашней сети, качество очень хорошее. Но когда я использую его через Интернет, качество звука очень плохое для дрожания.

Теперь дело в стороне получателя, мне нужно ЗАКАЗАТЬ полученный пакет. Я не хочу использовать RTP, так как он требует дополнительного кодирования в данный момент.

В цикле приема я постоянно получаю пакет UDP и отправляю его на динамик. Мне нужно буферизовать полученные пакеты и отправить их оратору.

    While(true){
    byte[] data = new byte[..];
    Udpsocket.receive(data);
    // Store data in a big buffer. after receiving enough packets say 500 packets 
    // properly send to Speaker in proper order
    }

Я искал Linux TCP-код для переупорядочения пакетов, но он очень сложен для меня.

Подскажите, пожалуйста, как эффективно изменить порядок? Я имею в виду, сколько данных мне нужно буферизовать и т. Д. И т. Д., Как долго мне нужно ждать данных .. Мы будем благодарны за любые предложения, примеры кода или простой алгоритм переупорядочения пакетов UDP.

Спасибо

1 Ответ

0 голосов
/ 05 мая 2018

Пусть каждый отправляемый вами пакет содержит заголовок. Каждый заголовок имеет порядковый номер. Увеличивайте порядковый номер последовательно для каждого отправленного пакета.

Если получатель получает пакет с порядковым номером, если он не в порядке, оставьте его ненадолго, чтобы узнать, поступит ли правильный позже. Если нет, то используйте пакет в любом случае как следующий пакет.

...