openvibers/openrestream STATUS.json
STATUS.json
| 1 | { |
| 2 | "repository": "OpenVibers/OpenRestream", |
| 3 | "stage": "alpha", |
| 4 | "code": true, |
| 5 | "wave": "W7", |
| 6 | "plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)", |
| 7 | "runtime": "node 22, express, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9, node-media-server 2.7.4, ffmpeg", |
| 8 | "port": 4500, |
| 9 | "rtmpPort": 1936, |
| 10 | "domain": "openre.stream", |
| 11 | "contracts": "openvibe-contracts v0.419.0", |
| 12 | "sdk": "openvibe-sdk v0.161.0", |
| 13 | "shared": "openvibe-shared v4.241.0", |
| 14 | "protocols": { |
| 15 | "rtmp": "ingest ported (openre-rtmp-ingest)", |
| 16 | "restream": "RTMP source to RTMP/RTMPS/SRT destinations ported (openre-restream-worker)", |
| 17 | "webrtc": "worker ported (workers/webrtc.js + workers/webrtc/{sfu,sdp,signaling}.js, run by openre-webrtc@): WHIP (RFC 9725) ingest by key on the mediasoup SFU, browser broadcasters over /b/<key> and viewers over /w/<playback id>, loopback RTP egress for restream/recording/thumbnails, recording through Media's RTP ingest; generations/leases/drain; refuses to start in production without MEDIASOUP_ANNOUNCED_IP", |
| 18 | "jsmpeg": "worker ported (workers/jsmpeg.js): MPEG-TS POST admission by key, WS viewers, loopback data tap, restream (re-encode), generations/drain; no recording (parity)" |
| 19 | }, |
| 20 | "capabilities": [ |
| 21 | "openre.stream.read", |
| 22 | "openre.stream.write", |
| 23 | "openre.key.rotate", |
| 24 | "openre.session.read", |
| 25 | "openre.session.end", |
| 26 | "openre.output.read", |
| 27 | "openre.output.write", |
| 28 | "openre.resource.read" |
| 29 | ], |
| 30 | "capabilitiesRegistered": true, |
| 31 | "resourceRoutes": [ |
| 32 | "GET /api/v1/resources", |
| 33 | "GET /api/v1/resources/:ovrn" |
| 34 | ], |
| 35 | "livePatch": "applied in Live f0ca18b and deployed; Live wired on 2026-09-23 (OPENRE_URL and the openre.session.* subscription, docs/cutover.md phase A); every Live slot keeps ingest_authority=live until its per-slot cutover (phase B), so no broadcaster uses OpenRestream yet", |
| 36 | "deployed": true, |
| 37 | "deployment": "Deployed with `sudo ovhost deploy openre` (OpenVibe.Host strategy release-layout since the 2026-09-27 cutover; deploy/scripts/deploy.sh wraps deploy, rollback and plan, and hands workers/status/prune to deploy/scripts/workers.sh): API + coordinator on 127.0.0.1:4500, RTMP ingest public on 0.0.0.0:1936 (ingest.openre.stream, DNS-only; reachable from outside since 2026-09-23), Live wired (OPENRE_URL, openre.session.* subscription), preflight all PASS, restore drill passed. No slot switched yet: every slot is still ingested by Live until the per-slot cutover (docs/cutover.md phase B).", |
| 38 | "features": [ |
| 39 | "stream definitions owned by a Network subject, with typed references", |
| 40 | "ingest keys hashed at rest, shown once, rotation with grace", |
| 41 | "RTMP ingest workers with generations, leases and drains that survive API deploys", |
| 42 | "RTMP/RTMPS/SRT restream with output health and a circuit breaker", |
| 43 | "SSRF-checked destinations with sealed keys", |
| 44 | "recording requests to OpenVibe.Media", |
| 45 | "HTTP-FLV playback descriptors", |
| 46 | "outbox events openre.session.*, openre.output.*, openre.recording.requested, openre.key.rotated", |
| 47 | "migration from Live without importing old keys", |
| 48 | "restore-drill read-only mode", |
| 49 | "per-actor limits (openvibe-sdk/limits)" |
| 50 | ], |
| 51 | "updated": "2026-11-13" |
| 52 | } |
| 53 |