- 修改RealAIService.submitTextToImageTask使用nano-banana/nano-banana-hd模型 - 支持根据hdMode参数选择模型(标准/高清) - 修复数据库列类型:将result_url等字段改为TEXT类型以支持Base64图片 - 添加数据库修复SQL脚本(fix_database_columns.sql, update_database_schema.sql) - 改进StoryboardVideoService的错误处理和空值检查 - 添加GlobalExceptionHandler全局异常处理 - 优化图片URL提取逻辑,支持url和b64_json两种格式 - 改进响应格式验证,确保data字段不为空
6.5 KiB
6.5 KiB
文生视频API使用指南
📋 API概述
文生视频API提供了完整的文本生成视频功能,包括任务创建、状态查询、进度监控和任务管理等功能。
🔗 API端点
基础URL
http://localhost:8080/api/text-to-video
📚 API接口详情
1. 创建文生视频任务
接口: POST /api/text-to-video/create
描述: 根据文本描述创建视频生成任务
请求头:
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json
请求参数:
{
"prompt": "一只可爱的小猫在花园里玩耍",
"aspectRatio": "16:9",
"duration": 5,
"hdMode": false
}
参数说明:
prompt(必填): 文本描述,最大1000字符aspectRatio(可选): 视频比例,支持 "16:9", "4:3", "1:1", "3:4", "9:16",默认 "16:9"duration(可选): 视频时长(秒),范围1-60,默认5hdMode(可选): 是否高清模式,默认false
响应示例:
{
"success": true,
"message": "文生视频任务创建成功",
"data": {
"id": 1,
"taskId": "txt2vid_abc123def456",
"username": "test_user",
"prompt": "一只可爱的小猫在花园里玩耍",
"aspectRatio": "16:9",
"duration": 5,
"hdMode": false,
"status": "PENDING",
"progress": 0,
"costPoints": 30,
"createdAt": "2025-01-24T10:00:00",
"updatedAt": "2025-01-24T10:00:00"
}
}
2. 获取任务列表
接口: GET /api/text-to-video/tasks
描述: 获取用户的所有文生视频任务
请求头:
Authorization: Bearer <JWT_TOKEN>
查询参数:
page(可选): 页码,从0开始,默认0size(可选): 每页数量,最大100,默认10
响应示例:
{
"success": true,
"data": [
{
"id": 1,
"taskId": "txt2vid_abc123def456",
"username": "test_user",
"prompt": "一只可爱的小猫在花园里玩耍",
"aspectRatio": "16:9",
"duration": 5,
"hdMode": false,
"status": "COMPLETED",
"progress": 100,
"resultUrl": "/outputs/txt2vid_abc123def456/video_1737696000000.mp4",
"costPoints": 30,
"createdAt": "2025-01-24T10:00:00",
"updatedAt": "2025-01-24T10:15:00",
"completedAt": "2025-01-24T10:15:00"
}
],
"total": 1,
"page": 0,
"size": 10
}
3. 获取任务详情
接口: GET /api/text-to-video/tasks/{taskId}
描述: 获取指定任务的详细信息
请求头:
Authorization: Bearer <JWT_TOKEN>
路径参数:
taskId: 任务ID
响应示例:
{
"success": true,
"data": {
"id": 1,
"taskId": "txt2vid_abc123def456",
"username": "test_user",
"prompt": "一只可爱的小猫在花园里玩耍",
"aspectRatio": "16:9",
"duration": 5,
"hdMode": false,
"status": "COMPLETED",
"progress": 100,
"resultUrl": "/outputs/txt2vid_abc123def456/video_1737696000000.mp4",
"costPoints": 30,
"createdAt": "2025-01-24T10:00:00",
"updatedAt": "2025-01-24T10:15:00",
"completedAt": "2025-01-24T10:15:00"
}
}
4. 获取任务状态
接口: GET /api/text-to-video/tasks/{taskId}/status
描述: 获取任务的当前状态和进度
请求头:
Authorization: Bearer <JWT_TOKEN>
路径参数:
taskId: 任务ID
响应示例:
{
"success": true,
"data": {
"taskId": "txt2vid_abc123def456",
"status": "PROCESSING",
"progress": 65,
"resultUrl": null,
"errorMessage": null
}
}
5. 取消任务
接口: POST /api/text-to-video/tasks/{taskId}/cancel
描述: 取消正在进行的任务
请求头:
Authorization: Bearer <JWT_TOKEN>
路径参数:
taskId: 任务ID
响应示例:
{
"success": true,
"message": "任务已取消"
}
📊 任务状态说明
| 状态 | 描述 | 说明 |
|---|---|---|
| PENDING | 等待中 | 任务已创建,等待处理 |
| PROCESSING | 处理中 | 正在生成视频 |
| COMPLETED | 已完成 | 视频生成成功 |
| FAILED | 失败 | 视频生成失败 |
| CANCELLED | 已取消 | 任务被用户取消 |
💰 积分消耗规则
文生视频的积分消耗计算方式:
- 基础消耗: 15积分
- 时长消耗: 每1秒消耗3积分
- 高清模式: 额外消耗25积分
示例:
- 5秒普通视频: 15 + (5 × 3) = 30积分
- 10秒高清视频: 15 + (10 × 3) + 25 = 70积分
🔧 前端集成示例
创建任务
import { textToVideoApi } from '@/api/textToVideo'
const createTask = async () => {
try {
const params = {
prompt: "一只可爱的小猫在花园里玩耍",
aspectRatio: "16:9",
duration: 5,
hdMode: false
}
const response = await textToVideoApi.createTask(params)
if (response.data.success) {
console.log('任务创建成功:', response.data.data)
// 开始轮询任务状态
startPolling(response.data.data.taskId)
}
} catch (error) {
console.error('创建任务失败:', error)
}
}
轮询任务状态
const startPolling = (taskId) => {
const stopPolling = textToVideoApi.pollTaskStatus(
taskId,
// 进度回调
(progressData) => {
console.log('进度:', progressData.progress + '%')
},
// 完成回调
(taskData) => {
console.log('任务完成:', taskData.resultUrl)
},
// 错误回调
(error) => {
console.error('任务失败:', error.message)
}
)
// 需要时停止轮询
// stopPolling()
}
🛡️ 安全说明
- 认证要求: 所有API都需要JWT认证
- 权限控制: 用户只能访问自己的任务
- 参数验证: 严格的输入参数验证
- 错误处理: 完善的错误处理和日志记录
📝 错误码说明
| 错误码 | 说明 | 解决方案 |
|---|---|---|
| 400 | 参数错误 | 检查请求参数格式和内容 |
| 401 | 未认证 | 提供有效的JWT Token |
| 403 | 权限不足 | 确保有访问权限 |
| 404 | 任务不存在 | 检查任务ID是否正确 |
| 500 | 服务器错误 | 联系技术支持 |
🚀 最佳实践
- 任务创建: 创建任务后立即开始轮询状态
- 错误处理: 实现完善的错误处理和用户提示
- 资源清理: 页面卸载时停止轮询
- 用户体验: 提供清晰的进度反馈和状态显示
- 性能优化: 合理设置轮询间隔,避免频繁请求
📞 技术支持
如有问题,请联系开发团队或查看系统日志获取详细错误信息。