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:

64 Curtiram

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

Man's Mind Blown Reaction

incrĂ­vel!

12 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:

12 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