# 文生视频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
```

**请求参数**:
```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，默认5
- `hdMode` (可选): 是否高清模式，默认false

**响应示例**:
```json
{
  "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开始，默认0
- `size` (可选): 每页数量，最大100，默认10

**响应示例**:
```json
{
  "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

**响应示例**:
```json
{
  "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

**响应示例**:
```json
{
  "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

**响应示例**:
```json
{
  "success": true,
  "message": "任务已取消"
}
```

## 📊 **任务状态说明**

| 状态 | 描述 | 说明 |
|------|------|------|
| PENDING | 等待中 | 任务已创建，等待处理 |
| PROCESSING | 处理中 | 正在生成视频 |
| COMPLETED | 已完成 | 视频生成成功 |
| FAILED | 失败 | 视频生成失败 |
| CANCELLED | 已取消 | 任务被用户取消 |

## 💰 **积分消耗规则**

文生视频的积分消耗计算方式：
- **基础消耗**: 15积分
- **时长消耗**: 每1秒消耗3积分
- **高清模式**: 额外消耗25积分

**示例**:
- 5秒普通视频: 15 + (5 × 3) = 30积分
- 10秒高清视频: 15 + (10 × 3) + 25 = 70积分

## 🔧 **前端集成示例**

### 创建任务
```javascript
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)
  }
}
```

### 轮询任务状态
```javascript
const startPolling = (taskId) => {
  const stopPolling = textToVideoApi.pollTaskStatus(
    taskId,
    // 进度回调
    (progressData) => {
      console.log('进度:', progressData.progress + '%')
    },
    // 完成回调
    (taskData) => {
      console.log('任务完成:', taskData.resultUrl)
    },
    // 错误回调
    (error) => {
      console.error('任务失败:', error.message)
    }
  )
  
  // 需要时停止轮询
  // stopPolling()
}
```

## 🛡️ **安全说明**

1. **认证要求**: 所有API都需要JWT认证
2. **权限控制**: 用户只能访问自己的任务
3. **参数验证**: 严格的输入参数验证
4. **错误处理**: 完善的错误处理和日志记录

## 📝 **错误码说明**

| 错误码 | 说明 | 解决方案 |
|--------|------|----------|
| 400 | 参数错误 | 检查请求参数格式和内容 |
| 401 | 未认证 | 提供有效的JWT Token |
| 403 | 权限不足 | 确保有访问权限 |
| 404 | 任务不存在 | 检查任务ID是否正确 |
| 500 | 服务器错误 | 联系技术支持 |

## 🚀 **最佳实践**

1. **任务创建**: 创建任务后立即开始轮询状态
2. **错误处理**: 实现完善的错误处理和用户提示
3. **资源清理**: 页面卸载时停止轮询
4. **用户体验**: 提供清晰的进度反馈和状态显示
5. **性能优化**: 合理设置轮询间隔，避免频繁请求

## 📞 **技术支持**

如有问题，请联系开发团队或查看系统日志获取详细错误信息。








