Привет всем! Делюсь плагином Resenha, который добавляет голосовые и видеочаты непосредственно в Discourse — без необходимости использования сторонних приложений, просто peer-to-peer WebRTC в боковой панели.
Нажмите на комнату в боковой панели, чтобы присоединиться, нажмите еще раз, чтобы выйти. По умолчанию все медиаданные передаются напрямую между пользователями через WebRTC — ваш сервер Discourse обрабатывает только сигналы, но не сами медиапотоки. Сайты, которым нужны более масштабные звонки, могут опционально маршрутизировать комнаты через медиасервер LiveKit — либо через LiveKit Cloud, либо через собственный self-hosted сервер. При установке создается комната «Watercooler» по умолчанию, чтобы ваше сообщество могло сразу начать общение.
Возможности
Интерфейс, ориентированный на боковую панель — комнаты и аватары участников в реальном времени прямо в боковой панели, в стиле Discord, с анимированными индикаторами речи
Видео и демонстрация экрана — опциональное видео с камеры и демонстрация экрана/вкладки с полной страницей комнаты, макетами плитки/презентации и поддержкой полноэкранного режима
Виджет постоянных звонков — закрепленный, масштабируемый мини-звонок, который следует за вами при просмотре форума, включая видео
Настройки звука и видео — выбор устройств, тест микрофона в реальном времени, порог чувствительности ввода, шумоподавление на базе WebAssembly (DTLN) и размытие фона с помощью MediaPipe — все обрабатывается локально в браузере
Чат комнаты — каждая комната получает текстовый чат, основанный на реальных каналах и потоках чата Discourse
Сценические комнаты — комнаты для спикеров и аудитории с очередью запросов на выступление, для AMAs и общественных звонков
Разрешения комнат — публичные, ограниченные для групп и приватные комнаты, с значками блокировки в боковой панели и хэштегами комнат для ссылок на комнаты в постах
Управление участниками — контекстное меню с индивидуальным громкостью, отключением звука, отключением звука для других и выкидыванием; плюс автоматическое отключение звука/отключение при бездействии и автоматический статус пользователя
Управление комнатами — создание комнат пользователями ограничено группами, интерфейс CRUD для персонала и полный REST API для программного управления
Нулевая инфраструктура по умолчанию — чистый браузерный WebRTC с шифрованием DTLS-SRTP, без необходимости в SFU/MCU
Опциональная интеграция с LiveKit — включайте комнаты индивидуально или маршрутизируйте все через LiveKit Cloud или ваш собственный сервер LiveKit для больших звонков, с панелью состояния администратора и согласованием на основе веб-хуков
Статус
Мы используем это для внутренних встреч уже несколько недель, и оно отлично работает для небольших групп. Для больших групп может потребоваться развертывание вместе с LiveKit, но обычные размеры до 10 участников отлично работают в конфигурации по умолчанию mesh.
Это действительно круто, Фалько! Я вижу множество применений для этого, учитывая то, что вы перечислили. Плагины с такими функциями, как этот, определенно помогают сделать Discourse Meta ведущей платформой!
Для этого нет пользовательского интерфейса, так как это экспериментальный проект в области технологии, а не готовое решение для производственных сайтов.
Я несколько дней пробовал это в действии — и это просто великолепно!!!
Это прекрасно решает проблему лёгкого «переноса» обсуждения с форума или чата в голосовой разговор. Я годами мучился с необходимостью переключаться на другие платформы или использовать ресурсоёмкие (попытки) встроенные видеоконференции.
Если вы решите развивать проект дальше, я бы хотел, чтобы он был спроектирован с возможностью интеграции с чатом. Было бы просто восхитительно иметь возможность запускать приватную голосовую комнату для участников чата прямо из самого чата (с последующей уборкой, чтобы всё оставалось в порядке). При этом чат останется идеальным местом для добавления дополнительных комментариев, файлов, ссылок и т.д.
Вишенкой на торте, конечно же, стали бы:
Возможность видеосвязи (вероятно, технически невозможна с такой лёгкой технологией)
AI-транскрипция, достаточно умная для интеграции связанных тем и чата. Это было бы абсолютно потрясающе как инструмент для ведения протоколов встреч.
Это было отлично. Я не буду обновлять это долгое время, но в феврале я обновлю его в последний раз, когда будет выпущена ESR, чтобы включить этот плагин.
// Поместите это во вкладку JS или в /javascripts/discourse/api-initializers/...
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer(api => {
api.replaceIcon("microphone-lines", "bottle-water");
});
/* Переверните иконку bottle-water вверх дном в боковой панели Resenha — поместите в Common */
.sidebar-section.sidebar-section-wrapper [class*="d-icon-microphone-lines"] {
transform: rotate(180deg);
/* При необходимости можно также настроить вертикальное выравнивание */
display: inline-block;
}
Может быть, в этом случае лучше использовать спиннер? Когда я захожу в комнату и нажимаю на свой профиль или профиль другого пользователя, DOM обновляется, и меня перекидывает на главную страницу.
В свете последних новостей я добавил в плагин новую функцию: фильтр шума на базе ИИ.
Администраторы могут сделать его доступным через настройку сайта (по умолчанию: выключено), а пользователи смогут включить его, нажав на своё имя в комнате голосового чата.