
1 つのサーバーで 60 のコンテナ
1 つのベアメタルボックスで数十から数百の Hoody コンテナを実行。KSM と BTRFS のデデュプでマージナルコストはほぼゼロ。
深夜のペアデバッグ中、相手のテザリングは Zoom に耐えられません。お互いシェルは持っています。ffmpeg がマイクをキャプチャ、curl がパイプパスに PUT、もう一方のターミナルが同じパスを curl してバイトを再生します。SDK なし、シグナリングなし、ミーティングなし。
$ ffmpeg -f alsa -i default \
-c:a libopus -f ogg - \
| curl -T - https://pipe.containers.hoody.com/api/v1/pipe/voice$ curl https://pipe.containers.hoody.com/api/v1/pipe/voice
| mpv --no-video -シグナリングなし、SDK なし、Zoom なし
ffmpeg がマイクを opus にエンコードし、stdout に書き出します。curl はその stdin を /api/v1/pipe/voice に PUT します。同じパスを GET する者がセンダーの生成と同じペースでバイトを受け取ります。パイプはセンダーの接続を最大 5 分間レシーバーを保持し、Content-Type を転送し、何も保存しません。
ffmpeg -f alsa -i default -c:a libopus -f ogg - がマイクを読み、opus にエンコードして stdout に書き出します。
curl -T - が stdin を /api/v1/pipe/voice に PUT します。パイプは同じパスのレシーバーを最大 5 分間待ちます。
相手のターミナルが curl https://.../api/v1/pipe/voice を実行します。パイプがセンダーとレシーバーをマッチングし、ストリーミングを開始します。
相手の curl は aplay や mpv にパイプされます。オーディオは届いたバイトそのものを再生します。ctrl-C で通話終了。
パイプは Content-Type を転送し、相手が接続するまで最大 5 分のホールドタイムをサポートし、HTTPS を使います — シェルがすでに話すプロトコル以上に exotic なものは何もありません。
エコーキャンセラーも、ジッターバッファーも、派手な DSP もありません。SRE がペアデバッグするときに使うようなボイスチャンネル:そぎ落とされていて、オーバーヘッドが低く、頼りになる。ミーティングプラットフォームが積み上げるすべてのレイヤーが、パイプペアにはありません。
同じマイク・オーバー・HTTP のしくみは、パイプの反対側に誰がいるかによって 3 通りに読めます。
プロダクションのインシデント対応で 3 コマンド踏み込んでいます。Zoom を立ち上げる方が修正より時間がかかる。あなたは ffmpeg | curl、相手は curl | mpv — ログを tail しながら話せます。
スマホテザリングはビデオ通話で詰まります。HTTP 越しの 32 kbps の opus ストリームは詰まりません。相手は URL を開いて聴くだけ — 参加するためにマイクすら不要です。
サーバーには何も保存されません。どちらのマシンにもサードパーティアプリはありません。パイプは純粋にストリーミング — バイトは通り抜けて、ctrl-C と同時に消えます。
オーディオはただのバイト。バイトはただのパイプ。
エンジニアのペアがため込んでいくボイスツールの面々。どれもミーティング、アカウント、またはカスタムシグナリングサーバーを前提にします。パイプ URL はそのどれも前提にしません。
次に「ちょっと電話で話せる?」と言われたら、代わりにパイプを開きましょう。