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 次解码失败,放弃当前片段并报告错误