feat: add getVideoUrl function

This commit is contained in:
Adrian Castro
2024-02-05 11:04:38 +01:00
parent 667bf4ab13
commit 8976b939b6

View File

@@ -0,0 +1,47 @@
import type {
FileBasedStream,
Qualities,
RunnerOptions,
ScrapeMedia} from '@movie-web/providers';
import {
makeProviders,
makeStandardFetcher,
targets,
} from '@movie-web/providers';
export async function getVideoUrl(media: ScrapeMedia): Promise<string|null> {
const providers = makeProviders({
fetcher: makeStandardFetcher(fetch),
target: targets.NATIVE,
consistentIpForRequests: true,
});
const options: RunnerOptions = {
media
};
const results = await providers.runAll(options);
if (!results) return null;
let highestQuality;
let url;
switch (results.stream.type) {
case 'file':
highestQuality = findHighestQuality(results.stream);
url = highestQuality ? results.stream.qualities[highestQuality]?.url : null;
return url ?? null;
case 'hls':
return results.stream.playlist;
}
}
function findHighestQuality(stream: FileBasedStream): Qualities | undefined {
const qualityOrder: Qualities[] = ['4k', '1080', '720', '480', '360', 'unknown'];
for (const quality of qualityOrder) {
if (stream.qualities[quality]) {
return quality;
}
}
return undefined;
}