2013-08-25 2 views
0

Мы работаем над Java-программой Voice over IP, и нам необходимо найти эффективный способ поддержания потоков и стресса на стороне сервера в разумной сумме. Мы пишем это для многопользовательской игры, и мы планируем иметь несколько разных режимов для определения того, как смешивать и отправлять аудио. Мы планируем использовать «Opt In» для того, чтобы сохранить бесполезные потоки из уравнения, если они предпочитают не участвовать в голосовом чате. Помимо этого, мы думаем о каналах, частном чате (2 человека) и близости. Если мы использовали канал с 16 + людьми в нем, мы хотим найти, есть ли способ избежать количества потоков x^2 (в данном случае 256). Нам также необходимо попытаться сохранить работу на стороне клиента на разумном уровне, так как она будет запускать игру. Мы не слишком уверены, сколько работы может обрабатывать большой сервер, поскольку он будет экспоненциальным, поскольку все больше людей находятся в канале. Нам может потребоваться ограничить количество людей на канал или позволить владельцу сервера сделать это, а также ограничить количество каналов. В зависимости от популярности эта игра может иметь около 40-500 человек на сервере, и мы не уверены в том, как справиться с этим типом стресса при обработке и пропускной способности сервера.Как обрабатывать аудиопотоки и микширование для VoIP

По существу, мы спрашиваем, есть ли у кого-либо знания существующих систем, которые имеют эффективный способ обработки этого. Мы используем JSpeex для нашей аудиокодировки, если это имеет какое-либо значение. Итак, существуют ли какие-либо методы для обработки этого или, возможно, даже некоторые идеи сообщества? Мы также планируем перепрофилировать это в меньшем масштабе Skype, как программа, которую мы разрабатываем.

ответ

1

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

Для каждого клиента вам нужно одностороннее соединение с сервером. Все входные/выходные аудио передаются через сервер. Сервер, кроме мультиплексирования всего аудиофайла, должен получать один аудиопоток и пересылать его вперед.

Когда вы находитесь в частном чате, сервер просто пересылает только пакеты от другого игрока в частном чате с вами.

При использовании близости сервер мультиплексирует звук любого игрока в диапазоне в один поток.

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

+0

256 потоков, загружаемых через сервер. x^2 потока, потому что нам нужно распространять аудио для каждого человека, от каждого человека, за исключением собственного аудио (эхо). Если бы у нас был способ «отключить» свой собственный звук при возвращении, нам понадобятся только потоки x. Его тип смешивания, и мы не уверены в том, как с ним справиться. – Kristoff

+0

Вот что я говорю. Вам не нужен отдельный поток от каждого человека. Вам просто нужен сервер для мультиплексирования ввода от каждого человека вместе. Поэтому каждому пользователю нужен только один вход и один выходной канал. Сервер просто должен быть умным. Очевидно, что он не будет включать в себя эхо-звук. – Smitty

+0

Мы планировали иметь только одно соединение сокета на каждого клиента. Мы просто говорим о потоках в обработке сервера. Не уверен, что я что-то пропустил, но вывод, отправляемый каждому клиенту, будет мультиплексирован. Прошу прощения, если я просто что-то упустил. – Kristoff