javascript实现获取视频封面,实现本地预览功能

主要思路就是监听视频播放,然后通过canvas去绘制想要获取的某一时刻的画面

// videoFile: 要解析的视频文件资源, time: 获取视频某一时刻的画面
function captureFrame(videoFile, time = 0) {
  return new Promise((resolve) => {
    // 因为dom节点没有渲染到浏览器,视频播放到指定的时间就会停止播放
    const videoElement = document.createElement('video');
    videoElement.currentTime = time; // 设置截取的帧时间
    // 自动播放存在兼容性问题,设置静音解决自动播放在不同浏览器的兼容性问题
    videoElement.muted = true; 
    videoElement.autoplay = true;
    videoElement.src = URL.createObjectURL(videoFile);
    videoElement.oncanplay = async function () {
      const flame = await drawVideoToCanvas(videoElement);
      resolve(flame); 
    };
  });
}

将拿到的视频画面通过canvas绘制出来:

function drawVideoToCanvas(video) {
  return new Promise((resolve) => {
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');
    canvas.width = video.videoWidth;
    canvas.height = video.videoHeight;
    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
    canvas.toBlob((blob) => {
      resolve({
        blob, // 将封面提交到服务端
        url: URL.createObjectURL(blob), // 实现本地预览
      });
    });
  });
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值