HTTPS だけで 4K AV1 をブラウザ再生 LIVE
プラグイン不要・WebRTC 不要・SFU 不要。HTTPS だけで、復号は全てブラウザ内 WebAssembly で完結します。
ポジション: HLS/DASH より低遅延 (1–2 秒 vs 2–10 秒)、WebRTC より配信側がシンプル (signaling サーバ不要、STUN/TURN 不要、SFU 不要)。監視 / VMS / 教育配信など、 UDP やインフラ更新に依らずに 4K AV1 を任意のモダンブラウザに届けたい用途を想定。
ポジション (短い比較表)
ライブ映像エンジニアが普通に検討する選択肢との対比です:
| 本デモ | WebRTC | HLS Low-Latency | 従来 RTMP/HLS | |
|---|---|---|---|---|
| 配信プロトコル | TCP / HTTPS のみ | UDP + STUN/TURN | HTTPS | HTTPS |
| サーバ要件 | 静的 HTTPS + 軽い range/poll endpoint | signaling + SFU/MCU | origin + CDN | RTMP server + transcoder + CDN |
| Glass-to-glass 遅延 | ~1–2 秒 | < 0.5 秒 | 2–4 秒 | 6–30 秒 |
| プラグイン / native? | 不要 | 不要 | 不要 | 不要 |
| 4K AV1 ライブ全ブラウザ | ○ (dav1d-WASM mt) | 実装依存 | 実装依存 | 不可 (codec 識別子非対応) |
| ファイアウォール突破力 | 通常 HTTPS と同じ | 企業/教育環境で UDP block 多数 | 通常 HTTPS と同じ | 通常 HTTPS と同じ |
トレードオフは遅延帯です。< 500 ms かつ自分でネットワークも握れるなら WebRTC が依然強い。 それ以外 — 特に UDP がブロックされる環境、SFU を立てるのが過大コストな現場 — では HTTPS-only のこの経路の方が 4K AV1 配信としてシンプルです。
アーキテクチャ
[エンコーダホスト (AI-01Server)] [ブラウザ]
キャプチャ (AV.io 4K HDMI)
|
v
slimenormenc.exe (av1_nvenc, NVENC)
|
v
live_stream.ivf (ディスク上で増分追記)
|
v
Node serve_live.js
- HTTP Range (206)
- HTTPS (TLS, COOP / COEP / CORP) | dav1d.js (single-thread, ~544 KB)
- /__reset_live (再エンコード起動) | or dav1d_4t.js (multi-thread, ~567 KB)
| | ^ SAB + crossOriginIsolated 必須
+------- HTTP Range polling ------->+ |
| v
| Presentation queue (1–2 秒)
| |
| v
| 30 Hz 一定間隔 render
| + NormMap block-skip (spatial gate)
| |
| v
| <canvas>視聴推奨スペック
| 視聴端末 | 解像度 / fps | WASM mode | HTTPS |
|---|---|---|---|
| 2-core mobile / 古い PC | 720p / 30 fps | single-thread | 不要 |
| 4-core mobile (Intel 11th gen 等) | 1440p / 30 fps | single-thread | 推奨 (LAN) |
| 4-core mobile + multi-thread | 4K / 30 fps | multi-thread (mt) | 必須 (cross-origin isolated) |
| 8-core+ desktop | 4K / 30 fps 余裕 | multi-thread (mt) | 必須 (LAN/WAN) |
multi-thread (dav1d_4t.wasm) は SharedArrayBuffer を使用するため、cross-origin-isolated=true — HTTPS と COOP / COEP / CORP ヘッダ設定が必須です。
ライブ プレビュー & 遅延計測
エンコーダはミリ秒精度のウォールクロックを各フレームに焼き込んで送信します。 映像内の時刻と、下のクロック (視聴端末ローカル時刻) を見比べた差が そのまま end-to-end 遅延 です。目視で測定できます。
統合検証は個別対応となります — お問い合わせからどうぞ。
ブラウザ側で何が動いているか (技術詳細)
- HTTP Range polling:
live_stream.ivfの末尾を数十ミリ秒周期で取得。差分のみ転送。 - IVF フレーム抽出: 4-byte size + 8-byte pts ヘッダで切り出して AV1 OBU として dav1d に投入。
- WASM 復号:
dav1d.wasm(~544 KB single-thread) またはdav1d_4t.wasm(~567 KB multi-thread)。 - Presentation queue: 復号済フレームを最大 60 個 (~2 秒) バッファ。OS-level filesystem flush バーストを吸収。
- 30 Hz 一定 render:
setInterval(33ms)で queue から steady drain。脈動なし。 - NormMap spatial gate: 16x16 ブロック前フレーム差分判定。静止シーンで 99% 以上スキップ。