46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
/**
|
|
* Video API | 视频生成 API
|
|
*/
|
|
|
|
import { request } from '@/utils'
|
|
|
|
// 创建视频任务
|
|
export const createVideoTask = (data, options = {}) => {
|
|
const { endpoint = '/videos', requestType = 'json' } = options
|
|
return request({
|
|
url: endpoint,
|
|
method: 'post',
|
|
data,
|
|
headers: requestType === 'formdata'
|
|
? { 'Content-Type': 'multipart/form-data' }
|
|
: { 'Content-Type': 'application/json' }
|
|
})
|
|
}
|
|
|
|
// 查询视频任务状态
|
|
export const getVideoTaskStatus = (taskId, options = {}) => {
|
|
const { endpoint = '/videos' } = options
|
|
return request({
|
|
url: `${endpoint}`,
|
|
method: 'get'
|
|
})
|
|
}
|
|
// 轮询视频任务直到完成
|
|
export const pollVideoTask = async (taskId, maxAttempts = 120, interval = 5000) => {
|
|
for (let i = 0; i < maxAttempts; i++) {
|
|
const result = await getVideoTaskStatus(taskId)
|
|
|
|
if (result.status === 'completed' || result.data) {
|
|
return result
|
|
}
|
|
|
|
if (result.status === 'failed') {
|
|
throw new Error(result.error?.message || '视频生成失败')
|
|
}
|
|
|
|
await new Promise(resolve => setTimeout(resolve, interval))
|
|
}
|
|
|
|
throw new Error('视频生成超时')
|
|
}
|