From 926399502faebde37a87a049605777e23d1e883c Mon Sep 17 00:00:00 2001 From: MiTHRAL Date: Tue, 26 May 2026 16:50:35 -0400 Subject: [PATCH] Make watch party worker stream more reliably --- .env.deploy.example | 1 + .env.example | 1 + orb_stream_worker/server.js | 21 ++++++++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.env.deploy.example b/.env.deploy.example index fe3e201..7c36c71 100644 --- a/.env.deploy.example +++ b/.env.deploy.example @@ -28,4 +28,5 @@ WATCHPARTY_STREAM_BITRATE_KBPS=2000 WATCHPARTY_STREAM_MAX_BITRATE_KBPS=2500 WATCHPARTY_STREAM_CODEC=H264 WATCHPARTY_STREAM_PRESET=ultrafast +WATCHPARTY_STREAM_TYPE=camera WATCHPARTY_STREAM_HARDWARE_ACCELERATION=false diff --git a/.env.example b/.env.example index 4192660..a5543ee 100644 --- a/.env.example +++ b/.env.example @@ -30,4 +30,5 @@ WATCHPARTY_STREAM_BITRATE_KBPS=2000 WATCHPARTY_STREAM_MAX_BITRATE_KBPS=2500 WATCHPARTY_STREAM_CODEC=H264 WATCHPARTY_STREAM_PRESET=ultrafast +WATCHPARTY_STREAM_TYPE=camera WATCHPARTY_STREAM_HARDWARE_ACCELERATION=false diff --git a/orb_stream_worker/server.js b/orb_stream_worker/server.js index 237f6ea..750e6d1 100644 --- a/orb_stream_worker/server.js +++ b/orb_stream_worker/server.js @@ -28,6 +28,7 @@ const STREAM_BITRATE_KBPS = Number(process.env.WATCHPARTY_STREAM_BITRATE_KBPS || const STREAM_MAX_BITRATE_KBPS = Number(process.env.WATCHPARTY_STREAM_MAX_BITRATE_KBPS || "2500"); const STREAM_CODEC = String(process.env.WATCHPARTY_STREAM_CODEC || "H264").trim().toUpperCase(); const STREAM_PRESET = String(process.env.WATCHPARTY_STREAM_PRESET || "ultrafast").trim().toLowerCase(); +const STREAM_TYPE = String(process.env.WATCHPARTY_STREAM_TYPE || "camera").trim().toLowerCase(); const STREAM_HARDWARE_ACCELERATION = ["1", "true", "yes", "on"].includes( String(process.env.WATCHPARTY_STREAM_HARDWARE_ACCELERATION || "").trim().toLowerCase() ); @@ -152,6 +153,10 @@ function streamOptions() { return options; } +function playOptions() { + return STREAM_TYPE === "go-live" ? { type: "go-live" } : { type: "camera" }; +} + function streamUrlAtOffset(url, startSeconds) { const parsed = new URL(url); parsed.searchParams.set("StartTimeTicks", String(Math.max(0, Math.floor(startSeconds)) * 10000000)); @@ -331,6 +336,20 @@ async function startPlayback(session, playback, startSeconds = 0) { session.workerStatus = "streaming"; session.manualStop = false; session.lastError = ""; + const playMode = playOptions(); + console.log( + "[worker] starting playback", + JSON.stringify( + { + sessionId: session.workerSessionId, + title: session.currentTitle, + mode: playMode.type, + url: input, + }, + null, + 2, + ), + ); const options = streamOptions(); const prepared = streamingStack.prepareStream( @@ -354,7 +373,7 @@ async function startPlayback(session, playback, startSeconds = 0) { session.workerStatus = "error"; }); - streamingStack.playStream(output, runtime.streamer, undefined, abortController.signal) + streamingStack.playStream(output, runtime.streamer, playMode, abortController.signal) .then(() => { if (session.manualStop || abortController.signal.aborted) { return;