fix: 预览视频3问题修复 — URL签名/时长约束/分辨率 (#1209) #1229
Reference in New Issue
Block a user
Delete Branch "fix/preview-generation-3-issues"
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?
修复内容
P0 - 预览视频黑屏
generation_preview.py的_to_preview_response返回裸 OSS URL,私有 bucket 403 → 黑屏_sign_video_url()函数,返回前调用get_storage_service().get_download_url()生成预签名 URL(有效期 2 小时),签名失败降级返回原始 URLP1 - 预览视频时长不符合模板
_build_plan_and_clips_from_task()中duration=path_duration[p]用了素材完整时长,模板 segment 的duration_max约束没生效_load_template_segment_durations()读取模板 segment 的duration_max列表,在 clip 创建后对每个 clip 取min(素材时长, segment.duration_max)P1 - 预览分辨率横屏应竖屏
_render_video()中is_preview=True时硬编码"854x480"横屏,忽略了前端传入的video_ratio参数resolution参数(如"480x854"竖屏),未传入时才降级为默认"854x480"测试
tests/unit/test_preview_generation_fixes.py,覆盖 URL 签名(5)、时长约束(6)、分辨率(7) = 18 个测试验收标准
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
TestCalcPreviewResolution(第1064行开始)中,测试方法尝试从app.api.routes.generation_preview导入并调用_calc_preview_resolution函数。然而,在apps/api/app/api/routes/generation_preview.py的代码变更中,并未定义或引入该函数(仅新增了_sign_video_url)。这将导致测试运行时出现ImportError或AttributeError,测试无法通过。_calc_preview_resolution函数是否遗漏在本次代码提交中,或者该测试类属于错误的文件/PR。如果该逻辑应在 API 层实现,请补充函数定义;如果该逻辑仅在 Worker 层(generation.py)实现,请删除或调整该测试类。💡 改进建议(不阻塞合并)
无
✅ 良好实践
_sign_video_url和_load_template_segment_durations均实现了完善的异常捕获和降级逻辑,确保非核心流程错误(如签名失败、DB查询失败)不阻断主任务流程,提高了系统的鲁棒性。test_generation_worker_fixes.py对 Worker 端的时长截断逻辑进行了细致的单元测试(包括边界条件、部分匹配等),测试覆盖面较全。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-08-03 16:13:53 | 模型:
🗑️ 预览环境已清理
PR #1229 已关闭或合并,对应的预览环境已被清理。