canvas绘制video

 

 

 

 
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        * {
          margin: 0;
          padding: 0;
        }
        body {
          overflow: hidden;
        }
        .videoBox {
          width: 100%;
          height: 50vh;
          position: relative;
          top: 0;
          right: 0;
          left: 0;
          bottom: 0;
        }
        img {
          position: absolute;
          display: block;
          width: 100%;
          height: 100%;
        }
        #btn {
          position: absolute;
          width: 50px;
          height: 50px;
          background-color: #ccc;
          border-radius: 50%;
          bottom: 10%;
          left: 50%;
          transform: translateX(-50%);
          line-height: 50px;
          text-align: center;
        }
        canvas {
          width: 100%;
          height: 50vh;
        }
        video {
          display: none;
        }
        </style>

</head>
<body>
    <div class="videoBox">
        <img id="poster" src="https://difluid-resources.oss-accelerate.aliyuncs.com/v1.0.4/images/product/coffee/banner.jpg" alt="">
        <video id="video"
          preload="auto"
          playsinline="true"
          x-webkit-airplay="true"
          webkit-playsinline="true"
          x5-video-player-type="h5"
          x-video-orientation="h5"
          x5-video-player-fullscreen="true"
          muted="false"
         src="https://difluid-resources.oss-accelerate.aliyuncs.com/v1.0.4/video/product/coffee/en/咖啡浓度仪.mp4"></video>
        <canvas id="canvas"></canvas>
        <div id="btn">点击</div>
      </div>


    <script>

        const video = document.getElementById('video');
        const palyBtn = document.getElementById('btn');
        const canvas = document.getElementById('canvas');
        const poster = document.getElementById('poster')

        // 初始化(创建)canvas
        const ctx = canvas.getContext('2d')

        // 获取可视宽高
        const screen_W = window.innerWidth || document.body.clientWidth
        const screen_H = window.innerHeight || document.body.clientHeight
        // 设置画布宽高(画布宽高,最好是根据设计视频所做实际宽高)
        canvas.width = screen_W * 3 // 获取屏幕宽度作为canvas的宽度 这个设置的越大,画面越清晰(相当于绘制的图像大,然后被css缩小)
        canvas.height = screen_H * 3 + 12

        // 绘制视频
        palyBtn.addEventListener('click', function (e) {
          e.preventDefault()
          poster.style.display = 'none'
          // 绘制背景
          ctx.fillStyle = '#000'

          ctx.fillRect(0, 0, canvas.width, canvas.height)
          ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
          if (video.paused) {
            video.play()
          } else {
            video.pause()
          }
        })
        video.addEventListener('play', playCallBack)
        function playCallBack() {
          if (video.paused) {
             return;
          }
          captureFrame();
          setTimeout(playCallBack, 40);
        }
        function captureFrame() {
          ctx.drawImage(video, 0, 0, canvas.width, canvas.height)
        }
    </script>

</body>
</html>
posted @ 2022-09-30 20:44  蠡li  阅读(202)  评论(0编辑  收藏  举报