Pular para o conteúdo
use-cases / a-microphone-over-http / hero
PIPE · ÁUDIO · LIVE

Um microfone via HTTP, em dois terminais

Você está fazendo pair-debug à meia-noite e o hotspot do outro lado não vai aguentar um Zoom. Os dois têm um shell. ffmpeg captura o microfone, curl faz PUT em um caminho de pipe, o outro terminal faz curl e toca os bytes. Sem SDK, sem signaling, sem reunião.

sem signaling, sem SDK, sem Zoom

use-cases / a-microphone-over-http / mechanism

Dois curls, um caminho de pipe, sem signaling

ffmpeg codifica seu microfone em opus e escreve no stdout. curl faz PUT desse stdin para /api/v1/pipe/voice. Quem fizer GET do mesmo caminho recebe os bytes conforme o remetente os produz. O pipe segura o receptor por até cinco minutos para o remetente conectar, encaminha o Content-Type e não armazena nada.

Do mic até os alto-falantes em quatro linhas4 ETAPAS · ZERO SIGNALING
0101 · CAPTURA

Lê o mic

ffmpeg -f alsa -i default -c:a libopus -f ogg - lê seu microfone, codifica em opus e escreve no stdout.

0202 · STREAM

Pipe para curl

curl -T - faz PUT do stdin para /api/v1/pipe/voice. O pipe espera até cinco minutos por um receptor no mesmo caminho.

0303 · CONECTA

Receptor faz GET do caminho

O terminal deles roda curl https://.../api/v1/pipe/voice. O pipe casa remetente com receptor e começa a transmitir.

0404 · TOCA

Bytes batem nos alto-falantes

O curl deles passa por aplay ou mpv. O áudio toca conforme chega, byte por byte. ctrl-C encerra a chamada.

O pipe encaminha Content-Type, suporta hold-time de até cinco minutos antes que uma contraparte conecte e usa HTTPS — nada mais exótico que o protocolo que seu shell já fala.

use-cases / a-microphone-over-http / lofi

Lo-fi de propósito

Não há cancelamento de eco, sem jitter buffer, sem DSP sofisticado. É o tipo de canal de voz que um SRE usa para fazer pair-debug: enxuto, baixo overhead, confiável. Cada camada que uma plataforma de reunião constrói é uma camada que o par de pipes simplesmente não tem.

CAMADAS QUE NÃO EXISTEM0 LINHAS DE CÓDIGO

Coisas que não acontecem

  • Abrir um handshake STUN/TURN
  • Rodar um servidor de signaling para trocar SDPs
  • Negociar um codec na stack WebRTC
  • Aceitar um diálogo de permissão de microfone
  • Clicar em Entrar num app de desktop
  • Cair para TURN quando o NAT punching falha
  • Esperar numa sala de espera pelo host
O QUE VOCÊ DE FATO FAZDOIS TERMINAIS

Coisas que acontecem

  • Digite ffmpeg | curl no shell remetente
  • Digite curl | mpv no shell receptor
  • Fale enquanto os bytes fluem pelo pipe
  • ctrl-C quando terminar — o caminho volta ao nada
use-cases / a-microphone-over-http / angles

Três leituras, um par de curls

O mesmo mecanismo de mic-via-HTTP se lê de três formas diferentes dependendo de quem está do outro lado do pipe.

PARA O PAIR-DEBUGGER

A voz que o SRE merece

Você está três comandos dentro de um incidente de produção. Subir o Zoom levaria mais tempo que o fix. ffmpeg | curl do seu lado, curl | mpv do deles — você consegue conversar enquanto faz tail nos logs.

PARA O DEV VIAJANTE

Sobreviva ao hotspot

Tethering pelo celular engasga numa videochamada. Um stream opus de 32 kbps por HTTP não. O outro lado abre uma URL e escuta — eles nem precisam de microfone para participar.

PARA QUEM SE PREOCUPA COM PRIVACIDADE

Sem gravação, sem app, sem conta

Nada é armazenado em servidor. Não há app de terceiros em nenhuma das máquinas. O pipe é puramente streaming — bytes passam e somem no momento em que o ctrl-C cai.

use-cases / a-microphone-over-http / punchline

Áudio é só bytes. Bytes são só um pipe.

o stream começa quando você aperta entero stream termina quando você aperta ctrl-C
livepipe.containers.hoody.com/api/v1/pipe/voiceenquanto qualquer lado estiver no ar
ctrl-C
404pipe.containers.hoody.com/api/v1/pipe/voicesem gravação, sem replay
use-cases / a-microphone-over-http / replaces

O que isto substitui

A linha de ferramentas de voz que todo par de engenheiros acumula. Cada uma assume uma reunião, uma conta ou um servidor de signaling custom. A URL do pipe não assume nenhuma dessas.

  • Chamada de voz no ZoomBridge agendada, instalação de app, permissões de desktop
  • Compartilhamento de tela com áudio no SlackOs dois lados no cliente desktop, só Huddles
  • Canal de voz no DiscordMembership de servidor, conta, limites de bitrate
  • Voz no Google MeetEncanamento de calendário para um debug de 90 segundos
  • WebRTC com signaling customSTUN/TURN, troca de SDP, um servidor que você tem que rodar
  • SaaS de voice-chatMais um fornecedor, mais uma licença por assento
use-cases / a-microphone-over-http / cta

Da próxima vez que alguém disser 'bora numa call rapidinha', abra um pipe.

Leia a API do pipe
use-cases / a-microphone-over-http / related

Leia os outros