fix: force subtitle burn-in via SubtitleMethod=Encode and always seek via local FFmpeg -ss
This commit is contained in:
parent
3531c044cd
commit
315e3268c4
2 changed files with 3 additions and 9 deletions
|
|
@ -306,6 +306,7 @@ def jellyfin_stream_url(base_url: str, item_id: str, api_key: str, subtitle_inde
|
||||||
params = {"api_key": api_key}
|
params = {"api_key": api_key}
|
||||||
if subtitle_index is not None:
|
if subtitle_index is not None:
|
||||||
params["SubtitleStreamIndex"] = str(subtitle_index)
|
params["SubtitleStreamIndex"] = str(subtitle_index)
|
||||||
|
params["SubtitleMethod"] = "Encode"
|
||||||
else:
|
else:
|
||||||
params["static"] = "true"
|
params["static"] = "true"
|
||||||
query = urllib.parse.urlencode(params)
|
query = urllib.parse.urlencode(params)
|
||||||
|
|
|
||||||
|
|
@ -192,12 +192,6 @@ function playOptions() {
|
||||||
return STREAM_TYPE === "go-live" ? { type: "go-live" } : { type: "camera" };
|
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));
|
|
||||||
return parsed.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
function sessionPlaybackPosition(session) {
|
function sessionPlaybackPosition(session) {
|
||||||
if (session.playbackState !== "playing") {
|
if (session.playbackState !== "playing") {
|
||||||
return session.positionSeconds;
|
return session.positionSeconds;
|
||||||
|
|
@ -400,13 +394,12 @@ async function startPlayback(session, playback, startSeconds = 0) {
|
||||||
);
|
);
|
||||||
|
|
||||||
const options = streamOptions();
|
const options = streamOptions();
|
||||||
const isJellyfinTranscode = input.includes("SubtitleStreamIndex=");
|
if (session.positionSeconds > 0) {
|
||||||
if (session.positionSeconds > 0 && !isJellyfinTranscode) {
|
|
||||||
options.customInputOptions = ["-ss", String(session.positionSeconds)];
|
options.customInputOptions = ["-ss", String(session.positionSeconds)];
|
||||||
}
|
}
|
||||||
console.log(`[worker] Calling prepareStream with options:`, JSON.stringify(options, null, 2));
|
console.log(`[worker] Calling prepareStream with options:`, JSON.stringify(options, null, 2));
|
||||||
const prepared = streamingStack.prepareStream(
|
const prepared = streamingStack.prepareStream(
|
||||||
session.positionSeconds > 0 ? streamUrlAtOffset(input, session.positionSeconds) : input,
|
input,
|
||||||
options,
|
options,
|
||||||
abortController.signal,
|
abortController.signal,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue