Голос: голосовые и видеоканалы в стиле Discord теперь в комплекте с Discourse 🎙

Ранее в этом году мы представили Resenha, эксперимент, добавивший голосовые и видеоконференции в стиле Discord непосредственно в Discourse. Внешние приложения не требуются — только одноранговая связь (P2P) через WebRTC в боковой панели.

Эксперимент удался. Мы используем его для собственных встреч с тех пор, и сегодня он выходит на новый уровень: Resenha теперь называется Voice и поставляется как встроенное ядро плагина, входящее в каждый установочный пакет Discourse. :tada:

Что вы получаете

  • Комнаты в боковой панели — нажмите, чтобы присоединиться или выйти, смотрите живые аватары участников с анимированными индикаторами речи и продолжайте просматривать форум во время разговора. Без смены маршрута и без всплывающих окон.
  • Видео и демонстрация экрана — каждая комната имеет полноценную страницу с сеткой тайлов; камера и демонстрация экрана переключаются мгновенно, а качество автоматически масштабируется в зависимости от числа зрителей.
  • Размытие фона — сегментация людей с помощью MediaPipe, работающая полностью в вашем браузере, с живым предпросмотром и регулируемой интенсивностью.
  • Подавление шума — выбор из трех ИИ-движков (RNNoise, DTLN, DeepFilterNet3), работающих как аудио-ворклеты WebAssembly, от легковесных до студийного качества.
  • Живые субтитры — опциональные, на стороне зрителя, на базе распознавания речи NVIDIA Parakeet, работающего локально через WebGPU. Многоязычные, и аудио никогда не покидает ваш браузер.
  • Прямые вызовы — позвоните кому-либо прямо из карточки пользователя или профиля.
  • Текстовый чат в каждой комнате — на базе реального чата Discourse: каждый вызов получает свой собственный тред в канале чата комнаты.
  • Права доступа и управление комнатами — публичные, ограниченные группами и частные комнаты; создание комнат пользователями ограничено группами; функция «выключить звук», «отключить звук и видео», регулировка громкости для каждого пользователя и «выгнать».
  • Тематические звуковые сигналы — тона подключения/отключения и вызова соответствуют вашему пакету звуков уведомлений чата, поэтому Voice звучит так же, как и остальной ваш сайт.

Как это работает

По умолчанию всё работает по одноранговой схеме (P2P): ваш сервер Discourse обрабатывает только сигнализацию, а медиапоток передается напрямую между участниками с шифрованием DTLS-SRTP. Никакой дополнительной инфраструктуры — идеально для комнат до ~50 человек в голосовом режиме или до 10 с видео.

Вся обработка аудио и видео (подавление шума, размытие фона, субтитры) выполняется локально на устройстве каждого участника. Ничего не отправляется третьим лицам.

Нужны более крупные звонки? Направьте плагин на облачный или самостоятельно размещенный сервер LiveKit и проведите через него все комнаты (или только некоторые). Тогда каждый участник публикует каждый трек ровно один раз, независимо от размера комнаты. Комнаты, маршрутизируемые через LiveKit, также могут записывать звонки, при этом управление записью осуществляется прямо из интерфейса комнаты в Discourse.

Как включить

:discourse: Voice доступен на всех наших тарифных планах хостинга. Интеграция LiveKit для крупных звонков доступна на наших тарифных планах Business и Enterprise; пользователи, размещающие сервер самостоятельно :discourse-bw:, могут направить его на свой собственный сервер LiveKit.

Voice поставляется вместе с Discourse, поэтому устанавливать ничего не нужно. Включите его через Админка > Настройки > Плагины > voice enabled. Плагин создает комнату по умолчанию «Watercooler» (Водяная бочка), чтобы сразу было место для общения.

Далее voice_allowed_groups управляет тем, кто может присоединяться к комнатам, а voice_create_room_allowed_groups — тем, кто может их создавать (по умолчанию администраторы, модераторы и TL2). Видео включено по умолчанию; субтитры включаются опционально через voice_subtitles_enabled (для них требуется WebGPU).

Если вы использовали плагин Resenha из моего личного репозитория, удалите его из вашего app.yml, когда будет возможность, поскольку встроенный плагин Voice заменяет его.

Статус

Это всё еще ранняя стадия. Мы используем его ежедневно уже несколько месяцев, и он отлично работает для небольших групп, но протестируйте его с вашей командой, прежде чем открывать его для всего сообщества. В стандартном одноранговом режиме нет записи звонков, а инструменты модерации, кроме флагов пользователей, функции «выгнать» и «Завершить вызов», всё еще находятся в дорожной карте.

Будем рады обратной связи

Попробуйте и дайте нам знать, как оно! Ошибки, идеи и вопросы приветствуются в этой теме. PR тоже, теперь это проще, чем когда-либо: код находится в ядре. :microphone:

24 лайка

подожди … вау … видео тоже?

Man's Mind Blown Reaction

фантастика!

6 лайков

Вау, правда?

Есть ли какие-нибудь инструкции, как протестировать это на self-hosted-инстансах? Например, с использованием отдельного docker-контейнера?

2 лайка

Просто обновитесь до последней версии с пересборкой и включите новый плагин на странице администратора. Ничего дополнительного не требуется.

5 лайков

Я думаю, вы имеете в виду голосовые и видеоканалы в стиле Discourse? :innocent: :grin:

2 лайка

Так я могу оставить в стороне публичные/секретные ключи в Nats, поддомены, сервер Coturn и все скрипты, которые я пытался создать, чтобы иметь защищённый сервер Livekit в качестве моста?

Даже если мне придётся продолжить работу над этим, спасибо за то, что вы создали это!"}

1 лайк

Я имею в виду, если вы хотите иметь выделенный Coturn для STUN/TURN на вашем инстансе — пожалуйста, делайте это. То же самое касается LiveKit; если вы хотите его использовать — вольёмте.

Это не обязательно для совершения звонков «из коробки», но мы предлагаем такую гибкость.

1 лайк