diff --git a/packages/ffmpeg/src/worker.ts b/packages/ffmpeg/src/worker.ts index 446e866d11..aa62643bfa 100644 --- a/packages/ffmpeg/src/worker.ts +++ b/packages/ffmpeg/src/worker.ts @@ -43,25 +43,24 @@ interface ImportedFFmpegCoreModuleFactory { let ffmpeg: FFmpegCoreModule; const load = async ({ - coreURL: _coreURL = CORE_URL, + coreURL: _coreURL, wasmURL: _wasmURL, workerURL: _workerURL, }: FFMessageLoadConfig): Promise => { const first = !ffmpeg; - const coreURL = _coreURL; - const wasmURL = _wasmURL ? _wasmURL : _coreURL.replace(/.js$/g, ".wasm"); - const workerURL = _workerURL - ? _workerURL - : _coreURL.replace(/.js$/g, ".worker.js"); try { + let tempCoreURL = _coreURL; + if (!tempCoreURL) tempCoreURL = CORE_URL; // when web worker type is `classic`. - importScripts(coreURL); + importScripts(tempCoreURL); + _coreURL = tempCoreURL; } catch { + if (!_coreURL) _coreURL = CORE_URL.replace('/umd/', '/esm/'); // when web worker type is `module`. (self as WorkerGlobalScope).createFFmpegCore = ( (await import( - /* @vite-ignore */ coreURL + /* @vite-ignore */ _coreURL )) as ImportedFFmpegCoreModuleFactory ).default; @@ -70,6 +69,12 @@ const load = async ({ } } + const coreURL = _coreURL; + const wasmURL = _wasmURL ? _wasmURL : _coreURL.replace(/.js$/g, ".wasm"); + const workerURL = _workerURL + ? _workerURL + : _coreURL.replace(/.js$/g, ".worker.js"); + ffmpeg = await (self as WorkerGlobalScope).createFFmpegCore({ // Fix `Overload resolution failed.` when using multi-threaded ffmpeg-core. // Encoded wasmURL and workerURL in the URL as a hack to fix locateFile issue. @@ -140,8 +145,8 @@ const deleteDir = ({ path }: FFMessageDeleteDirData): OK => { }; const mount = ({ fsType, options, mountPoint }: FFMessageMountData): OK => { - let str = fsType as keyof typeof ffmpeg.FS.filesystems; - let fs = ffmpeg.FS.filesystems[str]; + const str = fsType as keyof typeof ffmpeg.FS.filesystems; + const fs = ffmpeg.FS.filesystems[str]; if (!fs) return false; ffmpeg.FS.mount(fs, options, mountPoint); return true;