From 005f500ee1c2eb5bf8dfb70f10df496a64e40a31 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Sun, 23 Aug 2026 00:03:52 +0800 Subject: [PATCH] fix(cover): short MediaKit polling timeout in API cover endpoint (E1/E2) E1/E2 fallback calls used default 30 polling attempts * 2s = 60s each, causing the cover API to hang ~2 minutes when MediaKit is slow/unreachable. Set max_poll_attempts=5, poll_interval=2, max_retries=0 for API-side fallback so it fails fast (~10s) instead of blocking the request. Worker-side extraction keeps default timeout (background task, safe). --- apps/api/app/api/routes/generation_cover.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/api/app/api/routes/generation_cover.py b/apps/api/app/api/routes/generation_cover.py index 4b904cfc8..a0ff342aa 100644 --- a/apps/api/app/api/routes/generation_cover.py +++ b/apps/api/app/api/routes/generation_cover.py @@ -31,8 +31,6 @@ logger = logging.getLogger(__name__) router = APIRouter(tags=["Generation"]) - - # ── Schemas ────────────────────────────────────────────────────────────── @@ -65,7 +63,6 @@ class GenerateCoverResponse(BaseModel): # ── Route ──────────────────────────────────────────────────────────────── - def _persist_cover_frame(frame_url: str, plan_id: str) -> str: """下载 MediaKit 返回的临时帧图并转存到 OSS covers/ 路径。""" import tempfile @@ -238,7 +235,7 @@ def generate_cover( ) # 使用裸 URL(rendered/* 已配置公开读);找不到渲染视频时不立即报错, - # 因为步骤 E 可以直接从源素材抽帧(前端纯 Canvas/WebCodecs 预览无后端渲染产物) + # 因为步骤 E 可以直接从源素材抽帧(历史数据或 Worker 抽帧失败时的兜底) primary_video_url = None if rendered_storage_key: plan_svc.update_plan_config(plan_id, {"rendered_storage_key": rendered_storage_key}) @@ -252,6 +249,7 @@ def generate_cover( primary_video_url = storage_svc.get_url(rendered_storage_key) if primary_video_url: import re as _re + primary_video_url = _re.sub(r"(?