コンテンツにスキップ
use-cases / a-microphone-over-http / hero
PIPE · AUDIO · LIVE

2 つのターミナルで HTTP 越しのマイク

深夜のペアデバッグ中、相手のテザリングは Zoom に耐えられません。お互いシェルは持っています。ffmpeg がマイクをキャプチャ、curl がパイプパスに PUT、もう一方のターミナルが同じパスを curl してバイトを再生します。SDK なし、シグナリングなし、ミーティングなし。

パイプドキュメントを読む

シグナリングなし、SDK なし、Zoom なし

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

2 つの curl、1 つのパイプパス、シグナリングなし

ffmpeg がマイクを opus にエンコードし、stdout に書き出します。curl はその stdin を /api/v1/pipe/voice に PUT します。同じパスを GET する者がセンダーの生成と同じペースでバイトを受け取ります。パイプはセンダーの接続を最大 5 分間レシーバーを保持し、Content-Type を転送し、何も保存しません。

マイクからスピーカーまで 4 行で4 ステップ · シグナリング不要
0101 · CAPTURE

マイクを読む

ffmpeg -f alsa -i default -c:a libopus -f ogg - がマイクを読み、opus にエンコードして stdout に書き出します。

0202 · STREAM

curl にパイプ

curl -T - が stdin を /api/v1/pipe/voice に PUT します。パイプは同じパスのレシーバーを最大 5 分間待ちます。

0303 · CONNECT

レシーバーがパスを GET

相手のターミナルが curl https://.../api/v1/pipe/voice を実行します。パイプがセンダーとレシーバーをマッチングし、ストリーミングを開始します。

0404 · PLAY

バイトがスピーカーに届く

相手の curl は aplay や mpv にパイプされます。オーディオは届いたバイトそのものを再生します。ctrl-C で通話終了。

パイプは Content-Type を転送し、相手が接続するまで最大 5 分のホールドタイムをサポートし、HTTPS を使います — シェルがすでに話すプロトコル以上に exotic なものは何もありません。

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

意図的にロー Fi

エコーキャンセラーも、ジッターバッファーも、派手な DSP もありません。SRE がペアデバッグするときに使うようなボイスチャンネル:そぎ落とされていて、オーバーヘッドが低く、頼りになる。ミーティングプラットフォームが積み上げるすべてのレイヤーが、パイプペアにはありません。

存在しないレイヤー0 LINES OF CODE

起こらないこと

  • STUN/TURN ハンドシェイクを開く
  • SDP を交換するシグナリングサーバーを動かす
  • WebRTC スタック越しにコーデックをネゴシエート
  • マイク許可ダイアログを承諾
  • デスクトップアプリで参加をクリック
  • NAT トラバーサルが失敗したら TURN にフォールバック
  • ホストを待つ待機ルームに座る
実際にすることTWO TERMINALS

起こること

  • 送信側シェルで ffmpeg | curl を入力
  • 受信側シェルで curl | mpv を入力
  • パイプを通ってバイトが流れる間に話す
  • 終わったら ctrl-C — パスは何もない状態に戻る
use-cases / a-microphone-over-http / angles

3 つの読み方、1 ペアの curl

同じマイク・オーバー・HTTP のしくみは、パイプの反対側に誰がいるかによって 3 通りに読めます。

FOR THE PAIR-DEBUGGER

SRE にふさわしいボイス

プロダクションのインシデント対応で 3 コマンド踏み込んでいます。Zoom を立ち上げる方が修正より時間がかかる。あなたは ffmpeg | curl、相手は curl | mpv — ログを tail しながら話せます。

FOR THE TRAVELING DEV

テザリングを生き延びる

スマホテザリングはビデオ通話で詰まります。HTTP 越しの 32 kbps の opus ストリームは詰まりません。相手は URL を開いて聴くだけ — 参加するためにマイクすら不要です。

FOR THE PRIVACY-MINDED

録画なし、アプリなし、アカウントなし

サーバーには何も保存されません。どちらのマシンにもサードパーティアプリはありません。パイプは純粋にストリーミング — バイトは通り抜けて、ctrl-C と同時に消えます。

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

オーディオはただのバイト。バイトはただのパイプ。

Enter キーを押すとストリーム開始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 音声通話予定されたブリッジ、アプリインストール、デスクトップ権限
  • Slack の音声付き画面共有両側でデスクトップクライアント、Huddles 限定
  • Discord ボイスチャンネルサーバー所属、アカウント、ビットレート上限
  • Google Meet 音声90 秒のデバッグチャットのためのカレンダー配管
  • カスタムシグナリング付き WebRTCSTUN/TURN、SDP 交換、運用すべきサーバー
  • ボイスチャット SaaSまた 1 つのベンダー、また 1 つの席ライセンス
use-cases / a-microphone-over-http / cta

次に「ちょっと電話で話せる?」と言われたら、代わりにパイプを開きましょう。

パイプ API を読む
use-cases / a-microphone-over-http / related

他のユースケースを読む