mirror of
https://github.com/movie-web/movie-web.git
synced 2025-09-13 18:13:24 +00:00
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import { Stream } from "@movie-web/providers";
|
|
|
|
import {
|
|
SourceFileStream,
|
|
SourceQuality,
|
|
SourceSliceSource,
|
|
} from "@/stores/player/utils/qualities";
|
|
|
|
const allowedQualitiesMap: Record<SourceQuality, SourceQuality> = {
|
|
"4k": "4k",
|
|
"1080": "1080",
|
|
"480": "480",
|
|
"360": "360",
|
|
"720": "720",
|
|
unknown: "unknown",
|
|
};
|
|
const allowedQualities = Object.keys(allowedQualitiesMap);
|
|
const allowedFileTypes = ["mp4"];
|
|
|
|
function isAllowedQuality(inp: string): inp is SourceQuality {
|
|
return allowedQualities.includes(inp);
|
|
}
|
|
|
|
export function convertRunoutputToSource(out: {
|
|
stream: Stream;
|
|
}): SourceSliceSource {
|
|
if (out.stream.type === "hls") {
|
|
return {
|
|
type: "hls",
|
|
url: out.stream.playlist,
|
|
headers: out.stream.headers,
|
|
preferredHeaders: out.stream.preferredHeaders,
|
|
};
|
|
}
|
|
if (out.stream.type === "file") {
|
|
const qualities: Partial<Record<SourceQuality, SourceFileStream>> = {};
|
|
Object.entries(out.stream.qualities).forEach((entry) => {
|
|
if (!isAllowedQuality(entry[0])) {
|
|
console.warn(`unrecognized quality: ${entry[0]}`);
|
|
return;
|
|
}
|
|
if (!allowedFileTypes.includes(entry[1].type)) {
|
|
console.warn(`unrecognized file type: ${entry[1].type}`);
|
|
return;
|
|
}
|
|
qualities[entry[0]] = {
|
|
type: entry[1].type,
|
|
url: entry[1].url,
|
|
};
|
|
});
|
|
return {
|
|
type: "file",
|
|
qualities,
|
|
headers: out.stream.headers,
|
|
preferredHeaders: out.stream.preferredHeaders,
|
|
};
|
|
}
|
|
throw new Error("unrecognized type");
|
|
}
|