fix(mediakit): 抽帧轮询识别 completed 状态,修复封面抽帧始终超时失败 #1461

Merged
xiaoxia merged 1 commits from fix/mediakit-completed-status into develop 2026-08-23 01:02:24 +08:00
Owner

问题

火山引擎 MediaKit 抽帧 API 实际完成状态是 completed,但 _poll_task_result_with_error 只判断 status == "success",导致任务 2 秒就成功返回帧数据,客户端却不认,继续轮询到超时(5×2s=10s 或默认 30×2s=60s)最终返回 None。

这一封面抽帧失败的真正根因:

  • Worker 渲染预览后抽帧一直写不进 gen_task.cover_url(轮询到超时返回 None)
  • API E1/E2 兜底抽帧也都返回 None,最终封面 400

修复

packages/shared/mediakit_client.py 第 367 行:

# before
if status == "success":
# after
if status in ("completed", "success"):

与同文件 _poll_video_understand_result_with_error 第 289 行的判断保持一致。

验证

  • 容器内直接调 MediaKit:提交后 2 秒返回 {"status":"completed","result":{"snapshot_count":30,"snapshots":[...]}},数据完全正常
  • pytest -k 'mediakit or cover' -q → 177 passed, 2 skipped
  • py_compile OK

影响范围

修复后:

  1. Worker 预览渲染完成后调 MediaKit 抽帧能正常拿到结果,写入 gen_task.cover_url
  2. API 封面 A/B/C 步骤即可命中 cover_url
  3. E1/E2 兜底抽帧也能正常返回帧图
## 问题 火山引擎 MediaKit 抽帧 API 实际完成状态是 `completed`,但 `_poll_task_result_with_error` 只判断 `status == "success"`,导致任务 2 秒就成功返回帧数据,客户端却不认,继续轮询到超时(5×2s=10s 或默认 30×2s=60s)最终返回 None。 这一封面抽帧失败的真正根因: - Worker 渲染预览后抽帧一直写不进 `gen_task.cover_url`(轮询到超时返回 None) - API E1/E2 兜底抽帧也都返回 None,最终封面 400 ## 修复 `packages/shared/mediakit_client.py` 第 367 行: ```python # before if status == "success": # after if status in ("completed", "success"): ``` 与同文件 `_poll_video_understand_result_with_error` 第 289 行的判断保持一致。 ## 验证 - 容器内直接调 MediaKit:提交后 2 秒返回 `{"status":"completed","result":{"snapshot_count":30,"snapshots":[...]}}`,数据完全正常 - `pytest -k 'mediakit or cover' -q` → 177 passed, 2 skipped - `py_compile` OK ## 影响范围 修复后: 1. Worker 预览渲染完成后调 MediaKit 抽帧能正常拿到结果,写入 `gen_task.cover_url` 2. API 封面 A/B/C 步骤即可命中 cover_url 3. E1/E2 兜底抽帧也能正常返回帧图
xiaoxia added 1 commit 2026-08-23 00:51:33 +08:00
fix(mediakit): accept "completed" status in extract_frames polling
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 37s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 49s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m38s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m38s
AI Code Review / AI Code Review (pull_request) Successful in 1m40s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m56s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m43s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m25s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m41s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m53s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m52s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 8m15s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 11s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 41s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 43s
39683bda09
火山引擎 MediaKit 抽帧 API 完成时返回 status="completed",
但 _poll_task_result_with_error 只判断 "success",
导致任务实际已成功返回帧数据,客户端却继续轮询到超时返回 None,
封面抽帧一直失败。

与同文件 _poll_video_understand_result_with_error 的判断保持一致。
Worker 渲染后抽帧和 API E1/E2 兜底均受此 bug 影响。
Collaborator

代码审查结果 - PR #1461

⚠️ 问题(0个需要修改)

💡 建议(0个可选)


格式检查通过 | 逻辑审查通过 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-08-22 16:53:12 | 模型:

## 代码审查结果 - PR #1461 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(0个可选) 无 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-22 16:53:12 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

项目 详情
PR号 #1461
预览链接 https://pr-1461.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1461 | | 预览链接 | [https://pr-1461.preview.xiaoxiajianji.com](https://pr-1461.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-08-23 01:00:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-23 01:00:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia merged commit ea42e48a9f into develop 2026-08-23 01:02:24 +08:00

🗑️ 预览环境已清理

PR #1461 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1461 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.