openvibers/openrestream Commits

OpenRestream: llms.txt says the WHIP and JSMPEG workers run (they do; Bot's robots publish to WHIP) (#68)

OP OpenVibers committed 14 Oct 2026 · 1c8fdfc390 · 2 files, +3 −2

`/llms.txt` still said "Browser WebRTC (WHIP, RFC 9725) and JSMPEG ingest are ported to OpenRestream and tested, but their workers do not run in production yet". Both workers run in production (`openre-webrtc@…` and `openre-jsmpeg@…` are active).

The WHIP ingest also serves real traffic. On 2026-10-14 OpenVibe.Bot's phone robot was proven end to end: a browser published its camera to `https://ingest.openre.stream/whip/<key>` (open CORS), the session went live, and the robot's panel played it through the SFU.

**Change**
- The sentence now says what runs: WHIP at `ingest.openre.stream/whip/<ingest key>`, open to browsers, on the WebRTC worker with its SFU for viewers, used by Bot's robots and phones; JSMPEG ingest on its own worker; Live's Go Live button keeping its own WHIP endpoint.
- `test/discovery.test.js` checks the new wording, and that "do not run in production yet" is gone.

`discovery.test.js`: 6/6 pass.

Changes

ddiff --git a/server/discovery.js b/server/discovery.js
iindex 82f45d3..5cb37f1 100644
---- a/server/discovery.js
++++ b/server/discovery.js
@@@ -41,7 +41,7 @@ function createDiscoveryRoutes({ config, releaseLastmod }) {
'Going live, as it runs today:',
'- From a browser, with nothing to install: on OpenVibe.Live (https://openvibe.live, the Go Live button; guide at https://openvibe.live/docs/go-live-in-your-browser). There is no follower, subscriber or eligibility threshold.',
'- With an encoder such as OBS: RTMP to rtmp://ingest.openre.stream:1936/live with the stream key OpenRestream shows once when the stream is created. Any signed-in OpenVibe account can create a stream.',
-- '- Browser WebRTC (WHIP, RFC 9725) and JSMPEG ingest are ported to OpenRestream and tested, but their workers do not run in production yet; until they do, OpenVibe.Live serves them.',
++ '- Browser WebRTC: WHIP (RFC 9725) to https://ingest.openre.stream/whip/<ingest key>, open to browsers (CORS), on OpenRestream\'s WebRTC worker with its SFU for viewers. OpenVibe.Bot\'s robots and phones publish their cameras there. JSMPEG ingest runs on its own worker too. OpenVibe.Live\'s Go Live button keeps its own WHIP endpoint.',
'',
'Restream: a session can fan out to several RTMP and SRT destinations at once, with per-output health, logs, backoff and a rapid-crash circuit breaker. Recording: OpenRestream asks OpenVibe.Media to record a VOD or clips of an RTMP session. Playback: a live, non-private session is served as HTTP-FLV at https://openre.stream/play/<session id>.flv.',
'',
ddiff --git a/test/discovery.test.js b/test/discovery.test.js
iindex 0d2508c..66056ab 100644
---- a/test/discovery.test.js
++++ b/test/discovery.test.js
@@@ -60,7 +60,8 @@ t('llms.txt is plain text, leads with open restreaming (OpenVibe Live on by defa
assert.match(lead, /OpenVibe Live channel on by default/);
assert.match(lead, /go live from their browser on OpenVibe\.Live/, 'browser go-live is still named, where it runs');
// Only the RTMP ingest and restream workers run in production: WHIP and JSMPEG are ported, not served yet.
-- assert.match(r.text, /WHIP, RFC 9725\) and JSMPEG ingest are ported to OpenRestream and tested, but their workers do not run in production yet/);
++ assert.match(r.text, /WHIP \(RFC 9725\) to https:\/\/ingest\.openre\.stream\/whip\/<ingest key>, open to browsers/);
++ assert.doesNotMatch(r.text, /do not run in production yet/, 'the workers run');
} finally {
await api.close();
}