This commit is contained in:
Fredrik Burmester
2024-09-08 11:37:21 +03:00
parent c25b26653e
commit acbc650ccf
8 changed files with 376 additions and 21 deletions

View File

@@ -25,8 +25,8 @@ export const getStreamUrl = async ({
userId: string | null | undefined;
startTimeTicks: number;
maxStreamingBitrate?: number;
sessionData: PlaybackInfoResponse;
deviceProfile: any;
sessionData?: PlaybackInfoResponse;
deviceProfile?: any;
audioStreamIndex?: number;
subtitleStreamIndex?: number;
forceDirectPlay?: boolean;
@@ -72,16 +72,12 @@ export const getStreamUrl = async ({
throw new Error("No media source");
}
if (!sessionData.PlaySessionId) {
throw new Error("no PlaySessionId");
}
let url: string | null | undefined;
if (mediaSource.SupportsDirectPlay || forceDirectPlay === true) {
if (item.MediaType === "Video") {
console.log("Using direct stream for video!");
url = `${api.basePath}/Videos/${itemId}/stream.mp4?playSessionId=${sessionData.PlaySessionId}&mediaSourceId=${mediaSource.Id}&static=true&subtitleStreamIndex=${subtitleStreamIndex}&audioStreamIndex=${audioStreamIndex}&deviceId=${api.deviceInfo.id}&api_key=${api.accessToken}`;
url = `${api.basePath}/Videos/${itemId}/stream.mp4?playSessionId=${sessionData?.PlaySessionId}&mediaSourceId=${mediaSource.Id}&static=true&subtitleStreamIndex=${subtitleStreamIndex}&audioStreamIndex=${audioStreamIndex}&deviceId=${api.deviceInfo.id}&api_key=${api.accessToken}`;
} else if (item.MediaType === "Audio") {
console.log("Using direct stream for audio!");
const searchParams = new URLSearchParams({
@@ -94,7 +90,9 @@ export const getStreamUrl = async ({
TranscodingProtocol: "hls",
AudioCodec: "aac",
api_key: api.accessToken,
PlaySessionId: sessionData.PlaySessionId,
PlaySessionId: sessionData?.PlaySessionId
? sessionData.PlaySessionId
: "",
StartTimeTicks: "0",
EnableRedirection: "true",
EnableRemoteMedia: "false",

View File

@@ -1,6 +1,7 @@
import { Api } from "@jellyfin/sdk";
import { AxiosError } from "axios";
import { getAuthHeaders } from "../jellyfin";
import { writeToLog } from "@/utils/log";
interface PlaybackStoppedParams {
api: Api | null | undefined;
@@ -27,17 +28,23 @@ export const reportPlaybackStopped = async ({
if (!positionTicks || positionTicks === 0) return;
if (!api) {
console.error("Missing api");
writeToLog("WARN", "Could not report playback stopped due to missing api");
return;
}
if (!sessionId) {
console.error("Missing sessionId", sessionId);
writeToLog(
"WARN",
"Could not report playback stopped due to missing session id"
);
return;
}
if (!itemId) {
console.error("Missing itemId");
writeToLog(
"WARN",
"Could not report playback progress due to missing item id"
);
return;
}