Make watch party worker stream more reliably
This commit is contained in:
parent
536ea2eff1
commit
926399502f
3 changed files with 22 additions and 1 deletions
|
|
@ -28,4 +28,5 @@ WATCHPARTY_STREAM_BITRATE_KBPS=2000
|
||||||
WATCHPARTY_STREAM_MAX_BITRATE_KBPS=2500
|
WATCHPARTY_STREAM_MAX_BITRATE_KBPS=2500
|
||||||
WATCHPARTY_STREAM_CODEC=H264
|
WATCHPARTY_STREAM_CODEC=H264
|
||||||
WATCHPARTY_STREAM_PRESET=ultrafast
|
WATCHPARTY_STREAM_PRESET=ultrafast
|
||||||
|
WATCHPARTY_STREAM_TYPE=camera
|
||||||
WATCHPARTY_STREAM_HARDWARE_ACCELERATION=false
|
WATCHPARTY_STREAM_HARDWARE_ACCELERATION=false
|
||||||
|
|
|
||||||
|
|
@ -30,4 +30,5 @@ WATCHPARTY_STREAM_BITRATE_KBPS=2000
|
||||||
WATCHPARTY_STREAM_MAX_BITRATE_KBPS=2500
|
WATCHPARTY_STREAM_MAX_BITRATE_KBPS=2500
|
||||||
WATCHPARTY_STREAM_CODEC=H264
|
WATCHPARTY_STREAM_CODEC=H264
|
||||||
WATCHPARTY_STREAM_PRESET=ultrafast
|
WATCHPARTY_STREAM_PRESET=ultrafast
|
||||||
|
WATCHPARTY_STREAM_TYPE=camera
|
||||||
WATCHPARTY_STREAM_HARDWARE_ACCELERATION=false
|
WATCHPARTY_STREAM_HARDWARE_ACCELERATION=false
|
||||||
|
|
|
||||||
|
|
@ -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_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_CODEC = String(process.env.WATCHPARTY_STREAM_CODEC || "H264").trim().toUpperCase();
|
||||||
const STREAM_PRESET = String(process.env.WATCHPARTY_STREAM_PRESET || "ultrafast").trim().toLowerCase();
|
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(
|
const STREAM_HARDWARE_ACCELERATION = ["1", "true", "yes", "on"].includes(
|
||||||
String(process.env.WATCHPARTY_STREAM_HARDWARE_ACCELERATION || "").trim().toLowerCase()
|
String(process.env.WATCHPARTY_STREAM_HARDWARE_ACCELERATION || "").trim().toLowerCase()
|
||||||
);
|
);
|
||||||
|
|
@ -152,6 +153,10 @@ function streamOptions() {
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function playOptions() {
|
||||||
|
return STREAM_TYPE === "go-live" ? { type: "go-live" } : { type: "camera" };
|
||||||
|
}
|
||||||
|
|
||||||
function streamUrlAtOffset(url, startSeconds) {
|
function streamUrlAtOffset(url, startSeconds) {
|
||||||
const parsed = new URL(url);
|
const parsed = new URL(url);
|
||||||
parsed.searchParams.set("StartTimeTicks", String(Math.max(0, Math.floor(startSeconds)) * 10000000));
|
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.workerStatus = "streaming";
|
||||||
session.manualStop = false;
|
session.manualStop = false;
|
||||||
session.lastError = "";
|
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 options = streamOptions();
|
||||||
const prepared = streamingStack.prepareStream(
|
const prepared = streamingStack.prepareStream(
|
||||||
|
|
@ -354,7 +373,7 @@ async function startPlayback(session, playback, startSeconds = 0) {
|
||||||
session.workerStatus = "error";
|
session.workerStatus = "error";
|
||||||
});
|
});
|
||||||
|
|
||||||
streamingStack.playStream(output, runtime.streamer, undefined, abortController.signal)
|
streamingStack.playStream(output, runtime.streamer, playMode, abortController.signal)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
if (session.manualStop || abortController.signal.aborted) {
|
if (session.manualStop || abortController.signal.aborted) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue