pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
at main 59 lines 1.6 kB view raw
1import { Stream } from "@p-stream/providers"; 2 3import { 4 SourceFileStream, 5 SourceQuality, 6 SourceSliceSource, 7} from "@/stores/player/utils/qualities"; 8 9const allowedQualitiesMap: Record<SourceQuality, SourceQuality> = { 10 "4k": "4k", 11 "1080": "1080", 12 "480": "480", 13 "360": "360", 14 "720": "720", 15 unknown: "unknown", 16}; 17const allowedQualities = Object.keys(allowedQualitiesMap); 18const allowedFileTypes = ["mp4"]; 19 20function isAllowedQuality(inp: string): inp is SourceQuality { 21 return allowedQualities.includes(inp); 22} 23 24export function convertRunoutputToSource(out: { 25 stream: Stream; 26}): SourceSliceSource { 27 if (out.stream.type === "hls") { 28 return { 29 type: "hls", 30 url: out.stream.playlist, 31 headers: out.stream.headers, 32 preferredHeaders: out.stream.preferredHeaders, 33 }; 34 } 35 if (out.stream.type === "file") { 36 const qualities: Partial<Record<SourceQuality, SourceFileStream>> = {}; 37 Object.entries(out.stream.qualities).forEach((entry) => { 38 if (!isAllowedQuality(entry[0])) { 39 console.warn(`unrecognized quality: ${entry[0]}`); 40 return; 41 } 42 if (!allowedFileTypes.includes(entry[1].type)) { 43 console.warn(`unrecognized file type: ${entry[1].type}`); 44 return; 45 } 46 qualities[entry[0]] = { 47 type: entry[1].type, 48 url: entry[1].url, 49 }; 50 }); 51 return { 52 type: "file", 53 qualities, 54 headers: out.stream.headers, 55 preferredHeaders: out.stream.preferredHeaders, 56 }; 57 } 58 throw new Error("unrecognized type"); 59}