From d0086e163668ec43f6eaa86d464ddafd0278a251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rin=20Cat=20=28=E9=88=B4=E7=8C=AB=29?= Date: Thu, 30 Nov 2023 21:18:18 -0500 Subject: [PATCH] Support alternative web videos CDN base url --- config/default.yaml | 3 +++ config/production.yaml.example | 3 +++ server/core/initializers/checker-before-init.ts | 1 + server/core/initializers/config.ts | 3 +++ server/core/models/video/video-file.ts | 9 ++++++++- server/core/models/video/video-streaming-playlist.ts | 4 ++++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/config/default.yaml b/config/default.yaml index 81e22e350..1183dd2cb 100644 --- a/config/default.yaml +++ b/config/default.yaml @@ -227,6 +227,9 @@ object_storage: prefix: '' base_url: '' +cdn: + web_videos_base_url: '' + log: level: 'info' # 'debug' | 'info' | 'warn' | 'error' diff --git a/config/production.yaml.example b/config/production.yaml.example index 827e4219c..17b4d42f8 100644 --- a/config/production.yaml.example +++ b/config/production.yaml.example @@ -225,6 +225,9 @@ object_storage: prefix: '' base_url: '' +cdn: + web_videos_base_url: '' # Example: 'https://mirror.example.com' + log: level: 'info' # 'debug' | 'info' | 'warn' | 'error' diff --git a/server/core/initializers/checker-before-init.ts b/server/core/initializers/checker-before-init.ts index e6fd56461..547cbcafa 100644 --- a/server/core/initializers/checker-before-init.ts +++ b/server/core/initializers/checker-before-init.ts @@ -65,6 +65,7 @@ function checkMissedConfig () { 'object_storage.credentials.secret_access_key', 'object_storage.max_upload_part', 'object_storage.streaming_playlists.bucket_name', 'object_storage.streaming_playlists.prefix', 'object_storage.streaming_playlists.base_url', 'object_storage.web_videos.bucket_name', 'object_storage.web_videos.prefix', 'object_storage.web_videos.base_url', + 'cdn.web_videos_base_url', 'theme.default', 'feeds.videos.count', 'feeds.comments.count', 'geo_ip.enabled', 'geo_ip.country.database_url', diff --git a/server/core/initializers/config.ts b/server/core/initializers/config.ts index a5380308a..c7adc697c 100644 --- a/server/core/initializers/config.ts +++ b/server/core/initializers/config.ts @@ -155,6 +155,9 @@ const CONFIG = { BASE_URL: config.get('object_storage.streaming_playlists.base_url') } }, + CDN: { + WEB_VIDEOS_BASE_URL: config.get('cdn.web_videos_base_url') + }, WEBSERVER: { SCHEME: config.get('webserver.https') === true ? 'https' : 'http', WS: config.get('webserver.https') === true ? 'wss' : 'ws', diff --git a/server/core/models/video/video-file.ts b/server/core/models/video/video-file.ts index 735bda2d5..ad6e34199 100644 --- a/server/core/models/video/video-file.ts +++ b/server/core/models/video/video-file.ts @@ -540,6 +540,8 @@ export class VideoFileModel extends Model if (video.isOwned()) { if (this.storage === VideoStorage.OBJECT_STORAGE) { return this.getObjectStorageUrl(video) + } else if (CONFIG.CDN.WEB_VIDEOS_BASE_URL) { + return CONFIG.CDN.WEB_VIDEOS_BASE_URL + this.getFileStaticPath(video) } return WEBSERVER.URL + this.getFileStaticPath(video) @@ -579,7 +581,12 @@ export class VideoFileModel extends Model ? join(STATIC_DOWNLOAD_PATHS.HLS_VIDEOS, `${video.uuid}-${this.resolution}-fragmented${this.extname}`) : join(STATIC_DOWNLOAD_PATHS.VIDEOS, `${video.uuid}-${this.resolution}${this.extname}`) - if (video.isOwned()) return WEBSERVER.URL + path + if (video.isOwned()) { + if (CONFIG.CDN.WEB_VIDEOS_BASE_URL) { + return CONFIG.CDN.WEB_VIDEOS_BASE_URL + path + } + return WEBSERVER.URL + path + } // FIXME: don't guess remote URL return buildRemoteVideoBaseUrl(video, path) diff --git a/server/core/models/video/video-streaming-playlist.ts b/server/core/models/video/video-streaming-playlist.ts index ef6437513..f0ed7c410 100644 --- a/server/core/models/video/video-streaming-playlist.ts +++ b/server/core/models/video/video-streaming-playlist.ts @@ -256,6 +256,8 @@ export class VideoStreamingPlaylistModel extends Model