feat: #1796 MediaKit 对口型后端对接 #1801
Reference in New Issue
Block a user
Delete Branch "feat/mediakit-lipsync-1796"
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?
概述
对接火山引擎 AI MediaKit 对口型 API,实现视频+音频→口型对齐口播视频的异步任务。
改动
新增文件
apps/api/app/services/mediakit_client.py— MediaKit API 客户端apps/api/app/services/lipsync_service.py— 对口型业务逻辑apps/api/app/schemas/lipsync.py— 请求/响应 Schemaapps/api/app/api/routes/lipsync.py— RESTful API 路由alembic/versions/071_add_lipsync_jobs_table.py— 数据库迁移tests/unit/test_mediakit_client.py— 客户端测试(13个)tests/unit/test_lipsync_routes.py— 路由/Service 测试(17个)修改文件
packages/adapters/sqlalchemy_impl/models.py— 新增 LipsyncJobModelapps/api/app/api/router.py— 注册 lipsync 路由API
测试
Closes #1796
- MediaKitClient: 封装火山引擎 AI MediaKit 对口型 API - POST /api/v1/tools/lip-sync 提交任务 - GET /api/v1/tasks/{task_id} 查询状态 - 错误处理:超时/网络/HTTP 错误统一 MediaKitError - 未配置 API Key 时自动降级 - LipsyncJobModel: 对口型任务 ORM 模型 - 用户隔离 + 项目关联 - 状态流转: pending → submitted → completed/failed - LipsyncService: 业务逻辑层 - create_job / get_job / list_jobs / refresh_job_status / cancel_job - 分页查询 + 状态过滤 + 用户隔离 - RESTful API: /api/v1/lipsync/jobs - POST /jobs 提交对口型任务 - GET /jobs 任务列表(分页+过滤) - GET /jobs/{id} 任务详情 - POST /jobs/{id}/refresh 刷新状态 - POST /jobs/{id}/cancel 取消任务 - Schema: 输入校验(视频仅 MP4,音频 mp3/aac/wav/m4a/flac) - 数据库迁移: 071_add_lipsync_jobs_table - lipsync_jobs 表 + 复合索引(user_id+status, project_id+user_id) - 30 个单元测试(13 客户端 + 17 路由/Service) - 不破坏现有功能(65 测试全过)🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1801 已关闭或合并,对应的预览环境已被清理。