add param to skipAutoTranscode for mpv

This commit is contained in:
jeffvli
2026-03-31 11:47:55 -07:00
parent 8b4bbc1ede
commit 7d34511039
4 changed files with 19 additions and 8 deletions
@@ -1953,7 +1953,7 @@ export const SubsonicController: InternalControllerEndpoint = {
},
getStreamUrl: async ({ apiClientProps, query }) => {
const { server } = apiClientProps;
const { bitrate, format, id, mediaType = 'song', transcode } = query;
const { bitrate, format, id, mediaType = 'song', skipAutoTranscode, transcode } = query;
const streamUrl = `${server?.url}/rest/stream.view?id=${id}&v=1.13.0&c=Feishin&${server?.credential}`;
@@ -1962,6 +1962,11 @@ export const SubsonicController: InternalControllerEndpoint = {
return appendTranscodeParams(streamUrl, format, bitrate);
}
// Used in cases where MPV is the default player, since mpv handles basically every audio format
if (skipAutoTranscode) {
return streamUrl;
}
// If the server supports transcoding decision, always use it to determine if we need to transcode
if (hasFeature(server, ServerFeature.OS_TRANSCODE_DECISION)) {
const maxTranscodingAudioBitrate = 0;
@@ -124,10 +124,10 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
if (!radioState.currentStreamUrl) {
const playerData = usePlayerStore.getState().getPlayerData();
const currentSongUrl = playerData.currentSong
? await getSongUrl(playerData.currentSong, transcode)
? await getSongUrl(playerData.currentSong, transcode, true)
: undefined;
const nextSongUrl = playerData.nextSong
? await getSongUrl(playerData.nextSong, transcode)
? await getSongUrl(playerData.nextSong, transcode, true)
: undefined;
if (currentSongUrl && nextSongUrl && !hasPopulatedQueueRef.current && mpvPlayer) {
@@ -281,7 +281,7 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
return;
}
const nextSongUrl = song ? await getSongUrl(song, transcode) : undefined;
const nextSongUrl = song ? await getSongUrl(song, transcode, true) : undefined;
mpvPlayer?.setQueueNext(nextSongUrl);
},
onPlayerPlay: () => {
@@ -346,7 +346,7 @@ async function handleMpvAutoNext(transcode: {
}) {
const playerData = usePlayerStore.getState().getPlayerData();
const nextSongUrl = playerData.nextSong
? await getSongUrl(playerData.nextSong, transcode)
? await getSongUrl(playerData.nextSong, transcode, true)
: undefined;
mpvPlayer?.autoNext(nextSongUrl);
}
@@ -365,10 +365,10 @@ async function replaceMpvQueue(transcode: {
const playerData = usePlayerStore.getState().getPlayerData();
const currentSongUrl = playerData.currentSong
? await getSongUrl(playerData.currentSong, transcode)
? await getSongUrl(playerData.currentSong, transcode, true)
: undefined;
const nextSongUrl = playerData.nextSong
? await getSongUrl(playerData.nextSong, transcode)
? await getSongUrl(playerData.nextSong, transcode, true)
: undefined;
mpvPlayer?.setQueue(currentSongUrl, nextSongUrl, false);
}
@@ -61,13 +61,18 @@ export function useSongUrl(
return shouldReusePrior ? prior.current[1] : queryStreamUrl;
}
export const getSongUrl = async (song: QueueSong, transcode: TranscodingConfig) => {
export const getSongUrl = async (
song: QueueSong,
transcode: TranscodingConfig,
skipAutoTranscode?: boolean,
) => {
const url = await api.controller.getStreamUrl({
apiClientProps: { serverId: song._serverId },
query: {
bitrate: transcode.bitrate,
format: transcode.format,
id: song.id,
skipAutoTranscode,
transcode: transcode.enabled,
},
});
+1
View File
@@ -1670,6 +1670,7 @@ export type StreamQuery = {
id: string;
mediaType?: 'podcast' | 'song';
offset?: number;
skipAutoTranscode?: boolean;
transcode: boolean;
};