Live portal: React + dockview multi-stream viewer behind Authentik; MediaMTX HLS/WebRTC/API re-enabled; is-live Discord hook
live/: every active stream opens as a dockable window (WHEP, HLS fallback), audio follows the focused window, per-window mute/volume, pinning. Caddy live.HOST block with forward-auth proxies /api /webrtc /hls to MediaMTX on loopback and serves /srv/live. WebRTC media on 8189 (firewall). configure.py asks the live hostname and an optional Discord webhook; MediaMTX -ffmpeg image runs the runOnReady hook. deployLive.sh builds and ships dist/. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
17
README.md
17
README.md
@@ -67,6 +67,7 @@ test a new one before closing it.**
|
||||
| 22000 | tcp+udp | world (Syncthing) |
|
||||
| 3306 | tcp | world, rate limited (MariaDB for the bot dev; restrict via `db_allow` in /etc/nftables.conf) |
|
||||
| 2222 | tcp | world (Gitea ssh) |
|
||||
| 8189 | tcp+udp | world (WebRTC media for the live portal) |
|
||||
|
||||
Everything else is dropped and a trickle is logged (`journalctl -k | grep vg-drop`). Authentik (9000),
|
||||
Jellyfin (8096), copyparty, the Syncthing UI and dumpd bind to 127.0.0.1 only and are reached via Caddy
|
||||
@@ -185,6 +186,22 @@ already existed run `./createGiteaDb.sh` once.
|
||||
Runner caveat: it holds the Docker socket, so anyone who can push a workflow can run as root on the box.
|
||||
Keep repo write access to trusted people.
|
||||
|
||||
## 5f. Live portal (`live.HOST`)
|
||||
|
||||
React + dockview page (`live/`) behind Authentik forward-auth: every active stream is a dockable window,
|
||||
audio follows the focused window, per-window mute + volume. WebRTC (WHEP) with HLS fallback, served by
|
||||
MediaMTX (HLS 8888, WebRTC 8889, API 9997 on loopback; WebRTC media on **8189** udp/tcp, firewall opened).
|
||||
MediaMTX runs the `-ffmpeg` image so the optional "is live" Discord hook (`LIVE_WEBHOOK_URL` in `.env`,
|
||||
asked by `configure.py --full`) can post when a stream starts.
|
||||
|
||||
1. CNAME `live` → main host; `./configure.py --full` asks the hostname (also `--hosts … LIVE`).
|
||||
2. Authentik: Proxy Provider (forward auth, single application, external host `https://live.HOST`) →
|
||||
embedded outpost → group policy (e.g. everyone in the server, or `streamers`+`editors`+`admins`).
|
||||
3. Dev box: `./deployLive.sh` builds `live/` and copies `dist/` to `/srv/live` (Caddy serves it directly).
|
||||
|
||||
Bandwidth: no transcoding, every viewer gets the source bitrate (~15 Mbps) → ~30 concurrent viewers on
|
||||
the 500 Mbps line. For a crowd, restream to Twitch from OBS.
|
||||
|
||||
## 6. Editors
|
||||
|
||||
Browser: https://media.example.com/ → log in. Scrub any `.mp4` in the browser, download what you want.
|
||||
|
||||
Reference in New Issue
Block a user