Files
OpenIsle/frontend_nuxt/plugins/ffmpeg.client.ts
sivdead 9d76926b8a feat(frontend/vditor): 实现基于 FFmpeg.wasm 的视频压缩功能
- 添加视频压缩相关配置和工具函数
- 实现 FFmpeg.wasm 初始化和视频压缩功能
- 优化文件上传流程,支持视频文件压缩
2025-09-11 10:05:50 +08:00

38 lines
1.0 KiB
TypeScript

import { FFmpeg } from '@ffmpeg/ffmpeg'
import { toBlobURL } from '@ffmpeg/util'
import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'
let ffmpeg: FFmpeg | null = null
export default defineNuxtPlugin(() => {
const {
public: { ffmpegVersion },
} = useRuntimeConfig()
return {
provide: {
ffmpeg: async () => {
if (ffmpeg) return ffmpeg
ffmpeg = new FFmpeg()
const mtOk =
typeof crossOriginIsolated !== 'undefined' &&
crossOriginIsolated &&
typeof SharedArrayBuffer !== 'undefined'
const pkg = mtOk ? '@ffmpeg/core-mt' : '@ffmpeg/core-st'
const base = `https://unpkg.com/${pkg}@${ffmpegVersion}/dist/umd`
await ffmpeg.load({
coreURL: await toBlobURL(`${base}/ffmpeg-core.js`, 'text/javascript'),
wasmURL: await toBlobURL(`${base}/ffmpeg-core.wasm`, 'application/wasm'),
workerURL: await toBlobURL(`${base}/ffmpeg-core.worker.js`, 'text/javascript'),
})
return ffmpeg
},
},
}
})