Add cdn replacements

This commit is contained in:
mrjvs 2023-12-27 23:39:32 +01:00
parent 8619fe9780
commit adddb84417
4 changed files with 27 additions and 4 deletions

View File

@ -12,6 +12,7 @@ import {
SourceQuality,
getPreferredQuality,
} from "@/stores/player/utils/qualities";
import { processCdnLink } from "@/utils/cdn";
import {
canChangeVolume,
canFullscreen,
@ -101,7 +102,7 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
function setupSource(vid: HTMLVideoElement, src: LoadableSource) {
if (src.type === "hls") {
if (canPlayHlsNatively(vid)) {
vid.src = src.url;
vid.src = processCdnLink(src.url);
vid.currentTime = startAt;
return;
}
@ -151,12 +152,12 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
}
hls.attachMedia(vid);
hls.loadSource(src.url);
hls.loadSource(processCdnLink(src.url));
vid.currentTime = startAt;
return;
}
vid.src = src.url;
vid.src = processCdnLink(src.url);
vid.currentTime = startAt;
}

View File

@ -8,6 +8,7 @@ import {
DisplayMeta,
} from "@/components/player/display/displayInterface";
import { LoadableSource } from "@/stores/player/utils/qualities";
import { processCdnLink } from "@/utils/cdn";
import {
canChangeVolume,
canFullscreen,
@ -112,7 +113,7 @@ export function makeChromecastDisplayInterface(
metaData.title = meta.title;
const mediaInfo = new chrome.cast.media.MediaInfo("video", type);
(mediaInfo as any).contentUrl = source.url;
(mediaInfo as any).contentUrl = processCdnLink(source.url);
mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED;
mediaInfo.metadata = metaData;
mediaInfo.customData = {

View File

@ -18,6 +18,7 @@ interface Config {
BACKEND_URL: string;
DISALLOWED_IDS: string;
TURNSTILE_KEY: string;
CDN_REPLACEMENTS: string;
}
export interface RuntimeConfig {
@ -32,6 +33,7 @@ export interface RuntimeConfig {
BACKEND_URL: string;
DISALLOWED_IDS: string[];
TURNSTILE_KEY: string | null;
CDN_REPLACEMENTS: Array<string[]>;
}
const env: Record<keyof Config, undefined | string> = {
@ -46,6 +48,7 @@ const env: Record<keyof Config, undefined | string> = {
BACKEND_URL: import.meta.env.VITE_BACKEND_URL,
DISALLOWED_IDS: import.meta.env.VITE_DISALLOWED_IDS,
TURNSTILE_KEY: import.meta.env.VITE_TURNSTILE_KEY,
CDN_REPLACEMENTS: import.meta.env.VITE_CDN_REPLACEMENTS,
};
// loads from different locations, in order: environment (VITE_{KEY}), window (public/config.js)
@ -84,5 +87,9 @@ export function conf(): RuntimeConfig {
.split(",")
.map((v) => v.trim())
.filter((v) => v.length > 0), // Should be comma-seperated and contain the media type and ID, formatted like so: movie-753342,movie-753342,movie-753342
CDN_REPLACEMENTS: getKey("CDN_REPLACEMENTS", "")
.split(",")
.map((v) => v.split(":").map((s) => s.trim()))
.filter((v) => v.length > 0), // The format is <beforeA>:<afterA>,<beforeB>:<afterB>
};
}

14
src/utils/cdn.ts Normal file
View File

@ -0,0 +1,14 @@
import { conf } from "@/setup/config";
export function processCdnLink(url: string): string {
const parsedUrl = new URL(url);
const replacements = conf().CDN_REPLACEMENTS;
for (const [before, after] of replacements) {
if (parsedUrl.hostname.endsWith(before)) {
parsedUrl.host = after;
return parsedUrl.toString();
}
}
return url;
}