使用canvas播放视频

摘要:将视频隐藏正常播放,将播放取到画面使用setInterval循环在画布上显示画面,因为 1s 差不多25-30帧,选择每40ms循环一次

前期规划

  • 将视频隐藏正常播放
  • 将播放取到画面使用setInterval循环在画布上显示画面,因为 1s 差不多25-30帧,选择每40ms循环一次
  • 绘画中的大小,宽度等于100%,高度垂直居中。x 为 0,y 为(canvas.height - video.height)/2/canvas缩放倍数
  • 视频暂停或者播放结束后,清除定时器


代码如下

html代码

 <video id="main-video" playsinline="true" webkit-playsinline="true" x5-playsinline="true" x5-video-orientation="portraint" x5-video-player-fullscreen="true" x5-video-player-type="h5" style="display: none">
  <source id="js-video-source" src="<%=detail.videoUrl || ''%>" ></source>';
</video>
<canvas style="width: 100%; height:100%" id="canvas"></canvas>

js代码

function renderCanvas () {
  let $canva, ctx, $video, setInter;
  $canva =$('#canvas');
  $video = $("#main-video");
  ctx = $canva[0].getContext('2d');
  $canva.style.width = $canva.parents().width() / 2;
  $canva.style.height = $canva.parents().height() / 2;
  $video[0].play();

  render();
  setInter = setInterval(r => {
    render();
  }, 40)

  function render () {
    ctx.drawImage($video[0], 0, (canvas.height - video.height)/2/2, video.width(), video.height());
  }

  // 视频播放结束
  $video[0].on('ended', function () {
    clearInterval(setInter);
  });

  // 视频被暂停
  $video[0].on('pause', function () {
    clearInterval(setInter);
  });
}


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_3458