fix(canvas): 视频合并 - 改用同源 FFmpeg 资源避免自部署加载失败

Fixes #168
This commit is contained in:
ddCat
2026-08-07 16:30:27 +08:00
parent 8652ee74c6
commit bbb4d8cf6c
3 changed files with 14 additions and 6 deletions

View File

@@ -1,5 +1,7 @@
import { FFmpeg } from "@ffmpeg/ffmpeg";
import { fetchFile, toBlobURL } from "@ffmpeg/util";
import ffmpegCoreURL from "@ffmpeg/core?url";
import ffmpegWasmURL from "@ffmpeg/core/wasm?url";
import { fetchFile } from "@ffmpeg/util";
import { getMediaBlob } from "@/services/file-storage";
export type MergeVideoInput = { id: string; url?: string; storageKey?: string };
@@ -12,12 +14,14 @@ async function loadFFmpeg(onProgress?: (progress: MergeVideoProgress) => void) {
if (!ffmpegPromise) {
ffmpegPromise = (async () => {
const ffmpeg = new FFmpeg();
const baseURL = "https://unpkg.com/@ffmpeg/core@0.12.10/dist/umd";
onProgress?.({ phase: "loading", progress: 0 });
await ffmpeg.load({
coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, "text/javascript"),
wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, "application/wasm"),
});
try {
// 核心资产随前端同源发布,避免自部署环境首次合并依赖第三方 CDN。
await ffmpeg.load({ coreURL: ffmpegCoreURL, wasmURL: ffmpegWasmURL });
} catch (cause) {
ffmpeg.terminate();
throw new Error("视频合并工具加载失败,请刷新页面后重试", { cause });
}
return ffmpeg;
})();
}