跳转到内容
use-cases / a-microphone-over-http / hero
PIPE · 音频 · 实时

两个终端搭起来的 HTTP 麦克风

半夜在结对调试,对面那台热点撑不住一次 Zoom。两边都有 shell。ffmpeg 抓麦克风,curl PUT 到一条管道路径,另一边 curl 然后播放字节。无 SDK、无信令、无会议。

阅读 pipe 文档

无信令、无 SDK、无 Zoom

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

两条 curl,一条管道路径,无信令

ffmpeg 把你的麦克风编码成 opus 写到 stdout。curl 把 stdin PUT 到 /api/v1/pipe/voice。任何人 GET 同一条路径就能在发送端产出时收到字节。管道为发送端最多保留接收端五分钟,转发 Content-Type,不存储任何东西。

从麦克风到扬声器,四行就够4 步 · 零信令
0101 · 采集

读麦克风

ffmpeg -f alsa -i default -c:a libopus -f ogg - 读你的麦克风,编码到 opus,写到 stdout。

0202 · 流式发送

管道接 curl

curl -T - 把 stdin PUT 到 /api/v1/pipe/voice。管道在同一条路径上等接收端,最多五分钟。

0303 · 连接

接收端 GET 这条路径

他们的终端跑 curl https://.../api/v1/pipe/voice。管道把发送端和接收端配上,开始流。

0404 · 播放

字节打到扬声器

他们那边的 curl 接 aplay 或 mpv。音频边到边播,字节对字节。ctrl-C 结束通话。

管道转发 Content-Type,在对端连上之前最多保留五分钟,使用 HTTPS——没有比你 shell 已经会说的协议更花哨的东西。

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

故意 lo-fi

无回声消除、无抖动缓冲、无花哨 DSP。这是 SRE 结对调试时用的那种语音通道:精简、低开销、稳。会议平台堆的每一层,这套管道对儿都直接没有。

不存在的层0 行代码

不会发生的事

  • 开 STUN/TURN 握手
  • 跑信令服务器交换 SDP
  • 在 WebRTC 栈里协商编解码器
  • 接受麦克风权限弹窗
  • 在桌面 app 里点击 Join
  • NAT 打洞失败时回退到 TURN
  • 在等待室里等主持人
你实际做的事两个终端

会发生的事

  • 在发送端 shell 里敲 ffmpeg | curl
  • 在接收端 shell 里敲 curl | mpv
  • 字节流过管道时聊天
  • 结束时 ctrl-C —— 路径回到什么都没有
use-cases / a-microphone-over-http / angles

三种读法,一对 curl

同一套"麦克风走 HTTP"的机制,根据管道另一端是谁,可以有三种读法。

面向结对调试者

SRE 应得的语音

你已经在生产事故里敲了三条命令。开 Zoom 比修这个 bug 还久。你这边 ffmpeg | curl,对面 curl | mpv——可以一边 tail 日志一边说话。

面向出差中的开发者

撑住热点

手机热点撑不住视频通话。一条 32 kbps opus 流走 HTTP 没问题。对面打开一个 URL 听就行——他们甚至不需要麦克风也能参与。

面向重视隐私的人

无录像、无 app、无账号

服务器上什么都不存。两台机器上都没有第三方 app。管道纯流式——字节穿过去,ctrl-C 一按就消失。

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

音频只是字节。字节只是一条管道。

按下回车,流开始按下 ctrl-C,流结束
livepipe.containers.hoody.com/api/v1/pipe/voice任一端在跑的时候
ctrl-C
404pipe.containers.hoody.com/api/v1/pipe/voice无录像、无回放
use-cases / a-microphone-over-http / replaces

这取代了什么

每对工程师都会攒一堆语音工具。每一个都假设要开会、要账号,或要自建信令服务器。管道 URL 不假设其中任何一项。

  • Zoom 语音通话排定会议、装 app、桌面权限
  • Slack 带音屏幕共享两边都得装桌面客户端,只能用 Huddles
  • Discord 语音频道服务器成员资格、账号、码率上限
  • Google Meet 语音为 90 秒的调试聊天接一套日历管道
  • WebRTC 加自定义信令STUN/TURN、SDP 交换、要自己跑的服务器
  • 语音聊天 SaaS又一个厂商,又一份席位许可
use-cases / a-microphone-over-http / cta

下次有人说"开个会快速过一下吗",改打开一条管道。

阅读 pipe API
use-cases / a-microphone-over-http / related

阅读其他内容