Как реализовать аудиочат с низкой задержкой n-to-n - PullRequest
1 голос
/ 01 февраля 2010

Я изучаю, как реализовать аудиочат n-to-n (скажем, 4 человека слышат друг друга). Это довольно тривиально, используя Flash или Wowza Media Server. Проблема real заключается в задержке, потому что 4 человека в чате должны делать все как можно более синхронно (например, что-то вроде совместного пения). Каждая миллисекунда имеет значение.

Какие у вас впечатления от аудиочатов со сверхнизкой задержкой?

  • Какая минимальная задержка будет достигнута?
  • Как вам этого добиться (какое программное обеспечение, протокол, медиа-сервер, битрейт)?

Большое спасибо!

1 Ответ

0 голосов
/ 01 февраля 2010

Наименьшая достижимая задержка зависит от многих факторов, которые ваш код не будет контролировать, в основном, от вашей сети.

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

Проблема в том, что даже у вашего кода будут проблемы ... у вас нет способа надежно передать эти пакеты на сервер в режиме реального времени. UDP будет отбрасывать пакеты, и вам придется встроить допуск для принятия позднего прибытия или незаезда. TCP не лучше в этом отношении. Конечно, пакеты гарантированно поступят по порядку, но по какой цене вовремя? Кроме того, чтобы сжать звук на каждом хосте, а затем разархивировать его на сервере, выполнить объединение и повторное сжатие ... все это, сохраняя при этом ощущение звучания в реальном времени ужасно амбициозным.

Я не имею в виду, что меня считают экспертом, и у меня нет ЛЮБОГО опыта в подобных делах, но это просто ГРОМКО звучит.

...