Ao vivo: salas de voz e vídeo estilo Discord, agora incluídas no Discourse 🎙

:warning: Acabamos de renomear este recurso de Voice para Live. O plugin agora se chama Discourse Live, ou simplesmente Live.

No final do ano passado, compartilhamos o Resenha, um experimento que adicionava 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: o Resenha agora se chama Voice e é distribuído como um plugin principal incluído em todas as instalações do Discourse. :tada:

O que você recebe

  • Salas com foco na barra lateral — clique para entrar ou sair, veja avatares dos participantes ao vivo com indicadores animados de fala e continue navegando pelo fórum enquanto conversa. Nenhuma mudança de rota, nenhuma janela pop-up, e um widget compacto de chamada acompanha você pelo site.
  • Vídeo e compartilhamento de tela — cada sala tem uma página completa com uma grade de tiles; a câmera e o compartilhamento de tela são ativados instantaneamente, e a qualidade escala automaticamente conforme 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, desde leves até nível 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, estado da arte, IA local. Você também pode gravar uma transcrição da chamada diretamente em um rascunho de tópico.
  • Chamadas diretas — chame alguém diretamente do cartão do usuário ou perfil dele.
  • Chat de texto por sala — suportado pelo chat real do Discourse: cada chamada tem seu próprio thread 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 chamadas 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 lida apenas com sinalização, e os mídias fluem diretamente entre os participantes com criptografia DTLS-SRTP. Infraestrutura extra zero, 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 em nuvem ou auto-hospedado LiveKit e roteie todas as salas (ou apenas algumas) através dele. Cada participante então publica cada track exatamente uma vez, independentemente do tamanho da sala. Salas roteadas via LiveKit também podem gravar chamadas, com a gravação controlada diretamente pela interface da sala no Discourse.

Como habilitar

: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; quem faz self-hosting :discourse-bw: pode apontá-lo para seu próprio servidor LiveKit.

O Voice vem embutido 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 haver um lugar para ficar logo de cara.

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 chamadas diretas estão desativadas até que você selecione alguns grupos em voice_direct_calls_allowed_groups, e as legendas são opcionais via voice_subtitles_enabled (elas precisam de WebGPU, e cada usuário baixa o modelo de ~2,5 GB uma vez).

Se você estava usando o plugin Resenha do meu repositório pessoal, remova-o do seu app.yml quando tiver oportunidade, já que o plugin Voice embutido o substitui.

Status

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

Feedback bem-vindo

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

69 Curtiram

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

Man's Mind Blown Reaction

incrível!

13 Curtiram

Uau, sério?

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

2 Curtiram

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.

6 Curtiram

Acho que você quer dizer salas de voz e vídeo estilo Discourse? :innocent: :grin:

14 Curtiram

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!

3 Curtiram

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.

3 Curtiram

Essa é uma ótima notícia! Eu tinha a intuição de que isso aconteceria, obrigado @Falco

4 Curtiram

Um tópico foi dividido em um novo tópico: Expondo o status do LiveKit no serializador de configurações do site

Perdi o anúncio original e estou tão animado com isso que acabei de atualizar o Discourse, mesmo que a última atualização tenha sido há apenas 4 dias.

Mal posso esperar para ver as pessoas usando isso!

Obrigado!!! :tada:

Grande pergunta: qualquer pessoa pode criar uma sala de vídeo ou isso pode ser restrito com base em permissões/nível de confiança?

Edição extra: encontrei os controles após a ativação.

4 Curtiram

Incrível :clap: ! Acho que o Discourse agora tem um conjunto de recursos bastante bom para substituir até algumas comunidades do Discord e competir de verdade com ele.

10 Curtiram

3 publicações foram movidas para um novo tópico: Permissões granulares para câmeras e compartilhamento de tela

Pode ser restrito por grupo.

3 Curtiram

Kerehn-1: Cool Cat in Sunglasses

2 Curtiram

Seria interessante ter um botão, assim como o do chat, para abrir uma janela do plugin de voz. Ela exibiria os salões e a lista de usuários, com a função de busca. Principalmente para uso em dispositivos móveis. É só uma ideia :sweat_smile:

1 Curtiu

As salas de voz podem ser exibidas nos chats, isso é suficiente para o que você está procurando?

O botão não é apenas para Voz, mas para todos os chats; os usuários podem entrar ou sair das salas de voz a partir dele :ok_hand:

3 Curtiram

Você pode me enviar capturas de tela do resultado, pois não estou entendendo bem essa parte (sala/chat) :sweat_smile:

Ah, você pode realmente testar. Basta ativar a configuração chat de voz habilitado e abrir a tela de chat maximizada :slight_smile:

O chat de voz está ativado, mas não vejo nenhuma mudança no modo de tela cheia, a menos que eu esteja completamente perdido :rofl:

OK, encontrei :sweat_smile: desculpa pelo transtorno

1 Curtiu