From 4b68c9be9c3bda7f47ae33e7578cf580f78d7fa3 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Fri, 21 Aug 2026 19:09:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=99=20decoder.decode()=20=E5=8A=A0?= =?UTF-8?q?=203s=20=E8=B6=85=E6=97=B6=E4=BF=9D=E6=8A=A4=EF=BC=8C=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E8=A7=A3=E7=A0=81=E5=8D=A1=E6=AD=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/src/pages/generate/hooks/useCanvasPlayer.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts b/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts index a8d3a4000..88fe2d1b1 100644 --- a/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts +++ b/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts @@ -599,9 +599,20 @@ export function useCanvasPlayer( }) try { - await decoder.decode(chunk) // 修复:await 捕获异步错误 + await Promise.race([ + decoder.decode(chunk), + new Promise((_, reject) => + setTimeout(() => reject(new Error("decode chunk timeout 3s")), 3000), + ), + ]) decodedCount++ } catch (e) { + if (e instanceof Error && e.message === "decode chunk timeout 3s") { + console.warn( + `[useCanvasPlayer] Decode chunk timeout at sample ${decodedCount}, aborting segment ${meta.assetId}`, + ) + break + } decodeErrors++ console.warn(`[useCanvasPlayer] Decode chunk error (${decodeErrors}):`, e) // 连续 3 次解码失败,放弃当前片段并报告错误