Голосовая связь по TCP / IP - PullRequest
       77

Голосовая связь по TCP / IP

8 голосов
/ 22 декабря 2009

В настоящее время я разрабатываю приложение, использующее DirectSound для связи в интрасети. У меня было рабочее решение с использованием UDP, но потом мой начальник сказал мне, что по какой-то причине хочет использовать TCP / IP. Я пытался реализовать его почти так же, как UDP, но с очень небольшим успехом. То, что я получаю, это просто шум. 20% из них - записанный звук, а остальное - просто странный шум.

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

Теперь два вопроса:

  • Я на правильном пути? Является ли даже хорошей идеей использовать TCP / IP для такого рода приложений (своего рода голосовая конференция)?
  • Я делаю это на C #, но не думаю, что это зависит от языка.

Ответы [ 14 ]

0 голосов
/ 22 декабря 2009

Большинство голосовых приложений создаются с использованием протокола RTP, который транслируется через UDP-порт. Ну и большинство из них с поддержкой кодеков, чтобы обеспечить сжатие медиа перед потоком от одного конца к другому. Обсудите с вашим боссом требования к пропускной способности.

0 голосов
/ 22 декабря 2009

TCP должен не вносить какой-либо шум. Дрожание и запаздывание, да (особенно если ваши ссылки с потерями); но без шума вообще. Что-то не так с вашей программой.

Кстати, я согласен, что в этом случае UDP гораздо более уместен, чем TCP.

0 голосов
/ 22 декабря 2009

Зависит от типа базовой сети. Если у вас есть Ethernet с надежностью 99,9%, я думаю, что с TCP все будет в порядке. Однако, если вы делаете это, скажем, через 802.11, то TCP будет не очень хорошей идеей.

Вы можете попросить своего начальника по конкретной причине использовать TCP, а затем внедрить эту конкретную службу, например, базовую надежность или службу исправления ошибок по UDP. Вы также можете посмотреть в RTP. (http://en.wikipedia.org/wiki/Real-time_Transport_Protocol)

0 голосов
/ 22 декабря 2009

Существует несколько основных причин, по которым данные потокового вещания используют UDP. Самая большая из них - это получение поздних данных так же хорошо, как и их вообще не прием, а задержка потока для повторной передачи, безусловно, не очень хорошая идея. Для VoIP допускается задержка около 150 мс. Любой голосовой пакет, задержанный дольше этого, становится заметным для пользователей.

Что касается того, почему вы получаете шум, как вы обрабатываете опоздавшие пакеты из-за повторных передач?

...