From f4af6ec8b7e0a79bb1ca3a01728ad6dcf22a598e Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 20 Aug 2026 14:37:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E7=94=A8=20mp4box.js?= =?UTF-8?q?=20=E7=BB=B4=E5=BA=A6=E6=95=B0=E6=8D=AE=E8=AE=BE=E7=BD=AE=20vid?= =?UTF-8?q?eoDimRef=20=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 decoder configure 成功后的 videoDimRef 设置 - 删除 init 函数中的 videoDimRef 设置 - 唯一可靠的尺寸来源改为 VideoDecoder output 回调从 VideoFrame 获取的真实帧尺寸 --- apps/web/src/pages/generate/hooks/useCanvasPlayer.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts b/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts index 79d8a8267..15be694c2 100644 --- a/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts +++ b/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts @@ -492,11 +492,6 @@ export function useCanvasPlayer( decoderReady = true // 标记缓冲结束,让 UI 开始渲染 setState((s) => ({ ...s, isBuffering: false })) - - // 更新视频尺寸(用于 aspect ratio) - if (meta.videoWidth > 0 && meta.videoHeight > 0) { - videoDimRef.current = { width: meta.videoWidth, height: meta.videoHeight } - } } catch (err) { console.error("[useCanvasPlayer] Decoder configure failed for segment:", err) return @@ -875,12 +870,7 @@ export function useCanvasPlayer( segmentMetaRef.current = metas - // 3. 设置视频尺寸(用第一个片段的尺寸) - if (metas[0].videoWidth > 0 && metas[0].videoHeight > 0) { - videoDimRef.current = { width: metas[0].videoWidth, height: metas[0].videoHeight } - } - - // 4. 按需解码:初始只解码前 3 个片段,后续通过 decodeAroundPosition 动态加载 + // 3. 按需解码:初始只解码前 3 个片段,后续通过 decodeAroundPosition 动态加载 // 避免一次性全量解码导致 frameQueue 环形缓冲区旧帧被丢弃引发黑屏 decodedSegmentsRef.current.clear() const initGen = decodeGenerationRef.current