fix(ai-avatar): 修复智能封面接口 502,增大抽帧等待时间+连接池下载+video_url 重签 #1840

Closed
xiaoxia wants to merge 2 commits from fix/smart-cover-502-timeout into develop

2 Commits

Author SHA1 Message Date
CI Bot 1827a1fa49 style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 38s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 20s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m0s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m2s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m40s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m7s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m6s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m16s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m20s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m32s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m53s
AI Code Review / AI Code Review (pull_request) Successful in 6m22s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 9m23s
CI/CD Pipeline / CI Gate (pull_request) Successful in 2s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 9m34s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 6s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 30s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 141h54m3s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 141h54m4s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 141h54m3s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 141h54m4s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 142h2m33s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 142h2m34s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 142h2m34s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 142h2m38s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 142h2m45s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 142h2m45s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 142h3m29s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 142h3m29s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 142h3m30s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 142h3m33s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 142h28m53s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 142h37m34s
2026-09-10 09:20:20 +00:00
saas-backend 150dc17273 fix(ai-avatar): 修复智能封面接口 502,增大抽帧等待时间+连接池下载+video_url 重签
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m32s
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m16s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m51s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m16s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 49s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 32s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 143h34m42s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 143h35m6s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 143h35m8s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 142h59m54s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 142h59m55s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 143h0m21s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 143h0m21s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 143h34m29s
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 143h0m23s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 142h59m42s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 143h0m18s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 142h59m41s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 142h59m46s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 143h0m19s
问题根因:
1. MediaKit 抽帧轮询参数过短(poll_interval=2s, max_poll_attempts=5,最多等 10s),大视频或排队场景下 MediaKit 尚未完成即放弃
2. 帧图片串行下载,每次新建 TCP 连接(httpx.get),5帧×15s 最坏 75s,加上 persist 再下载 30s,总耗时可达 105s
3. 前端传入的 video_url 可能是 OSS 私有桶裸 URL,MediaKit 无法访问导致抽帧失败

修复:
- MediaKit 抽帧参数:poll_interval 2s→3s,max_poll_attempts 5→20(最多等 60s),max_retries 0→1
- 帧下载改用 httpx.Client 连接池复用,减少连接建立开销
- 新增 _sign_video_url_for_mediakit:自动检测自家 OSS URL 并重签 7 天有效期
- 路由层增加 try/except 包裹 generate_smart_cover,异常时返回 fallback 而非 502
- 增加关键路径日志

测试:新增 3 个单测(video_url 重签、外部 URL 透传、轮询参数校验),共 15 测试全过
2026-09-10 16:23:16 +08:00