解决最终剪辑好的视频播放时进度条不动的问题

This commit is contained in:
qikongjian 2025-09-29 17:25:04 +08:00
parent 3854d220ad
commit 88bc67a83b

View File

@ -296,26 +296,36 @@ export const MediaViewer = React.memo(function MediaViewer({
}
}, [volume, isMuted]);
// 绑定时间更新(同时监听两个 video
// 绑定时间更新(只监听当前活跃的 video
useEffect(() => {
const mv = mainVideoRef.current;
const fv = finalVideoRef.current;
const activeRef = activeVideoRef();
const activeVideo = activeRef.current;
if (!activeVideo) return;
const onTimeUpdate = (e: Event) => {
const el = e.currentTarget as HTMLVideoElement;
setCurrentTime(el.currentTime || 0);
if (Number.isFinite(el.duration)) setDuration(el.duration);
// 只有当事件来源是当前活跃视频时才更新状态
if (el === activeVideo) {
setCurrentTime(el.currentTime || 0);
if (Number.isFinite(el.duration)) setDuration(el.duration);
}
};
mv?.addEventListener('timeupdate', onTimeUpdate);
fv?.addEventListener('timeupdate', onTimeUpdate);
mv?.addEventListener('loadedmetadata', onTimeUpdate);
fv?.addEventListener('loadedmetadata', onTimeUpdate);
activeVideo.addEventListener('timeupdate', onTimeUpdate);
activeVideo.addEventListener('loadedmetadata', onTimeUpdate);
return () => {
mv?.removeEventListener('timeupdate', onTimeUpdate);
fv?.removeEventListener('timeupdate', onTimeUpdate);
mv?.removeEventListener('loadedmetadata', onTimeUpdate);
fv?.removeEventListener('loadedmetadata', onTimeUpdate);
activeVideo.removeEventListener('timeupdate', onTimeUpdate);
activeVideo.removeEventListener('loadedmetadata', onTimeUpdate);
};
}, []);
}, [selectedView, taskObject.currentStage]); // 依赖项包含影响activeVideoRef的状态
// 当切换视频源时重置进度状态
useEffect(() => {
setCurrentTime(0);
setDuration(0);
}, [selectedView, currentSketchIndex, taskObject.currentStage]);
const activeVideoRef = () => {
// 根据当前阶段选择活跃的 video 引用