Как отправить аудиоданные вручную с помощью сокетов udp

Я работаю над приложением для видеочата, используя сокеты udp, я могу захватывать необработанные аудиоданные огромного размера. поскольку это приложение для чата, я должен иметь возможность непрерывно передавать эти аудиоданные.

Проблема в том, что эти аудиоданные огромны, поэтому сокет mtu не позволяет мне передавать эти данные.

Я выясняю, как я могу разделить эти данные и отправить через сокеты, захватить их на другом конце и объединить их для создания голосовых данных. Пожалуйста, объясните мне, как использовать сокеты udp


person Kasi    schedule 21.02.2013    source источник


Ответы (1)


С UDP вы должны сами позаботиться о порядке передачи (UDP datagram номер 1 может быть получен AFTER и UDP datagram номер 2) и потерянных пакетах (UDP не разрешает доставку дейтаграмма)

Вы должны использовать TCP для передачи больших размеров, когда порядок пакетов имеет значение.

Что касается MTU, вас не должно волновать, что он меньше размера данных, которые вы собираетесь отправить. ОС будет дефрагментировать его для вас.

Просто разделите данные на блоки 64k (максимальный размер, допустимый для одного вызова send()) и зацикливайте, пока ваши данные не будут полностью переданы.

person Davide Berra    schedule 21.02.2013
comment
Спасибо Давиде Берра. Не могли бы вы предоставить мне несколько примеров ссылок о том, как выполнить порядок передачи и потерянные пакеты - person Kasi; 21.02.2013
comment
Предполагая, что вы программируете на языке C: Учебник по сокетам — TCP - person Davide Berra; 21.02.2013
comment
спасибо, я отправляю массив байтов размером 64 КБ с помощью сокета udp С#, я могу отправлять без каких-либо исключений, но сокет получателя не может получить данные. я что-то пропустил? - person Kasi; 21.02.2013
comment
Большое спасибо, Давиде Берра, я понял, проблема заключается в моей кодировке, я установил размер буфера сокета приемника на 1024, поэтому я не получил никаких данных. - person Kasi; 21.02.2013