mirror of
https://github.com/movie-web/movie-web.git
synced 2024-11-11 15:15:09 +01:00
Add cdn replacements
This commit is contained in:
parent
8619fe9780
commit
adddb84417
@ -12,6 +12,7 @@ import {
|
|||||||
SourceQuality,
|
SourceQuality,
|
||||||
getPreferredQuality,
|
getPreferredQuality,
|
||||||
} from "@/stores/player/utils/qualities";
|
} from "@/stores/player/utils/qualities";
|
||||||
|
import { processCdnLink } from "@/utils/cdn";
|
||||||
import {
|
import {
|
||||||
canChangeVolume,
|
canChangeVolume,
|
||||||
canFullscreen,
|
canFullscreen,
|
||||||
@ -101,7 +102,7 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
|
|||||||
function setupSource(vid: HTMLVideoElement, src: LoadableSource) {
|
function setupSource(vid: HTMLVideoElement, src: LoadableSource) {
|
||||||
if (src.type === "hls") {
|
if (src.type === "hls") {
|
||||||
if (canPlayHlsNatively(vid)) {
|
if (canPlayHlsNatively(vid)) {
|
||||||
vid.src = src.url;
|
vid.src = processCdnLink(src.url);
|
||||||
vid.currentTime = startAt;
|
vid.currentTime = startAt;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -151,12 +152,12 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hls.attachMedia(vid);
|
hls.attachMedia(vid);
|
||||||
hls.loadSource(src.url);
|
hls.loadSource(processCdnLink(src.url));
|
||||||
vid.currentTime = startAt;
|
vid.currentTime = startAt;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vid.src = src.url;
|
vid.src = processCdnLink(src.url);
|
||||||
vid.currentTime = startAt;
|
vid.currentTime = startAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import {
|
|||||||
DisplayMeta,
|
DisplayMeta,
|
||||||
} from "@/components/player/display/displayInterface";
|
} from "@/components/player/display/displayInterface";
|
||||||
import { LoadableSource } from "@/stores/player/utils/qualities";
|
import { LoadableSource } from "@/stores/player/utils/qualities";
|
||||||
|
import { processCdnLink } from "@/utils/cdn";
|
||||||
import {
|
import {
|
||||||
canChangeVolume,
|
canChangeVolume,
|
||||||
canFullscreen,
|
canFullscreen,
|
||||||
@ -112,7 +113,7 @@ export function makeChromecastDisplayInterface(
|
|||||||
metaData.title = meta.title;
|
metaData.title = meta.title;
|
||||||
|
|
||||||
const mediaInfo = new chrome.cast.media.MediaInfo("video", type);
|
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.streamType = chrome.cast.media.StreamType.BUFFERED;
|
||||||
mediaInfo.metadata = metaData;
|
mediaInfo.metadata = metaData;
|
||||||
mediaInfo.customData = {
|
mediaInfo.customData = {
|
||||||
|
@ -18,6 +18,7 @@ interface Config {
|
|||||||
BACKEND_URL: string;
|
BACKEND_URL: string;
|
||||||
DISALLOWED_IDS: string;
|
DISALLOWED_IDS: string;
|
||||||
TURNSTILE_KEY: string;
|
TURNSTILE_KEY: string;
|
||||||
|
CDN_REPLACEMENTS: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RuntimeConfig {
|
export interface RuntimeConfig {
|
||||||
@ -32,6 +33,7 @@ export interface RuntimeConfig {
|
|||||||
BACKEND_URL: string;
|
BACKEND_URL: string;
|
||||||
DISALLOWED_IDS: string[];
|
DISALLOWED_IDS: string[];
|
||||||
TURNSTILE_KEY: string | null;
|
TURNSTILE_KEY: string | null;
|
||||||
|
CDN_REPLACEMENTS: Array<string[]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const env: Record<keyof Config, undefined | 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,
|
BACKEND_URL: import.meta.env.VITE_BACKEND_URL,
|
||||||
DISALLOWED_IDS: import.meta.env.VITE_DISALLOWED_IDS,
|
DISALLOWED_IDS: import.meta.env.VITE_DISALLOWED_IDS,
|
||||||
TURNSTILE_KEY: import.meta.env.VITE_TURNSTILE_KEY,
|
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)
|
// loads from different locations, in order: environment (VITE_{KEY}), window (public/config.js)
|
||||||
@ -84,5 +87,9 @@ export function conf(): RuntimeConfig {
|
|||||||
.split(",")
|
.split(",")
|
||||||
.map((v) => v.trim())
|
.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
|
.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
14
src/utils/cdn.ts
Normal 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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user