Skip to content

兼容性、错误处理与故障排查 ​

基准是最新稳定 Chrome/Edge。Safari/Firefox 是否支持某个 codec 由 isConfigSupported 实测,不按浏览器名推断,也不承诺完整导出。

能力矩阵的读法 ​

能力缺失影响当前降级/处理
WebCodecs decode无帧级预览/代理禁用对应动作并诊断
H.264/AAC encode不能输出目标 MP4导出前阻止,不静默换 codec
OPFS无代理缓存/流式导出生产路径报明确错误
WebGLPixi 预览不可用能力页标记关键失败
OffscreenCanvasWorker 导出合成不可用导出失败并提示
SAB / isolation无共享时钟实验message transport 降级
performance.memory无 heap 数字显示 N/A,不判失败

COOP/COEP 与 SAB ​

症状:crossOriginIsolated=false、clock transport 为 message。确认通过 pnpm dev:editor 或 pnpm --filter @web-video-editor/editor preview 访问;不要 file:// 打开。Network 主文档响应应有:

text
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

跨域媒体还需允许被嵌入,否则 COEP 会拦截;本仓库 /test_assets 返回 Cross-Origin-Resource-Policy: same-origin。

codec 不支持 ​

症状:导出按钮禁用,或报 avc1.640028 / mp4a.40.2 不支持。先在“能力”确认 decode 与 encode 是不同项,再检查系统硬件/浏览器版本。当前 Demo 不自动切 WebM,也没有 FFmpeg/WASM fallback;更改 codec 前必须同时修改能力检测、Export config、Mux 和测试。

OPFS 与配额 ​

UI 点“清理代理缓存”只清 web-video-editor-media-cache-v1。导出在 web-video-editor-exports-v1;成功文件保留供 下载,取消时 .tmp- 必须被删除。Storage N/A 只表示 estimate 不可用,不代表 OPFS 必然不可用。

Worker / 协议故障 ​

按日志搜索 requestId:

  • UNKNOWN_OPERATION:主线程与 Worker 版本/operation 不一致。
  • DUPLICATE_REQUEST_ID:调用方复用了活动 ID。
  • timeout:长代理应使用 UI 已配置的 2 小时超时,不要沿用默认 30 秒。
  • malformed/stale:检查 version、projectRevision;过期响应被丢弃是正常保护。
  • Worker transport error:pending tasks 会失败,下一次请求会新建 Worker。

内存持续增长 ​

先看 active VF/AD 与 codec queue。active 不回零时定位 close()/lease;队列增长时定位 背压;active 已回零但 heap 高可能只是 GC 尚未运行。取消后检查 OPFS temp 和 Blob URL。

复现与预期输出 ​

bash
pnpm verify
text
UI: 缺能力时按钮禁用并显示 reason,不静默失败
Console: error 含 name/message/context、requestId/revision
CLI: 失败时 [VERIFY] Reproduce: <具体命令>

源码证据 ​