MDN https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Manipulating_video_using_canvas

实现原理:通过canvas将正在播放到的一定位置的video图像绘制到canvas上面,之后通过canva转码成base64

function getBase64ImgCodeFromVideo(url,width=400,height=240) {
/// 返回一个 Promise
return new Promise(function(resolve, reject) {
// base64 的图片编码
let dataURL = '';
const video = document.createElement("video");
// 匿名
video.setAttribute('crossorigin', 'anonymous'); //处理跨域
video.setAttribute('src', url);
// video.setAttribute('width', 400);
// video.setAttribute('height', 240);
video.setAttribute('controls', 'controls');
video.currentTime = 1 //视频时长,对应上面的实现原理,如果没有设置时间的话,现实的时候就是刚开始视频的一下子,就是白屏!!!
video.addEventListener('loadeddata', function(e) {
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/png'); //转换为base64
// 设置视频的封面
// video.setAttribute('poster', dataURL);
resolve(dataURL);
});
})
}