openvibers/openrestream Commits

Plan T4 — the unported-transport stub is gone; status files match the…

OP OpenVibers committed 2 Oct 2026 · 31e80e4b2b · 2 files, +2 −48

Done by the harness job openre-plan-t4-drop-unported-stub-233027.

Changes

ddiff --git a/STATUS.json b/STATUS.json
iindex 3ec9011..fa46b7f 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -8,11 +8,11 @@
"port": 4500,
"rtmpPort": 1936,
"domain": "openre.stream",
-- "contracts": "openvibe-contracts v0.76.0 (openvibe-sdk v0.21.3, openvibe-shared v1.28.0)",
++ "contracts": "openvibe-contracts v0.76.0 (openvibe-sdk v0.21.3, openvibe-shared v2.3.1)",
"protocols": {
"rtmp": "ingest ported (openre-rtmp-ingest)",
"restream": "RTMP source to RTMP/RTMPS/SRT destinations ported (openre-restream-worker)",
-- "webrtc": "not ported (workers/webrtc.js: one worker will own WHIP ingest, the SFU and viewer signaling; worker interface only)",
++ "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",
"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)"
},
"capabilities": [
ddiff --git a/workers/unported-transport.js b/workers/unported-transport.js
ddeleted file mode 100644
iindex 5dfebf0..0000000
---- a/workers/unported-transport.js
++++ /dev/null
@@@ -1,46 +0,0 @@
--'use strict';
--/**
-- * The worker interface for the transports OpenRe does not carry yet. Today only WebRTC: the port
-- * (WHIP ingest + mediasoup SFU + viewer signaling) is T4's next job (decision 1, one worker owns
-- * all of it). It registers a generation with the coordinator, takes part in the drain protocol and
-- * heartbeats like a real transport worker, and carries nothing: activeCount() is always 0, and no
-- * 'webrtc' session is ever admitted (a definition may list the protocol, but its HTTP error is
-- * 'protocol_not_allowed' — no worker accepts it, so encoders keep using Live).
-- *
-- * This is the seam the port lands in: it replaces `admit nothing` with its session code and reports
-- * sessions through store.sessions exactly like rtmp-ingest.js / jsmpeg.js.
-- */
--const path = require('path');
--const { createWorkerRuntime } = require('./runtime');
--
--const PORT_STATUS = Object.freeze({
-- webrtc: 'WebRTC (WHIP ingest + mediasoup SFU + viewer signaling; Live: server/streaming/whip-handler.js + webrtc-sfu.js + broadcast-server.js) — not ported',
--});
--
--function createUnportedTransport({ rt, kind, log = console, exit = (code) => process.exit(code) }) {
-- if (!PORT_STATUS[kind]) throw new Error(`no unported transport "${kind}"`);
-- const runtime = createWorkerRuntime({ rt, kind, log, exit, hooks: { activeCount: () => 0 } });
-- return {
-- runtime,
-- async start() {
-- await runtime.register({ ported: false, note: PORT_STATUS[kind] });
-- await runtime.ready();
-- log.log(`[${kind}] registered generation ${runtime.me.generation}: ${PORT_STATUS[kind]}`);
-- return runtime.me;
-- },
-- drain: async (reason) => await runtime.drainNow(reason),
-- };
--}
--
--async function main(kind) {
-- require('dotenv').config({ path: process.env.OPENRE_ENV_FILE || path.join(process.cwd(), '.env') });
-- const { load, exitIfDrill } = require('../server/config');
-- const { openRuntime } = require('../server/store');
-- const config = load();
-- exitIfDrill(config, `openre-${kind}`);
-- const w = createUnportedTransport({ rt: await openRuntime({ config }), kind });
-- await w.start();
-- for (const sig of ['SIGTERM', 'SIGINT']) process.on(sig, () => w.drain(sig).catch((err) => console.error(`[${kind}] drain failed on ${sig}: ${err && (err.stack || err.message) || err}`)));
--}
--
--module.exports = { createUnportedTransport, PORT_STATUS, main };