获取视频第一帧

/**
 * 获取视频第一帧图片
 * @param {*} path 视频地址
 * @param {*} width 图片宽度
 * @param {*} height 图片高度
 * @param {*} uri 服务器
 * @returns
 */
function getVideoFirstImage(path, width, height, uri) {
  let videoPath = ''

  if (path.indexOf('http') === 0) {
    videoPath = path
  } else {
    let baseUrl = uri;
    //如果是相对路径并且url最后一位不是/就拼接上/
    if (baseUrl && baseUrl.indexOf('/') !== 0 && baseUrl.substr(baseUrl.length - 1) !== '/') {
      baseUrl += '/'
    }
    videoPath = baseUrl ? baseUrl + path : path;
  }

  if (!videoPath) {
    return ''
  } else {
    const video = document.createElement('video')
    video.setAttribute('crossOrigin', 'anonymous')
    video.setAttribute('src', videoPath)
    video.setAttribute('width', width)
    video.setAttribute('height', height)
    video.setAttribute('preload', 'auto')
    video.setAttribute('autoplay', 'true')
    video.setAttribute('display', 'none')

    video.setAttribute("controls", "controls");
    video.setAttribute('crossOrigin', 'Anonymous'); // 处理跨域

    video.muted = true; // 静音

    return new Promise((resolve, reject) => {
      try {
        if(getIsIOS()){
          video.load();//重新加载视频
          video.play().catch(e=>{
            resolve("");
          });
          video.pause()
        }
        video.addEventListener(
            "loadedmetadata",
            () => {
              video.currentTime = 2;
              const canvas = document.createElement("canvas");

              video.addEventListener("canplaythrough", () => {
                canvas.width = video.videoWidth;
                canvas.height = video.videoHeight;
                canvas.getContext("2d").drawImage(video, 0, 0, canvas.width, canvas.height);
                const firstFrame = canvas.toDataURL();
                resolve(firstFrame);
              });
            },
            { once: true }
        );
        video.onerror = function() {
          resolve('')
        }
      } catch (err) {
        reject("");
      }
    })
  }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值