获取视频第一帧

2022-01-06  本文已影响0人  DeadMoon

故事背景: 服务端今天又跑过来了, 说新服务 docker 无法安装获取视频第一帧的服务了,问前端有没有办法获取第一帧. 其实之前有看过相关文档, 通过 canvas 来获取指定帧.通过查看相关资料我们写下了如下代码:

  uploadVideoImg(file) {
      return new Promise(resolve => {
        var fileUrl = URL.createObjectURL(file)
        var videoElement = document.createElement('VIDEO')
        videoElement.src = fileUrl
        videoElement.autoplay = true
        videoElement.addEventListener('loadeddata',  function (_event)  {
        const canvas = document.createElement('canvas')
        canvas.width = videoElement.videoWidth
        canvas.height = videoElement.videoHeight
        canvas.getContext('2d').drawImage(videoElement, 0, 0, canvas.width, canvas.height)
        const dataone = new FormData()
        // 直接给 base64 给服务端显然不合理, base64 一般上万字符左右, 存在 DB 肯定会出现慢查询问题, 所以我们我们把 base64 转化为文件流的形式上传获取 url 再给服务端.
        dataone.append('file', new File([base64toBlob(canvas.toDataURL('image/png'))], new Date() + '.jpg')) // 上传的是 File 对象
        axios({
          url: `${process.env.VUE_APP_UPLOADER_API}/file/upload` + '',
          data: dataone,
          method: 'post',
          headers: {'Content-Type': 'multipart/form-data', 'X-Token': getToken()},
          processData: false,
          contentType: false
        }).then(res => {
          resolve(res?.data?.data?.filePath)
        })
        })
      })
    },
上一篇 下一篇

猜你喜欢

热点阅读