快速总结
我希望能够观看视频,并在视频中的给定时间戳创建一些注释。我目前正在使用react-player库来流式传输视频,以及使用 CRA 创建的 react/redux 项目。我发现在创建笔记时很难获得视频的最新时间戳。
细节
感兴趣的主要组件是两个兄弟组件。为简化起见,假设我们有一个App.js
文件,其中包含VideoPlayer
组件和AddNoteButton
组件。
这是每个组件中正在发生的事情,非常简化
视频播放器
export function VideoPlayer() {
const player = useRef(null);
const playing = useSelector(selectPlaying);
const dispatch = useDispatch();
return (
<ReactPlayer
ref={player}
onPause={() => {
dispatch(setPlaying(false));
}}
onPlay={() => {
dispatch(setPlaying(true));
}}
onProgress={(progress) => dispatch(setProgress(progress))}
playing={playing}
/>
);
}
playing
并且progress
都保存为 redux 状态。
添加注释按钮
export function AddNoteButton() {
const [visible, setVisible] = useState(false);
const [start, setStart] = useState();
const progress = useSelector(selectProgress);
const dispatch = useDispatch();
const showModal = () => {
dispatch(setPlaying(false)); // dispatches action to stop playing player
setStart(progress.playedSeconds);
setVisible(true);
};
return (
<>
<Button onClick={showModal} />
<Modal title="Add Note" visible={visible}>
<div>{pauseStart}</div>
</Modal>
</>
);
}
问题
当用户单击 AddNoteButton 中的按钮时,会发生以下情况:
- 它分派
setPlaying(false)
,将playing
redux 中的状态更改为 false - 使用播放器的当前时间戳显示模式
- 看到 的更新值后
playing
,ReactPlayer
停止运行
请注意,在 2、3 之间有一小段时间玩家没有停下来。因此,我们看到的是在创建函数时从 redux 状态检索到的注释中的时间戳showModal
,这不一定是实际ReactPlayer
停止的位置(它总是更早)理想情况下,我们希望在它player.current.getCurrentTime()
之后创建一个注释已经停止。有没有办法继续实现这一目标?任何帮助表示赞赏!