简体中文
当视频扩展完成时,系统会调用此回调通知结果
callBackUrl
{ "code": 200, "msg": "All generated successfully.", "data": { "image_url": "https://file.com/m/xxxxxxxx.png", "task_id": "ee603959-debb-48d1-98c4-a6d1c717eba6", "video_id": "485da89c-7fca-4340-8c04-101025b2ae71", "video_url": "https://file.com/k/xxxxxxx.mp4" } }
const express = require('express'); const fs = require('fs'); const https = require('https'); const app = express(); app.use(express.json()); app.post('/runway-extend-callback', (req, res) => { const { code, msg, data } = req.body; console.log('收到 Runway 视频扩展回调:', { taskId: data.task_id, status: code, message: msg }); if (code === 200) { // 视频扩展成功 const { task_id, video_id, video_url, image_url } = data; console.log('视频扩展成功!'); console.log(`任务 ID: ${task_id}`); console.log(`视频 ID: ${video_id}`); console.log(`视频 URL: ${video_url}`); console.log(`封面 URL: ${image_url}`); // 下载视频文件 if (video_url) { downloadFile(video_url, `runway_extend_${task_id}.mp4`) .then(() => console.log('视频下载成功')) .catch(err => console.error('视频下载失败:', err)); } // 下载封面图片 if (image_url) { downloadFile(image_url, `runway_extend_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({ code: 200, msg: 'success' }); }); // 辅助函数:下载文件 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'); });
网络连接问题
服务器响应问题
内容格式问题
视频处理问题
内容审核问题
并发限制问题
扩展质量问题