Голосовая конференция — как привлечь к разговору больше людей?

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

Вот ситуация: я создаю простое приложение для голосового чата на C#.NET (что-то вроде Ventrilo или TeamSpeak, но только для 15 или 20 человек и работает в локальной сети со скоростью 100 Мбит/с). У меня есть рабочий сервер (порождающий поток для каждого клиента) и клиентское приложение, использующее UDP для подключения и DirectSound для захвата и воспроизведения звука. Я могу звонить один на один, но не могу понять одну из самых важных вещей:

Как сделать так, чтобы в беседе участвовало более двух человек?


person Ken    schedule 05.02.2010    source источник
comment
Возможно, вы захотите перефразировать свой вопрос. что было бы лучшим подходом, чтобы заставить всех услышать то, что говорят все остальные, кажется широким. Это не распространяется на случаи, когда люди не смотрят в микрофон или когда отключен звук. Основываясь на остальной части вашего вопроса, вы действительно спрашиваете, как в разговоре участвует более двух человек? Если это так, вы можете рассмотреть либо звездообразную, либо ячеистую топологию. Вы также можете рассмотреть возможность использования многоадресной рассылки IP.   -  person atk    schedule 05.02.2010
comment
Спасибо за ваш комментарий. Я перефразировал вопрос, как вы предложили (потому что это действительно так). Я рассматривал возможность использования многоадресной рассылки, но не был уверен, что это хорошая идея в данном случае.   -  person Ken    schedule 06.02.2010


Ответы (1)


Вам нужно какое-то централизованное место для отправки пакетов обратно через многоадресную рассылку, или же вам нужен децентрализованный подход, при котором каждый клиент подключается ко всем другим клиентам, и каждый клиент размещает многоадресную рассылку. Чего вы хотите избежать, так это заставить машины пересылать свои данные на каждую другую машину, что приведет к времени O (n) для отправки сообщения каждой машине (и ввод-вывод медленный!).

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

person San Jacinto    schedule 06.02.2010