新增 使用后端返回的snapshot

This commit is contained in:
moux1024 2025-10-14 21:48:00 +08:00
parent 7beab504af
commit 79b7f43c0f
3 changed files with 16 additions and 7 deletions

View File

@ -267,6 +267,8 @@ export interface VideoData {
video_name_prefix: string;
/** 视频URL列表 */
urls: string[];
/** 视频封面图(后端返回) */
snapshot_urls?: string[];
/** 视频状态 */
video_status: number;
}
@ -654,6 +656,7 @@ export interface ShotVideo {
urls: string[];
video_status: number;
type: string;
snapshot_url?: string;
}
// 执行loading文字映射
@ -700,5 +703,6 @@ export interface TaskObject {
final: {
url: string;
note: string;
snapshot_url?: string;
}; // 剪辑视频
}

View File

@ -214,7 +214,7 @@ export function ThumbnailGrid({
>
<img
className="w-full h-full object-cover"
src={getFirstFrame(taskObject.final.url)}
src={taskObject.final.snapshot_url || getFirstFrame(taskObject.final.url)}
draggable="false"
alt="final video thumbnail"
/>
@ -226,7 +226,7 @@ export function ThumbnailGrid({
muted
playsInline
loop
poster={getFirstFrame(taskObject.final.url)}
poster={taskObject.final.snapshot_url || getFirstFrame(taskObject.final.url)}
preload="none"
/>
)}
@ -288,7 +288,7 @@ export function ThumbnailGrid({
>
<img
className="w-full h-full object-cover"
src={getFirstFrame(taskObject.videos.data[index].urls[0])}
src={taskObject.videos.data[index].snapshot_url || getFirstFrame(taskObject.videos.data[index].urls[0])}
draggable="false"
alt="video thumbnail"
/>
@ -300,7 +300,7 @@ export function ThumbnailGrid({
muted
playsInline
loop
poster={getFirstFrame(taskObject.videos.data[index].urls[0])}
poster={taskObject.videos.data[index].snapshot_url || getFirstFrame(taskObject.videos.data[index].urls[0])}
preload="none"
/>
)}

View File

@ -206,6 +206,7 @@ export function useWorkflowData({}: UseWorkflowDataProps = {}) {
const all_task_data = response.data;
const { current: taskCurrent } = tempTaskObject;
let combinerVideoUrl = '';
let combinerVideoPoster = '';
// 收集所有需要更新的状态
let stateUpdates = JSON.stringify(taskCurrent);
@ -288,7 +289,8 @@ export function useWorkflowData({}: UseWorkflowDataProps = {}) {
urls: videoUrls,
video_id: video.video_id,
video_status: video_status, // 0 生成中 1 生成完成 2 生成失败
type: 'video'
type: 'video',
snapshot_url: video.snapshot_url
});
}
taskCurrent.videos.data = videoList;
@ -312,6 +314,7 @@ export function useWorkflowData({}: UseWorkflowDataProps = {}) {
if (task.task_name === 'combiner_videos') {
if (task.task_status === 'COMPLETED') {
combinerVideoUrl = task.task_result.video_url;
combinerVideoPoster = task.task_result.snapshot_url;
}
if (task.task_status === 'FAILED' || task.task_status === 'ERROR') {
taskCurrent.status = 'FAILED';
@ -338,6 +341,7 @@ export function useWorkflowData({}: UseWorkflowDataProps = {}) {
taskCurrent.currentStage = 'final_video';
taskCurrent.final.url = combinerVideoUrl;
taskCurrent.final.note = 'combiner';
taskCurrent.final.snapshot_url = combinerVideoPoster;
taskCurrent.status = 'COMPLETED';
// 停止轮询
setNeedStreamData(false);
@ -492,7 +496,8 @@ export function useWorkflowData({}: UseWorkflowDataProps = {}) {
urls: videoUrls,
video_id: video.video_id,
video_status: video_status, // 0 生成中 1 生成完成 2 生成失败
type: 'video'
type: 'video',
snapshot_url: video.snapshot_urls?.[0] || ''
});
}
taskCurrent.videos.data = videoList;