FFmpeg WASM
Núcleo autoalojado, primera carga, SharedArrayBuffer y licencias.
El motor de audio/vídeo no es un binario de FFmpeg instalado en el servidor. Es una compilación WebAssembly que se carga en el navegador y se sirve desde el mismo origen.
Archivos
Después de npm run build, el núcleo se copia en dist/ffmpeg/:
/ffmpeg/ffmpeg-core.js/ffmpeg/ffmpeg-core.wasm(unos 32 MB)
ffmpegEngine.ts carga estas URL mediante toBlobURL, con un tiempo de espera de 120 segundos. Mensaje observado: «Motor FFmpeg listo (copia local, un solo hilo)».
Por qué se requiere COOP/COEP
FFmpeg.wasm depende de SharedArrayBuffer. Los navegadores solo lo exponen cuando la página está aislada entre orígenes (COOP same-origin + COEP require-corp). El desarrollo con Vite, la vista previa, el Nginx de Docker y la demo de Vercel establecen estas cabeceras. Un proxy que las elimine solo rompe el motor multimedia.
Cola
Hay una instancia y una cola secuencial de tareas. Las conversiones de imágenes mediante Canvas no utilizan esta instancia.
Licencias
SwissKnife utiliza la licencia MIT. La documentación de ffmpeg.wasm indica que el núcleo incluido contiene x264. Revisa NOTICE.md antes de redistribuir la aplicación con el archivo WASM.
Referencias públicas:
No des por hecho que la licencia MIT del repositorio cubre FFmpeg o x264.