简体中文
当视频生成完成后,系统会向提供的回调 URL 发送 POST 请求通知结果
callBackUrl
{ "code": 200, "msg": "All generated successfully.", "data": { "task_id": "ee603959-debb-48d1-98c4-a6d1c717eba6", "video_id": "485da89c-7fca-4340-8c04-101025b2ae71", "video_url": "https://file.com/k/xxxxxxx.mp4", "image_url": "https://file.com/m/xxxxxxxx.png" } }
const express = require('express'); const fs = require('fs'); const https = require('https'); const path = require('path'); const app = express(); app.use(express.json()); app.post('/runway-video-callback', (req, res) => { const { code, msg, data } = req.body; console.log('收到 Runway 视频生成回调:', { taskId: data.task_id, videoId: data.video_id, status: code, message: msg }); if (code === 200) { // 任务成功完成 console.log('Runway 视频生成成功完成'); const { task_id, video_id, video_url, image_url } = data; console.log(`视频 URL: ${video_url}`); console.log(`封面图片 URL: ${image_url}`); console.log('注意:视频 URL 有效期为 14 天'); // 下载视频文件 if (video_url) { downloadFile(video_url, `runway_video_${task_id}.mp4`) .then(() => console.log('视频下载成功')) .catch(err => console.error('视频下载失败:', err)); } // 下载封面图片 if (image_url) { downloadFile(image_url, `runway_cover_${task_id}.png`) .then(() => console.log('封面图片下载成功')) .catch(err => console.error('封面图片下载失败:', err)); } } else { // 任务失败 console.log('Runway 视频生成失败:', msg); // 处理特定错误类型 if (code === 400) { console.log('客户端错误 - 检查内容、格式或配额'); } else if (code === 500) { console.log('服务器错误 - 可能需要重试'); } } // 返回 200 状态码确认收到回调 res.status(200).json({ status: 'received' }); }); // 辅助函数:下载文件 function downloadFile(url, filename) { return new Promise((resolve, reject) => { const file = fs.createWriteStream(filename); https.get(url, (response) => { if (response.statusCode === 200) { response.pipe(file); file.on('finish', () => { file.close(); resolve(); }); } else { reject(new Error(`HTTP ${response.statusCode}`)); } }).on('error', reject); }); } app.listen(3000, () => { console.log('回调服务器运行在端口 3000'); });
网络连接问题
服务器响应问题
内容格式问题
视频处理问题
内容审核问题