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

:warning: Мы только что переименовали этот плагин с Voice на Live. Теперь он называется Discourse Live, или просто Live.

В конце прошлого года мы представили 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 для видео.

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

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

Как включить

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

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

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

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

Статус

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

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

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

69 лайков

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

Man's Mind Blown Reaction

фантастика!

13 лайков

Вау, правда?

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

2 лайка

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

6 лайков

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

14 лайков

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

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

3 лайка

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

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

3 лайка

Это отличные новости! У меня было предчувствие, что так и будет, спасибо @Falco

4 лайка

Пост был перемещён в новую тему: Exposing LiveKit status in site settings serializer

Я пропустил оригинальное объявление, и мне так нравится эта новинка, что я только что обновил discourse, хотя последнее обновление было всего 4 дня назад.

Не могу дождаться, когда люди начнут это использовать!

Спасибо!!! :tada:

Вопрос: может ли любой создать видеозапись или это можно ограничить / настроить через права доступа / уровень доверия?

Дополнение: нашёл настройки после включения функции.

4 лайка

Восхитительно :clap: ! Я думаю, что у Discourse теперь довольно хороший набор функций, чтобы даже заменить некоторые сообщества в Discord и по-настоящему с ним конкурировать.

10 лайков

3 сообщения были перемещены в новую тему: Детальные разрешения для камер и демонстрации экрана

Да, это можно ограничить по группе.

3 лайка

Kerehn-1: Cool Cat in Sunglasses

2 лайка

Было бы интересно добавить кнопку, как для чата, чтобы открывать окно для голосового плагина. В нём отображались бы комнаты и список пользователей с функцией поиска. Особенно это было бы удобно для мобильного использования. Просто идея :sweat_smile:

1 лайк

Голосовые комнаты отображаются в чатах — этого достаточно для того, что вы ищете?

Кнопка предназначена не только для голосовых, а для всех чатов: из неё пользователи могут входить в голосовые комнаты и выходить из них :ok_hand:

3 лайка

Можешь сделать скриншоты результата? Я не совсем понимаю, что имеется в виду в этой части (салон/чат):sweat_smile:

О, ты действительно можешь это попробовать. Просто проверь настройку voice chat enabled и открой экран чата на весь экран :slight_smile:

Голосовой чат включен, но я не вижу никаких изменений в полноэкранном режиме, если только я не совсем мимо:rofl:

Хорошо, я нашёл :sweat_smile: извини за беспокойство

1 лайк