リファレンス
すべての呼び出し、クレーム、コード、パス、環境変数、上限、時間を、説明するページと一緒に並べます。
ホストするサービス
運営者がホストするサービスについて公開する値です。
| 値 | |
|---|---|
| Relay の URL | 未公開 |
| Manager API のアドレス | 未公開 |
| Console のアドレス | 未公開 |
| Ingress のホスト | 未公開 |
| Ingress のホストの SRT のポート | 未公開 |
| Egress のホスト | 未公開 |
MoQ の版
Tablebox は、版をきっちり固定した moq-dev のリリースを使います。TypeScript の SDK: @moq/net 0.4.2(インストール時に当てる 1 行のパッチ付き)、@moq/json 0.4.2、@moq/publish 0.5.2、@moq/watch 0.6.2、Node では @moq/web-transport 0.1.5。Rust の SDK: moq-net 0.3.10、moq-tokio 0.19.22、moq-json 0.5.8。Relay は moq-relay 0.17.1 と moq-auth 0.2.1 の上に作り、プログラムは moq-mux 0.10.11、moq-audio 0.1.10、moq-rtmp と moq-srt 0.3.11 も使います。
セッションはこれらのリリースのとおりに MoQ を話します。moq-lite か IETF の moq-transport のドラフトで、版はセッションが開くときに両端が決めます。固定したリリースは moq-lite-06 を話し、TypeScript の SDK はこれを最初に、続けて古い moq-lite の版と IETF のドラフト moqt-22 から moqt-15 までを示します。次の三つは分けて扱います。
| 何か | |
|---|---|
| IETF のドラフト | moq-transport。IETF の MoQ ワーキンググループのプロトコルで、番号付きのドラフトとして出る |
| moq-dev のプロファイル | moq-lite。moq-dev プロジェクトのプロトコル |
| 交渉した版 | 一つのセッションが話すもの。どちらかの一つの版で、セッションが開くときにクライアントと Relay が決める |
SDK
パッケージ tablebox.io(TypeScript、ブラウザーと Node 22)とクレート tablebox(Rust、tokio ランタイム上)は同じ呼び出しを持ちます。
| 呼び出し | TypeScript | Rust | ページ |
|---|---|---|---|
| 接続 | connect({ url, token })、{ url, getToken }、{ url, link, secret }。serverCertificateHashes も |
connect(ConnectOptions::token(url, token))、ConnectOptions::get_token(url, f)、ConnectOptions::link(url, link, secret)。server_certificate_hashes も |
接続の仕方 |
| 状態 | status、reason、transport: peek() と subscribe() を持つシグナル |
status()、reason()、transport(): tokio::sync::watch の受け手 |
状態 |
| リンクの ID | identity |
identity() |
リンク |
| 出す | publish(path): Broadcast.Producer |
publish(path): broadcast::Producer |
出す |
| 読む | read(path): 出されたら Broadcast.Consumer |
read(path).await: broadcast::Consumer |
読む |
| 一覧 | list(prefix, { hidden }): Announce.Consumer |
list(prefix, hidden): announce::Consumer |
一覧する |
| 受け持つ | serve(prefix, handler): { close() }。request.path、accept(broadcast)、refuse(name) |
serve(prefix, handler): Serving。request.path()、accept(&broadcast)、refuse(reason) |
パスを受け持つ |
| メディア | origin。publish と watch 用(ブラウザー) |
origin() |
メディア |
| 閉じる | close() |
close().await、または捨てる |
|
| コード | Reason: code、name、Reason.of(error) |
Reason: code()、name()、Reason::of(&error) |
コード |
| 固定したパッケージ | moq(@moq/net)、json(@moq/json)。ブラウザーでは publish と watch も |
moq(moq-net)、json(moq-json) |
トークンのクレーム
| クレーム | 型 | 意味 |
|---|---|---|
root |
パス。既定は空 | セッションのルート。プロジェクトのルートからの相対 |
publish, subscribe |
moq-pattern の一覧。root からの相対 |
セッションが出せるもの、読めるもの。全体で少なくとも一つ |
sub |
文字列。必須 | 参加者の ID |
iat |
秒。必須 | 発行時刻。Relay の時計より 60 秒先まで |
exp |
秒。必須 | 期限。受け入れるときに確かめる |
nbf |
秒。任意 | これより前は無効。受け入れるときに確かめる |
moq-auth 0.2.1 の形式です。プロジェクトのキーのシークレットで HS256、HS384、HS512 のどれかにより署名した JWT で、ヘッダの kid はキーの ID です。ほかのクレームは拒否されます。トークン。
コード
| コード | 名前 | 出すもの | SDK |
|---|---|---|---|
| 64 | invalid-token |
Relay | 止まる |
| 65 | expired |
Relay | getToken で再接続する |
| 66 | removed |
Relay | 止まる |
| 67 | closed |
Relay | 止まる |
| 68 | limit |
Relay | 止まる |
| 69 | unavailable |
Relay | やり直す |
| 80 | bad-request |
パスを受け持つもの | 読み出しかトラックを終える |
| 81 | missing-variable |
パスを受け持つもの | 読み出しかトラックを終える |
| 82 | failed |
パスを受け持つもの | 読み出しかトラックを終える |
| 83 | too-large |
パスを受け持つもの | 読み出しかトラックを終える |
それぞれがいつ当たるかは接続するとパスを受け持つにあります。
プログラムのパス
読み手のルートからの相対です。
| パス | トラック | 書く人 | ページ |
|---|---|---|---|
{name}/.aggregation/{writer} |
patch.json, value.json |
書き手 | Aggregation |
.aggregation/{name} |
state.json, writers.json, applied/{writer} |
Aggregation | Aggregation |
.persistence/{path} |
{track}。{path} の {track} の保存した文書 |
Persistence | Persistence |
.egress/{source}/{dest}, .egress/{prefix}/.composite/{dest} |
status.json |
Egress | Egress |
{source} |
hang の音声、context.json, input.json |
Agent を呼ぶ人 | Agent |
.agent/{source} |
hang の声、transcript.json, calls.json, status.json |
Agent | Agent |
ストリームキーの publish のパス |
hang のブロードキャスト | Ingress | Ingress |
プロジェクトの環境変数
| 変数 | 読むもの | 意味 |
|---|---|---|
STORAGE_BUCKET, STORAGE_ACCESS_KEY_ID, STORAGE_SECRET_ACCESS_KEY |
Persistence、Egress(Aggregation は Persistence を通して) | バケットとその認証情報。必須 |
STORAGE_ENDPOINT, STORAGE_REGION, STORAGE_PREFIX |
同じ | https:// のエンドポイント(なければ AWS S3)、地域(us-east-1)、キーの前に付けるもの(空) |
EXPORT_{NAME}_URL |
Egress | {name} という名前の rtmp://、rtmps://、srt:// の送り先 |
AGENT_PROVIDER |
Agent | openai(既定)か gemini |
OPENAI_API_KEY, GEMINI_API_KEY |
Agent | 選んだプロバイダのキー |
AGENT_MODEL, AGENT_VOICE |
Agent | モデル(なければ gpt-realtime-2.1 か gemini-3.8-live)と声 |
AGENT_INSTRUCTIONS, AGENT_TOOLS |
Agent | 指示と、ツールの JSON 配列 |
環境変数。
管理 API
| 呼び出し | 認証 |
|---|---|
GET, POST /v1/projects |
Console のセッション |
GET, PATCH, DELETE /v1/projects/{p} |
Console のセッションか、そのプロジェクトのキー |
/v1/projects/{p}/keys, /links, /variables, /removals, /closings, /usage |
Console のセッションか、そのプロジェクトのキー |
本体、結果、エラーは管理 API にあります。
上限と時間
| 値 | 何か | ページ |
|---|---|---|
| 32 段 | パス | パス |
| 60 秒 | iat が Relay の時計より先でよい幅 |
トークン |
| 32〜128 文字 | リンクのシークレット。入る人の ID は 22 文字 | リンク |
| 500 ms | ブラウザーで WebSocket への切り替えが加わる前の WebTransport の試み | 転送方式 |
| 1 秒から 30 秒まで倍に | SDK の再接続の待ち。5 秒続いたセッションの後は 1 秒に戻る | 状態 |
| 2 秒 | プロジェクトの状態をまだ読んでいない Relay をセッションが待つ時間。その後 unavailable |
コード |
| 10 秒 | 黙った接続が終わるまで | 状態 |
| 5 秒 | 取り外しと閉鎖が効くまで。変更が Relay とプログラムに届くまで | 取り外し |
| 10 秒 | Relay が使用量を報告する間隔。上限はその間に運ぶ分だけ超えうる | 上限 |
| 1 分 | 使用量が見えるまで | 上限 |
| 70 文字、16 KiB、100 個 | 環境変数の名前、値、プロジェクトあたりの数 | 環境変数 |
| 20 秒 | 最後の読み手が去ってからプログラムが止まるまで | 呼ぶ |
| 16 MiB | Aggregation のまとめた文書 | Aggregation |
| 2 秒、10 秒 | Persistence は変更の 2 秒後に、最低 10 秒ごとに保存する | Persistence |
| 5 秒、30 秒 | Egress が二つ目のレンディションを待つ時間。やり直しの間隔は 30 秒まで延びる | Egress |
| 1280x720、30 fps、48 kHz ステレオ | 合成の映像と音声 | Egress |
| 10 秒、64 KiB | Agent がツールの答えを待つ時間。手がかりの大きさ | Agent |
| 496 バイト | SRT のストリームキー | Ingress |
| 1 秒 | Ingress がストリームを受け入れる前に待つ時間 | Ingress |