开发指南

本指南为希望为 ffmpeg.wasm 项目做出贡献的开发者提供信息。它涵盖了设置 monorepo、构建 WebAssembly 核心以及运行测试的高级工作流程。

关于特定领域的详细说明,请参阅子页面:

1. Monorepo 结构

ffmpeg.wasm 使用 npm workspaces 作为 monorepo 进行管理。源代码分为核心逻辑、工具库和框架特定的示例。

开发指南

2. 核心开发 (@ffmpeg/core)

WebAssembly 核心是项目中最复杂的部分。编译它需要 Docker 23.0+ 和 make。

构建目标

开发者可以使用核心包中的 Makefile 触发不同的构建变体。生产构建会生成库使用的最终 .wasm 和 .js 胶水文件。

目标描述文件输出路径
make dev开发构建(单线程)/packages/core
make dev-mt开发构建(多线程)/packages/core-mt
make prd生产构建(单线程)/packages/core/dist
make prd-mt生产构建(多线程)/packages/core-mt/dist

有关自定义构建的详细信息(例如,移除 libwebp 以减小体积),请参见 设置开发环境。

3. JavaScript 包开发

@ffmpeg/ffmpeg 和 @ffmpeg/util 包使用 TypeScript 编写。它们的开发工作流遵循标准的 npm 模式。

常用命令

要处理 JavaScript 封装器或工具库:

  1. 安装依赖项:在根目录执行 npm install。
  2. 启动开发模式:在 packages/ffmpeg 或 packages/util 内执行 npm run dev。
  3. 构建:执行 npm run build 将 TypeScript 转译为 JavaScript。
  4. 代码检查:执行 npm run lint 检查代码风格。

4. 测试策略

ffmpeg.wasm 使用专门的测试环境,因为 WebAssembly(尤其是多线程)需要特定的浏览器头信息(COOP/COEP)。

  • Mocha & Headless Chrome:用于基于浏览器的集成测试。
  • SharedArrayBuffer 验证:专用的 verify-browser.html 确保环境支持多线程。
  • 核心测试:针对单线程 (ffmpeg-core-st.test.html) 和多线程 (ffmpeg-core-mt.test.html) 的独立测试页面。

有关运行测试套件的详细信息,请参见 测试。

5. 贡献流程

项目遵循标准的 GitHub 流程。但是,开发者应了解特定的限制:

  • Node.js 支持:自版本 0.12.0 起已停止。贡献应专注于浏览器环境。
  • 文件大小:WebAssembly 目前对输入文件有 2 GB 限制。
  • 许可协议:@ffmpeg/ffmpeg 采用 MIT 许可,但 @ffmpeg/core 遵循 FFmpeg 及其外部库(如 x264, libvpx)的许可协议。

开发指南

关于长期愿景和即将推出的功能(如 WebAssembly intrinsics),请参见 项目路线图。