From 33332aa71f01fedf6d40014864b41995d7394820 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 17 Feb 2026 17:30:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(video-edit):=20=E4=BD=BF=E7=94=A8toBlobURL?= =?UTF-8?q?=E5=8A=A0=E8=BD=BDffmpeg=E6=A0=B8=E5=BF=83=E4=BB=A5=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E8=B7=A8=E5=9F=9FWorker=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/public/js/video.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/static/public/js/video.js b/app/static/public/js/video.js index 620a7cd..dd3d7b0 100644 --- a/app/static/public/js/video.js +++ b/app/static/public/js/video.js @@ -596,6 +596,18 @@ } ffmpegLoading = true; try { + const utilApi = window.FFmpegUtil || {}; + const toBlobURL = utilApi.toBlobURL || null; + const CDN_BASE = 'https://cdn.jsdelivr.net/npm/@ffmpeg/core@0.12.6/dist/umd'; + let coreURL = `${CDN_BASE}/ffmpeg-core.js`; + let wasmURL = `${CDN_BASE}/ffmpeg-core.wasm`; + let workerURL = `${CDN_BASE}/ffmpeg-core.worker.js`; + if (typeof toBlobURL === 'function') { + // 跨域场景下将远端脚本转为 blob URL,规避 Worker 同源限制 + coreURL = await toBlobURL(coreURL, 'text/javascript'); + wasmURL = await toBlobURL(wasmURL, 'application/wasm'); + workerURL = await toBlobURL(workerURL, 'text/javascript'); + } if (typeof FFmpegCtor === 'function') { try { // 兼容 @ffmpeg/ffmpeg 0.12+ 的 class FFmpeg @@ -605,7 +617,11 @@ ffmpegInstance = FFmpegCtor({ log: false }); } if (ffmpegInstance && typeof ffmpegInstance.load === 'function') { - await ffmpegInstance.load(); + await ffmpegInstance.load({ + coreURL, + wasmURL, + workerURL, + }); } } if (!ffmpegInstance) {