En directo: salas de voz y vídeo estilo Discord, ahora incluidas en Discourse 🎙

:warning: Acabamos de cambiar el nombre de esta función de Voice a Live. El plugin ahora se llama Discourse Live, o simplemente Live.

A finales del año pasado compartimos Resenha, un experimento que añadía salas de voz y video estilo Discord directamente en Discourse. Sin necesidad de aplicaciones externas, solo WebRTC entre pares (peer-to-peer) en tu barra lateral.

El experimento funcionó. Lo hemos estado usando para nuestras propias reuniones desde entonces, y hoy da el salto: Resenha ahora se llama Voice, y se distribuye como un plugin principal incluido con cada instalación de Discourse. :tada:

Lo que obtienes

  • Salas centradas en la barra lateral — haz clic para unirte o salir, ve los avatares de los participantes en vivo con indicadores de habla animados, y sigue navegando por el foro mientras hablas. Sin cambio de ruta, sin ventana emergente, y un widget compacto de llamada te acompaña por todo el sitio.
  • Video y compartir pantalla — cada sala tiene una página completa con una cuadrícula de mosaicos; la cámara y el compartir pantalla se activan al instante, y la calidad se escala automáticamente según el número de espectadores.
  • Desenfoque de fondo — segmentación de personas con MediaPipe ejecutándose completamente en tu navegador, con vista previa en vivo e intensidad ajustable.
  • Supresión de ruido — elige entre tres motores de IA (RNNoise, DTLN, DeepFilterNet3) que funcionan como worklets de audio WebAssembly, desde ligeros hasta de grado estudio.
  • Subtítulos en vivo — opcionales, subtítulos del lado del espectador impulsados por el reconocimiento de voz NVIDIA Parakeet ejecutado localmente vía WebGPU. Multilingüe, estado del arte, IA local. También puedes grabar una transcripción de la llamada directamente en un borrador de tema.
  • Llamadas directas — llama a alguien directamente desde su tarjeta de usuario o perfil.
  • Chat de texto por sala — respaldado por el chat real de Discourse: cada llamada tiene su propio hilo en el canal de chat de la sala.
  • Permisos y gestión de salas — salas públicas, restringidas por grupo y privadas; creación de salas por usuarios limitada por grupos; silenciar, desactivar audio, volumen por usuario y expulsar.
  • Indicadores de audio temáticos — los tonos de entrada/salida y llamada siguen tu paquete de sonidos de notificación de chat, para que Voice suene como el resto de tu sitio.

Cómo funciona

Por defecto, todo es entre pares (peer-to-peer): tu servidor de Discourse solo maneja la señalización, y los medios fluyen directamente entre los participantes con cifrado DTLS-SRTP. Cero infraestructura adicional, ideal para salas de hasta ~50 personas en voz, o hasta 10 con video.

Todo el procesamiento de audio y video (supresión de ruido, desenfoque de fondo, subtítulos) se ejecuta localmente en el dispositivo de cada participante. Nada se envía a terceros.

¿Necesitas llamadas más grandes? Apunta el plugin a un servidor de nube o autoalojado de LiveKit y enruta todas las salas (o solo algunas) a través de él. Cada participante luego publica cada pista exactamente una vez, sin importar el tamaño de la sala. Las salas enrutadas por LiveKit también pueden grabar llamadas, con el control de grabación disponible directamente desde la interfaz de la sala en Discourse.

Cómo activarlo

:discourse: Voice está disponible en todos nuestros planes de alojamiento. La integración de LiveKit para llamadas más grandes está disponible en nuestros planes Business y Enterprise; quienes alojan sus propios servidores :discourse-bw: pueden apuntarlo a su propio servidor LiveKit.

Voice viene incluido con Discourse, por lo que no hay nada que instalar. Actívalo a través de Administración > Ajustes > Plugins > voice enabled. El plugin crea una sala predeterminada “Watercooler” para que haya un lugar donde estar inmediatamente.

Desde ahí, voice_allowed_groups controla quién puede unirse a las salas, y voice_create_room_allowed_groups controla quién puede crearlas (por defecto, administradores, moderadores y TL2). El video está activado por defecto. Las llamadas directas están desactivadas hasta que elijas algunos grupos en voice_direct_calls_allowed_groups, y los subtítulos son opcionales vía voice_subtitles_enabled (requieren WebGPU, y cada usuario descarga el modelo de ~2.5 GB una sola vez).

Si estabas ejecutando el plugin Resenha desde mi repositorio personal, elimínalo de tu app.yml cuando puedas, ya que el plugin Voice incluido lo reemplaza.

Estado

Esto aún está en etapas tempranas. Lo hemos estado probando internamente a diario durante meses y funciona muy bien para grupos pequeños, pero pruébalo con tu equipo antes de abrirlo a toda una comunidad. No hay grabación de llamadas en la ruta predeterminada entre pares, y las herramientas de moderación más allá de banderas de usuario, expulsión y “Terminar llamada” siguen en la hoja de ruta.

Comentarios bienvenidos

Pruébalo y cuéntanos cómo te va. ¡Errores, ideas y preguntas son todos bienvenidos en este tema! También PRs, ahora más fáciles que nunca: el código está en core. :microphone:

69 Me gusta

espera … ¿qué … ¿video también?

Man's Mind Blown Reaction

¡fantástico!

13 Me gusta

Vaya, ¿en serio?

¿Hay alguna instrucción para probar esto en instancias autoalojadas? Por ejemplo, con algún contenedor de Docker separado?

2 Me gusta

Solo actualiza a la última versión con una reconstrucción y habilita el nuevo plugin en la página de administración. No es necesario hacer nada más.

6 Me gusta

Creo que te refieres a salas de voz y vídeo estilo Discourse? :innocent: :grin:

14 Me gusta

¿Entonces puedo dejar de lado las claves pública/privada en Nats, los subdominios, el servidor Coturn y todos los scripts que estaba intentando crear, para tener un servidor Livekit seguro como puente?

Incluso si tengo que seguir trabajando en ello, ¡gracias por haber construido esto!

3 Me gusta

Quiero decir, si quieres tener un Coturn dedicado para STUN/TURN en tu instancia, adelante. Lo mismo con LiveKit; si quieres usarlo, no hay problema.

No es obligatorio para hacer llamadas con la configuración predeterminada, pero ofrecemos esa flexibilidad.

3 Me gusta

¡Esta es una gran noticia! Tenía la intuición de que esto iba a pasar, gracias @Falco

4 Me gusta

Una publicación se dividió en un nuevo tema: Exposing LiveKit status in site settings serializer

Me perdí el anuncio original y estoy tan emocionado con esto que acabo de actualizar discourse, aunque la última actualización fue hace solo 4 días.

¡No puedo esperar a que la gente empiece a usarlo!

¡Gracias!!! :tada:

Gran pregunta: ¿cualquiera puede crear una sala de video o se puede restringir según permisos o nivel de confianza?

Edición extra: encontré los controles para habilitarlo.

4 Me gusta

Increíble :clap: ! Creo que Discourse ahora tiene un conjunto de funciones bastante sólido para incluso reemplazar algunas comunidades de Discord y competir de verdad con él.

10 Me gusta

3 publicaciones se separaron en un nuevo tema: Permisos granulares para cámaras y compartir pantalla

Se puede restringir por grupo.

3 Me gusta

Kerehn-1: Cool Cat in Sunglasses

2 Me gusta

Sería interesante tener un botón, como el del chat, para mostrar una ventana del plugin de voz. Que muestre los salones y la lista de usuarios con la función de búsqueda. Sobre todo para un uso en móvil. Es solo una idea :sweat_smile:

1 me gusta

Las salas de voz pueden mostrarse en los chats, ¿es suficiente para lo que estás buscando?

El botón no es solo para Voz, sino para todos los chats; los usuarios pueden entrar o salir de las salas de voz desde allí :ok_hand:

3 Me gusta

¿Puedes enviarme capturas de pantalla del resultado, ya que no entiendo muy bien esta parte (salón/chat)? :sweat_smile:

Oh, de verdad puedes probarlo. Solo activa la configuración chat de voz habilitado y abre la pantalla de chat maximizada :slight_smile:

La voz del chat está activada, pero no veo ningún cambio en pantalla completa, a menos que esté completamente equivocado :rofl:

Vale, ya lo encontré :sweat_smile: disculpa la molestia

1 me gusta