diff --git a/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts b/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts index 12933fc01..902f9d5c2 100644 --- a/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts +++ b/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts @@ -25,11 +25,15 @@ function findCodecConfig(buffer: ArrayBuffer, start: number, end: number): Array view.getUint8(offset + 7), ) - // 容器 box(fullbox 多 4 字节) - const containerBoxes = ["trak", "mdia", "minf", "stbl"] + const containerBoxes = ["moov", "trak", "mdia", "minf", "stbl"] if (containerBoxes.includes(type)) { - // fullbox: size(4) + type(4) + version(1) + flags(3) = 12 bytes header - const contentStart = offset + 12 + // 动态检测 fullbox:检查 offset+8 处的 version/flags 是否为 0 + // 如果不是 fullbox,content 从 offset+8 开始;如果是 fullbox,content 从 offset+12 开始 + const v1 = view.getUint8(offset + 8) + const v2 = view.getUint8(offset + 9) + const v3 = view.getUint8(offset + 10) + const isFullBox = v1 === 0 && v2 === 0 && v3 === 0 + const contentStart = isFullBox ? offset + 12 : offset + 8 const result = findCodecConfig(buffer, contentStart, offset + size) if (result) return result } else if (type === "stsd") {