mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-06 20:10:12 +02:00
add param to skipAutoTranscode for mpv
This commit is contained in:
@@ -1953,7 +1953,7 @@ export const SubsonicController: InternalControllerEndpoint = {
|
|||||||
},
|
},
|
||||||
getStreamUrl: async ({ apiClientProps, query }) => {
|
getStreamUrl: async ({ apiClientProps, query }) => {
|
||||||
const { server } = apiClientProps;
|
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}`;
|
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);
|
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 the server supports transcoding decision, always use it to determine if we need to transcode
|
||||||
if (hasFeature(server, ServerFeature.OS_TRANSCODE_DECISION)) {
|
if (hasFeature(server, ServerFeature.OS_TRANSCODE_DECISION)) {
|
||||||
const maxTranscodingAudioBitrate = 0;
|
const maxTranscodingAudioBitrate = 0;
|
||||||
|
|||||||
@@ -124,10 +124,10 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
|
|||||||
if (!radioState.currentStreamUrl) {
|
if (!radioState.currentStreamUrl) {
|
||||||
const playerData = usePlayerStore.getState().getPlayerData();
|
const playerData = usePlayerStore.getState().getPlayerData();
|
||||||
const currentSongUrl = playerData.currentSong
|
const currentSongUrl = playerData.currentSong
|
||||||
? await getSongUrl(playerData.currentSong, transcode)
|
? await getSongUrl(playerData.currentSong, transcode, true)
|
||||||
: undefined;
|
: undefined;
|
||||||
const nextSongUrl = playerData.nextSong
|
const nextSongUrl = playerData.nextSong
|
||||||
? await getSongUrl(playerData.nextSong, transcode)
|
? await getSongUrl(playerData.nextSong, transcode, true)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
if (currentSongUrl && nextSongUrl && !hasPopulatedQueueRef.current && mpvPlayer) {
|
if (currentSongUrl && nextSongUrl && !hasPopulatedQueueRef.current && mpvPlayer) {
|
||||||
@@ -281,7 +281,7 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nextSongUrl = song ? await getSongUrl(song, transcode) : undefined;
|
const nextSongUrl = song ? await getSongUrl(song, transcode, true) : undefined;
|
||||||
mpvPlayer?.setQueueNext(nextSongUrl);
|
mpvPlayer?.setQueueNext(nextSongUrl);
|
||||||
},
|
},
|
||||||
onPlayerPlay: () => {
|
onPlayerPlay: () => {
|
||||||
@@ -346,7 +346,7 @@ async function handleMpvAutoNext(transcode: {
|
|||||||
}) {
|
}) {
|
||||||
const playerData = usePlayerStore.getState().getPlayerData();
|
const playerData = usePlayerStore.getState().getPlayerData();
|
||||||
const nextSongUrl = playerData.nextSong
|
const nextSongUrl = playerData.nextSong
|
||||||
? await getSongUrl(playerData.nextSong, transcode)
|
? await getSongUrl(playerData.nextSong, transcode, true)
|
||||||
: undefined;
|
: undefined;
|
||||||
mpvPlayer?.autoNext(nextSongUrl);
|
mpvPlayer?.autoNext(nextSongUrl);
|
||||||
}
|
}
|
||||||
@@ -365,10 +365,10 @@ async function replaceMpvQueue(transcode: {
|
|||||||
|
|
||||||
const playerData = usePlayerStore.getState().getPlayerData();
|
const playerData = usePlayerStore.getState().getPlayerData();
|
||||||
const currentSongUrl = playerData.currentSong
|
const currentSongUrl = playerData.currentSong
|
||||||
? await getSongUrl(playerData.currentSong, transcode)
|
? await getSongUrl(playerData.currentSong, transcode, true)
|
||||||
: undefined;
|
: undefined;
|
||||||
const nextSongUrl = playerData.nextSong
|
const nextSongUrl = playerData.nextSong
|
||||||
? await getSongUrl(playerData.nextSong, transcode)
|
? await getSongUrl(playerData.nextSong, transcode, true)
|
||||||
: undefined;
|
: undefined;
|
||||||
mpvPlayer?.setQueue(currentSongUrl, nextSongUrl, false);
|
mpvPlayer?.setQueue(currentSongUrl, nextSongUrl, false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,13 +61,18 @@ export function useSongUrl(
|
|||||||
return shouldReusePrior ? prior.current[1] : queryStreamUrl;
|
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({
|
const url = await api.controller.getStreamUrl({
|
||||||
apiClientProps: { serverId: song._serverId },
|
apiClientProps: { serverId: song._serverId },
|
||||||
query: {
|
query: {
|
||||||
bitrate: transcode.bitrate,
|
bitrate: transcode.bitrate,
|
||||||
format: transcode.format,
|
format: transcode.format,
|
||||||
id: song.id,
|
id: song.id,
|
||||||
|
skipAutoTranscode,
|
||||||
transcode: transcode.enabled,
|
transcode: transcode.enabled,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1670,6 +1670,7 @@ export type StreamQuery = {
|
|||||||
id: string;
|
id: string;
|
||||||
mediaType?: 'podcast' | 'song';
|
mediaType?: 'podcast' | 'song';
|
||||||
offset?: number;
|
offset?: number;
|
||||||
|
skipAutoTranscode?: boolean;
|
||||||
transcode: boolean;
|
transcode: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user