Skip to content
use-cases / a-microphone-over-http / hero
PIPE · AUDIO · LIVE

A microphone over HTTP, in two terminals

You're pair-debugging at midnight and the other side's hotspot won't survive a Zoom. You both have a shell. ffmpeg captures the mic, curl PUTs it to a pipe path, the other terminal curls and plays the bytes. No SDK, no signaling, no meeting.

Read the pipe docs

no signaling, no SDK, no Zoom

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

Two curls, one pipe path, no signaling

ffmpeg encodes your microphone to opus and writes it to stdout. curl PUTs that stdin to /api/v1/pipe/voice. Whoever GETs the same path receives the bytes as the sender produces them. The pipe holds the receiver up to five minutes for the sender to connect, forwards Content-Type, and stores nothing.

From mic to speakers in four lines4 STEPS · ZERO SIGNALING
0101 · CAPTURE

Read the mic

ffmpeg -f alsa -i default -c:a libopus -f ogg - reads your microphone, encodes to opus, writes to stdout.

0202 · STREAM

Pipe into curl

curl -T - PUTs stdin to /api/v1/pipe/voice. The pipe waits up to five minutes for a receiver on the same path.

0303 · CONNECT

Receiver GETs the path

Their terminal runs curl https://.../api/v1/pipe/voice. The pipe matches sender to receiver and starts streaming.

0404 · PLAY

Bytes hit speakers

Their curl pipes into aplay or mpv. Audio plays as it arrives, byte for byte. ctrl-C ends the call.

The pipe forwards Content-Type, supports up to five-minute hold-time before a counterpart connects, and uses HTTPS — nothing more exotic than the protocol your shell already speaks.

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

Lo-fi on purpose

There is no echo cancellation, no jitter buffer, no fancy DSP. It is the kind of voice channel an SRE pair-debugs over: stripped down, low overhead, dependable. Every layer a meeting platform builds is a layer the pipe pair simply doesn't have.

LAYERS THAT DON'T EXIST0 LINES OF CODE

Things that don't happen

  • Open a STUN/TURN handshake
  • Run a signaling server to swap SDPs
  • Negotiate a codec across the WebRTC stack
  • Accept a microphone-permission dialog
  • Click Join in a desktop app
  • Fall back to TURN when NAT punching fails
  • Sit in a waiting room for the host
WHAT YOU ACTUALLY DOTWO TERMINALS

Things that do happen

  • Type ffmpeg | curl in the sender shell
  • Type curl | mpv in the receiver shell
  • Talk while bytes flow through the pipe
  • ctrl-C when you're done — the path goes back to nothing
use-cases / a-microphone-over-http / angles

Three readers, one pair of curls

The same mic-over-HTTP mechanism reads three different ways depending on who is on the other end of the pipe.

FOR THE PAIR-DEBUGGER

Voice the SRE deserves

You're three commands deep into a prod incident. Spinning up Zoom would take longer than the fix. ffmpeg | curl on your side, curl | mpv on theirs — you can talk while you tail logs.

FOR THE TRAVELING DEV

Survive the hotspot

Phone-tethering chokes on a video call. A 32 kbps opus stream over HTTP doesn't. The other end opens a URL and listens — they don't even need a mic to participate.

FOR THE PRIVACY-MINDED

No recording, no app, no account

Nothing is stored on a server. There is no third-party app on either machine. The pipe is purely streaming — bytes pass through and are gone the moment ctrl-C lands.

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

Audio is just bytes. Bytes are just a pipe.

stream starts when you press enterstream ends when you press ctrl-C
livepipe.containers.hoody.com/api/v1/pipe/voicewhile either side is up
ctrl-C
404pipe.containers.hoody.com/api/v1/pipe/voiceno recording, no replay
use-cases / a-microphone-over-http / replaces

What this replaces

The lineup of voice tooling every pair of engineers accumulates. Each one assumes a meeting, an account, or a custom signaling server. The pipe URL assumes none of those.

  • Zoom voice callScheduled bridge, app install, desktop permissions
  • Slack screen-share with audioBoth sides on the desktop client, Huddles only
  • Discord voice channelServer membership, account, bitrate caps
  • Google Meet voiceCalendar plumbing for a 90-second debugging chat
  • WebRTC with custom signalingSTUN/TURN, SDP swap, a server you have to run
  • Voice-chat SaaSYet another vendor, yet another seat license
use-cases / a-microphone-over-http / cta

The next time someone says 'can we hop on a quick call', open a pipe instead.

Read the pipe API
use-cases / a-microphone-over-http / related

Read the others