防止 HTML 5 `video` 在 src 更改时闪烁海报图像

Posted

技术标签:

【中文标题】防止 HTML 5 `video` 在 src 更改时闪烁海报图像【英文标题】:Prevent HTML 5 `video` from flashing poster image on src change 【发布时间】:2019-05-23 07:01:52 【问题描述】:

在 React 中,我使用 video 元素根据用户单击的按钮动态加载静态视频文件,并且每次视频更改时都会短暂显示海报图像。这是我的视频播放器标记的样子:

<video
    id="video-player"
    controls
    controlsList="nodownload"
    autoPlay=props.autoplay
    src=props.video
    onMouseOver=(e) => e.target.controls = true
    onMouseOut=(e) => e.target.controls = false
    poster=poster
>

我正在尝试找到一种方法来等待新视频加载,然后再停止旧视频,这样我就可以摆脱视频之间海报图像的快速闪烁。有没有办法做到这一点?

【问题讨论】:

您可以尝试使用promise 加载一个新的视频元素,然后在它解析时替换该视频元素。 我会在承诺中加载什么?视频反应/DOM 元素?我怎么知道它已经完成加载? 您可以加载一个新的视频元素,并且承诺只有在完成加载元素后才会解析。或者,您可以使用onLoad 事件来检测视频何时完成加载。 【参考方案1】:

您应该使用组件setState() 方法来实现这一点。您的视频源看起来像src=state.videoSrc,而您的按钮处理程序将是这样的:

myButtonHandler(videoSrc) 
  this.setState(
    videoSrc
  )

videoSrc 将是您的静态字符串,代表 url。

https://reactjs.org/docs/state-and-lifecycle.html

【讨论】:

我的那部分工作正常!我的问题是加载新视频时海报图片会闪烁,我希望视频播放器继续播放旧视频,直到新视频准备就绪 您可能需要两个元素,一个用于当前正在播放的视频,一个用于新视频,一个用于触发加载或 canplay 事件,然后交换它们...

以上是关于防止 HTML 5 `video` 在 src 更改时闪烁海报图像的主要内容,如果未能解决你的问题,请参考以下文章

video调用直播接口:防止缓存方案

html5如何更改video的src属性

HTML 5 video 视频标签全属性详解(转)

Html5-Video标签和字幕

v-html里的video手机打开是白屏

用js控制video的src