Browse Source

Add cdn replacements

pull/597/head
mrjvs 2 years ago
parent
commit
adddb84417
  1. 7
      src/components/player/display/base.ts
  2. 3
      src/components/player/display/chromecast.ts
  3. 7
      src/setup/config.ts
  4. 14
      src/utils/cdn.ts

7
src/components/player/display/base.ts

@ -12,6 +12,7 @@ import { @@ -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 { @@ -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 { @@ -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;
}

3
src/components/player/display/chromecast.ts

@ -8,6 +8,7 @@ import { @@ -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( @@ -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 = {

7
src/setup/config.ts

@ -18,6 +18,7 @@ interface Config { @@ -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 { @@ -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> = { @@ -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 { @@ -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

@ -0,0 +1,14 @@ @@ -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;
}
Loading…
Cancel
Save