javascript - 如何在不加载两次的情况下在网站上两次显示相同的 HTML 5 视频?

标签 javascript html video

目前我的 html 页面上有 2 个视频元素。
两者都嵌入了来自同一 URL 的完全相同的 .mp4 视频。

有没有办法告诉浏览器从第一个视频元素复制呈现的视频,而不是让浏览器下载两个视频?

您可以清楚地看到这两个视频是分开加载的,因为它们有时在播放前有不同的缓冲时间,而且视频不会每次都同步播放。

我的代码:

<video autoplay id="previewVideo" data-videoid="JYpUXXD4xgc">
    <source src="video.php?videoid=JYpUXXD4xgc" type="video/mp4"/>
</video>

<video autoplay id="bigVideo"     data-videoid="JYpUXXD4xgc">
    <source src="video.php?videoid=JYpUXXD4xgc" type="video/mp4"/>
</video>

最佳答案

这可以通过 Javascript 和 Canvas 元素通过一些非常简单的步骤完成:

HTML:

<video autoplay id="previewVideo" data-videoid="JYpUXXD4xgc">
    <source src="video.php?videoid=JYpUXXD4xgc" type="video/mp4"/>
</video>    
<canvas id="bigVideo"></canvas>

JavaScript:

document.addEventListener('DOMContentLoaded', function() {
  var v = document.getElementById('previewVideo');
  var canvas = document.getElementById('bigVideo');
  var context = canvas.getContext('2d');
  var cw = Math.floor(canvas.clientWidth);
  var ch = Math.floor(canvas.clientHeight);
  canvas.width = cw;
  canvas.height = ch;
  v.addEventListener('play', function() {
    updateBigVideo(this, context, cw, ch);
  }, false);
}, false);


function updateBigVideo(v, c, w, h) {
  if (v.paused || v.ended) return false;
  c.drawImage(v, 0, 0, w, h);
  setTimeout(updateBigVideo, 20, v, c, w, h);
}

Canvas 获取视频的图像并再次显示在 BigVideo 上。
updateBigVideo() 函数每 20 毫秒调用一次,从而产生大约 50 FPS 的帧率。

Read more

关于javascript - 如何在不加载两次的情况下在网站上两次显示相同的 HTML 5 视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24496605/

相关文章:

php - 网站上的视频与 php

ios - Swift:视频以一种尺寸录制,但以错误的尺寸呈现

html - 为站点实现非对称背景图像

javascript - 在检查电子邮件输入验证后,如何使用我的按钮将用户重定向到另一个 HTML 页面?

javascript - 所有圆圈都用相同的颜色绘制

javascript - Gulp JS 不输出 CSS 文件

javascript - 如何使用 Browserstack 测试输入类型 ="file"

javascript - paper-drawer-toggle 在点击后不关闭菜单

机器人 : webview playing youtube videos shows white blank page for few seconds

javascript - 拆分窗口位置 URL 并与数据属性值 JOIN 并刷新​​页面