开发指南
本指南为希望为 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 封装器或工具库:
- 安装依赖项:在根目录执行
npm install。 - 启动开发模式:在
packages/ffmpeg或packages/util内执行npm run dev。 - 构建:执行
npm run build将 TypeScript 转译为 JavaScript。 - 代码检查:执行
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),请参见 项目路线图。