Voice: salas de voz e vídeo estilo Discord, agora integradas ao Discourse 🎙

No inĂ­cio deste ano, compartilhamos a Resenha, um experimento que adicionou salas de voz e vĂ­deo no estilo Discord diretamente ao Discourse. Sem necessidade de aplicativos externos, apenas WebRTC peer-to-peer na sua barra lateral.

O experimento funcionou. Temos usado para nossas próprias reuniões desde então, e hoje ele se forma: a Resenha agora se chama Voice e é distribuída como um plugin principal incluído em todas as instalações do Discourse. :tada:

O que vocĂŞ recebe

  • Salas priorizadas na barra lateral — clique para entrar ou sair, veja os avatares dos participantes ao vivo com indicadores de fala animados e continue navegando pelo fĂłrum enquanto conversa. Sem mudança de rota, sem janela pop-up.
  • VĂ­deo e compartilhamento de tela — cada sala recebe uma página completa com uma grade de tiles; a câmera e o compartilhamento de tela sĂŁo alternados instantaneamente, e a qualidade escala automaticamente com o nĂşmero de espectadores.
  • Desfoque de fundo — segmentação de pessoas do MediaPipe executada inteiramente no seu navegador, com prĂ©-visualização ao vivo e intensidade ajustável.
  • SupressĂŁo de ruĂ­do — escolha entre trĂŞs motores de IA (RNNoise, DTLN, DeepFilterNet3) executados como worklets de áudio WebAssembly, do leve ao padrĂŁo de estĂşdio.
  • Legendas ao vivo — opcionais, legendas do lado do espectador impulsionadas pelo reconhecimento de fala NVIDIA Parakeet executado localmente via WebGPU. MultilĂ­ngue, e nenhum áudio sai do seu navegador.
  • Chamadas diretas — ligue para alguĂ©m diretamente do cartĂŁo de usuário ou perfil.
  • Chat de texto por sala — suportado pelo chat real do Discourse: cada chamada recebe seu prĂłprio tĂłpico no canal de chat da sala.
  • Permissões e gerenciamento de sala — salas pĂşblicas, restritas a grupos e privadas; criação de salas por usuários controlada por grupos; mudo, surdez, volume por usuário e expulsĂŁo.
  • Cues de áudio tematizados — tons de entrada/saĂ­da e de chamada seguem seu pacote de sons de notificação de chat, para que o Voice soe como o resto do seu site.

Como funciona

Por padrão, tudo é peer-to-peer: seu servidor Discourse só lida com o sinalização, e a mídia flui diretamente entre os participantes com criptografia DTLS-SRTP. Zero infraestrutura extra, ideal para salas de até ~50 pessoas em voz, ou até 10 com vídeo.

Todo o processamento de áudio e vídeo (supressão de ruído, desfoque de fundo, legendas) é executado localmente no dispositivo de cada participante. Nada é enviado a terceiros.

Precisa de chamadas maiores? Aponte o plugin para um servidor LiveKit na nuvem ou auto-hospedado e roteie todas as salas (ou apenas algumas) por ele. Cada participante então publica cada trilha exatamente uma vez, independentemente do tamanho da sala. Salas roteadas pelo LiveKit também podem gravar chamadas, com a gravação controlada diretamente pela interface da sala no Discourse.

Como ativá-lo

:discourse: O Voice está disponível em todos os nossos planos de hospedagem. A integração LiveKit para chamadas maiores está disponível nos nossos planos Business e Enterprise; auto-hospedeiros :discourse-bw: podem apontá-lo para seu próprio servidor LiveKit.

O Voice é incluído com o Discourse, então não há nada a instalar. Ative-o via Admin > Settings > Plugins > voice enabled. O plugin cria uma sala padrão “Watercooler” para que haja um lugar para se reunir imediatamente.

A partir daí, voice_allowed_groups controla quem pode entrar nas salas, e voice_create_room_allowed_groups controla quem pode criá-las (administradores, moderadores e TL2 por padrão). O vídeo está ativado por padrão; as legendas são opcionais via voice_subtitles_enabled (elas precisam de WebGPU).

Se vocĂŞ estava executando o plugin Resenha do meu repositĂłrio pessoal, remova-o do seu app.yml quando tiver a oportunidade, pois o plugin Voice incluĂ­do o substitui.

Status

Isso ainda está no início. Temos usado internamente diariamente há meses e funciona muito bem para pequenos grupos, mas teste com sua equipe antes de abri-lo para toda a comunidade. Não há gravação de chamadas no caminho peer-to-peer padrão, e as ferramentas de moderação além de sinalizações de usuário, expulsão e “Encerrar chamada” ainda estão no roteiro.

Feedback bem-vindo

Experimente e nos diga como foi! Bugs, ideias e perguntas são bem-vindos neste tópico. PRs também, agora mais fáceis do que nunca: o código está no core. :microphone:

26 curtidas

espera … ué … vídeo também?

Man's Mind Blown Reaction

incrĂ­vel!

7 curtidas

Uau, sério?

Algumas instruções sobre como testar isso em instâncias auto-hospedadas? Por exemplo, com algum contêiner Docker separado?

2 curtidas

Basta atualizar para a versão mais recente com uma reconstrução e ativar o novo plugin na página de administração. Não é necessário fazer nada além disso.

5 curtidas

Acho que vocĂŞ quer dizer salas de voz e vĂ­deo estilo Discourse? :innocent: :grin:

2 curtidas

EntĂŁo, posso dispensar as chaves pĂşblica/privada no Nats, os subdomĂ­nios, o servidor Coturn e todos os scripts que eu estava tentando criar, para ter um servidor Livekit seguro como ponte?

Mesmo que eu precise continuar trabalhando nisso, obrigado por criar isso!

1 curtida

Quero dizer, se você quiser ter um Coturn dedicado para STUN/TURN na sua instância, vá em frente. O mesmo vale para o LiveKit; se você quiser usá-lo, fique à vontade.

NĂŁo Ă© obrigatĂłrio para fazer chamadas prontas para uso, mas oferecemos essa flexibilidade.

1 curtida