From f4750e781d2894afdf1eabccc37e3eeec9d8cbaa Mon Sep 17 00:00:00 2001 From: sarendsen Date: Fri, 2 May 2025 19:02:14 +0200 Subject: [PATCH] refactor: getstreamurl --- utils/jellyfin/media/getStreamUrl.ts | 126 +++++++++------------------ 1 file changed, 40 insertions(+), 86 deletions(-) diff --git a/utils/jellyfin/media/getStreamUrl.ts b/utils/jellyfin/media/getStreamUrl.ts index 253478a0..d4616387 100644 --- a/utils/jellyfin/media/getStreamUrl.ts +++ b/utils/jellyfin/media/getStreamUrl.ts @@ -44,111 +44,65 @@ export const getStreamUrl = async ({ let mediaSource: MediaSourceInfo | undefined; let sessionId: string | null | undefined; - if (item.Type === "Program") { - console.log("Item is of type program..."); - const res0 = await getMediaInfoApi(api).getPlaybackInfo( - { - userId, - itemId: item.ChannelId!, - }, - { - method: "POST", - params: { - startTimeTicks: 0, - isPlayback: true, - autoOpenLiveStream: true, - maxStreamingBitrate, - audioStreamIndex, - }, - data: { - deviceProfile, - }, - }, - ); - const transcodeUrl = res0.data.MediaSources?.[0].TranscodingUrl; - sessionId = res0.data.PlaySessionId || null; - - if (transcodeUrl) { - return { - url: `${api.basePath}${transcodeUrl}`, - sessionId, - mediaSource: res0.data.MediaSources?.[0], - }; - } - } - - const itemId = item.Id; - - const res2 = await getMediaInfoApi(api).getPlaybackInfo( + const res = await getMediaInfoApi(api).getPlaybackInfo( { itemId: item.Id!, }, { method: "POST", data: { - deviceProfile, userId, - maxStreamingBitrate, - startTimeTicks, - autoOpenLiveStream: true, - mediaSourceId, - audioStreamIndex, + deviceProfile, subtitleStreamIndex, + startTimeTicks, + isPlayback: true, + autoOpenLiveStream: true, + maxStreamingBitrate, + audioStreamIndex, + mediaSourceId, }, }, ); - if (res2.status !== 200) { - console.error("Error getting playback info:", res2.status, res2.statusText); + if (res.status !== 200) { + console.error("Error getting playback info:", res.status, res.statusText); } - sessionId = res2.data.PlaySessionId || null; - - mediaSource = res2.data.MediaSources?.find( - (source: MediaSourceInfo) => source.Id === mediaSourceId, - ); - - if (item.MediaType === "Video") { - if (mediaSource?.TranscodingUrl) { - const urlObj = new URL(api.basePath + mediaSource?.TranscodingUrl); // Create a URL object - - // Get the updated URL - const transcodeUrl = urlObj.toString(); - - console.log("Video has transcoding URL:", `${transcodeUrl}`); - return { - url: transcodeUrl, - sessionId: sessionId, - mediaSource, - }; - } - const searchParams = new URLSearchParams({ - playSessionId: sessionData?.PlaySessionId || "", - mediaSourceId: mediaSource?.Id || "", - static: "true", - subtitleStreamIndex: subtitleStreamIndex?.toString() || "", - audioStreamIndex: audioStreamIndex?.toString() || "", - deviceId: api.deviceInfo.id, - api_key: api.accessToken, - startTimeTicks: startTimeTicks.toString(), - maxStreamingBitrate: maxStreamingBitrate?.toString() || "", - userId: userId || "", - }); - - const directPlayUrl = `${ - api.basePath - }/Videos/${itemId}/stream.mp4?${searchParams.toString()}`; - - console.log("Video is being direct played:", directPlayUrl); + sessionId = res.data.PlaySessionId || null; + mediaSource = res.data.MediaSources[0]; + const transcodeUrl = mediaSource.TranscodingUrl; + if (transcodeUrl) { + console.log("Video is being transcoded:", transcodeUrl); return { - url: directPlayUrl, - sessionId: sessionId, + url: `${api.basePath}${transcodeUrl}`, + sessionId, mediaSource, }; } - Alert.alert("Error", "Could not play this item"); + const searchParams = new URLSearchParams({ + playSessionId: sessionData?.PlaySessionId || "", + mediaSourceId: mediaSource?.Id || "", + static: "true", + subtitleStreamIndex: subtitleStreamIndex?.toString() || "", + audioStreamIndex: audioStreamIndex?.toString() || "", + deviceId: api.deviceInfo.id, + api_key: api.accessToken, + startTimeTicks: startTimeTicks.toString(), + maxStreamingBitrate: maxStreamingBitrate?.toString() || "", + userId: userId || "", + }); - return null; + const directPlayUrl = `${ + api.basePath + }/Videos/${item.Id}/stream.mp4?${searchParams.toString()}`; + + console.log("Video is being direct played:", directPlayUrl); + + return { + url: directPlayUrl, + sessionId: sessionId, + mediaSource, + }; };