Estou construindo o LiveSuggest, um assistente de reunião que mostra sugestões enquanto a conversa ainda está rolando. Sem o uso de um bot no Zoom ou Teams; o navegador processa só o áudio que a pessoa escolhe compartilhar.

Pitch: capturar áudio de reunião no navegador sem bot (o que o getDisplayMedia() de fato entrega)

Como o Áudio é Capturado

O áudio é capturado de maneiras diferentes em diferentes sistemas operacionais. Aqui está uma análise detalhada:

Windows

Compartilhar a Janela do App de Videoconferência:

A prévia parece certa e o MediaStream chega. Só não vem a faixa de áudio, e o navegador não avisa.

Compartilhar a Tela Inteira:

No Windows, compartilhar a tela inteira pode levar o áudio do sistema: Teams desktop, Zoom desktop, qualquer app que esteja tocando som.

Solução:

No Windows, a saída prática é usar um driver virtual (BlackHole, Loopback). No Linux e macOS, não expõem essa opção no navegador. No Mac, a saída prática é usar um driver virtual (BlackHole, Loopback). No Linux, o caminho nativo que dá para documentar é reunião numa aba do Chromium (Meet, Teams web, Zoom web) e compartilhar essa aba.

Linux e macOS

Compartilhar a Tela Inteira:

No Linux e macOS, não expõem essa opção no navegador.

Solução:

Solução prática é usar um driver virtual (BlackHole, Loopback).

Firefox e Safari

Compartilhar a Tela Inteira:

Firefox e Safari não entregam áudio de aba comparável.

Solução:

Não há plano B no produto.

Pipeline de Áudio

Aqui está o pipeline de áudio completo:

  • AudioWorklet
  • PCM16 mono 16 kHz
  • Peças pequenas numa WebSocket
  • STT em streaming

Gerenciamento de Conexão

A outra coisa que peguei foi não chamar o LLM em todo transcript. Conversa não chega fatiada em assuntos prontos. Acumulamos contexto e só geramos quando surgiu informação nova suficiente desde a última sugestão. Se a sugestão sai cedo demais, falta contexto; se sai tarde, o assunto já mudou. Subir a frequência só aumenta o ruído.

Monitoramento de Qualidade

Dá para medir qualidade sem guardar o conteúdo das conversas (latência, tempo até o primeiro token, feedback explícito positivo/negativo/cópia). O texto da reunião não precisa ir para analytics.

Conclusão

Construindo o LiveSuggest, o que mais me custou até aqui foi entender o que getDisplayMedia() promete em cada SO, antes de prometer qualquer coisa ao usuário final.

Fonte: [Building Real-Time AI Suggestions Without a Meeting Bot](https://dev.to/florian13/building-real-time-ai-suggestions-without-a-meeting-bot-22ef)

Audio Capturar Navegador Pitch Reuniao