feat: #1208 AI封面接入MediaKit视频截帧 #1214
Reference in New Issue
Block a user
Delete Branch "feat/mediakit-ai-cover-1208"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
目标
把
_call_ai_cover_service从 stub 改为真实调用 MediaKit 视频截帧改动
新增 MediaKit 客户端 (
packages/shared/mediakit_client.py)is_available=False,调用方自动降级修改 AI 封面服务 (
packages/shared/ai_service.py)_call_ai_cover_service新增primary_video_url参数cover_type为ai_frame或ai_regenerate时调用 MediaKit修改 API 路由 (
apps/api/app/api/routes/templates_editor/cover.py)asset_ids获取第一个视频的下载 URLrun_generate_cover新增配置 (
packages/config/base.py)MEDIAKIT_API_KEY: MediaKit API KeyMEDIAKIT_BASE_URL: 默认https://mediakit.cn-beijing.volces.com/api/v1MEDIAKIT_TIMEOUT: 默认 60 秒测试
tests/unit/test_mediakit_cover.py)run_generate_cover:参数传递正确性向后兼容
primary_video_url为可选参数,默认Noneupload和manual类型的封面逻辑完全不变环境变量
需要在 staging 环境配置:
🚀 预览环境已部署
代码审查结果 - PR #1214
⚠️ 问题(2个需要修改)
packages/shared/mediakit_client.py 第107-174行:同步阻塞导致严重的性能瓶颈和可用性风险。
extract_frames方法使用了同步的time.sleep和httpx客户端进行轮询。在默认配置下(轮询间隔2秒,最大30次),该函数会阻塞请求线程长达60秒。在 Web 服务器(如 Gunicorn/Uvicorn workers)中,这会直接占用工作线程,导致并发能力急剧下降,高并发时容易耗尽线程池造成服务拒绝(DoS)。MediaKitClient改为异步实现(使用httpx.AsyncClient和asyncio.sleep),并将调用链路上的editor_generate_cover和run_generate_cover均改为async def。或者,将抽帧任务提交到后台队列(如 Celery)异步处理,接口立即返回任务 ID。packages/shared/mediakit_client.py 第162-165行:异常处理逻辑缺陷,无效重试浪费资源。
_poll_task_result的轮询循环中,捕获了通用的Exception并在每次异常后sleep然后继续重试。如果错误是客户端错误(如 401 Unauthorized, 403 Forbidden, 404 Not Found)或请求格式错误,重试不仅无效,还会浪费长达 60 秒的时间(30次重试)并产生大量无效日志。httpx.HTTPStatusError,如果状态码为 4xx,应直接抛出异常或返回 None,停止重试;仅在 5xx 或网络连接错误时进行重试。💡 建议(2个可选)
packages/shared/ai_service.py 第298行:代码冗余。
if frames and len(frames) > 0:中,frames为列表时,len(frames) > 0是多余的,直接写if frames:即可。apps/api/app/api/routes/templates_editor/cover.py 第187-190行:导入位置说明。
import(如from app.database import get_db_session)通常是为了解决循环依赖。如果确实存在循环依赖,建议添加注释说明原因;如果没有,建议移到文件顶部。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-08-01 17:06:45 | 模型:
🗑️ 预览环境已清理
PR #1214 已关闭或合并,对应的预览环境已被清理。