前端开发如何获取视频第一帧作为封面

首先说明一下,浏览器或者手机需要支持video标签。

从H5本身来说,这里用到了video的一个属性,poster(规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像。).

然后还有一个video的事件,loadeddata(当当前帧的数据已加载,但没有足够的数据来播放指定音频/视频的下一帧时,会发生 loadeddata 事件。)。

所以要提醒一下,如果不是用框架来监听的,就自己手动用addEventListener来监听视频是否已经加载好,可以截取第一帧了。

从网上搜的资料总结一下:

都是选择用canvas来得到第一帧图片。总的来说的过程是

A:创建video标签

B:canvas无法处理跨域的图片,所以需要处理跨域请求。将图片的 crossOrigin设置成anonymous。

C:处理视频的宽,高和URL链接

D:监听video的loadeddata事件,在事件中使用canvas绘制画布

E:canvas创建好了之后使用toDataURL将图片转成base64

F:绘制图片

附上代码:

 getVideoBase64(url) {
        return new Promise(function (resolve, reject) {
            let dataURL = '';
            let video = document.createElement("video");
            video.setAttribute('crossOrigin', 'anonymous');//处理跨域
            video.setAttribute('src', url);
            video.setAttribute('width', 400);
            video.setAttribute('height', 240);
            video.addEventListener('loadeddata', function () {
                let canvas = document.createElement("canvas"),
                    width = video.width, //canvas的尺寸和图片一样
                    height = video.height;
                canvas.width = width;
                canvas.height = height;
                canvas.getContext("2d").drawImage(video, 0, 0, width, height); //绘制canvas
                dataURL = canvas.toDataURL('image/jpeg'); //转换为base64
                resolve(dataURL);
            });
        })
    }

PS:这里转载自知乎作者,刘超杰。如果我的看不懂可以去看看原博客。

再记录一下,使用element的框架怎么截取第一帧。原理和上面一致,就不具体写怎么弄了。给一个链接地址,如果有这方面需求,可以去简书上看看这篇文章。 《vue 截取视频第一帧》作者:执着的小猪仔

每天进步一点点,冲冲冲!

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值