1.获取视频的url,如果是file文件,先转成url
file转url方法:
function getFileURL(file) {
var url = null ;
if (window.createObjectURL!=undefined) { // basic
url = window.createObjectURL(file) ;
} else if (window.URL!=undefined) { // mozilla(firefox)
url = window.URL.createObjectURL(file) ;
} else if (window.webkitURL!=undefined) { // webkit or chrome
url = window.webkitURL.createObjectURL(file) ;
}
return url ;
}
2.创建video标签,将视频url赋给src,然后再创建画布canvas,将视频的第一帧画到画布上,最后通过canvas.toDataURL('image/png')获取图片的base64文件流。
function getVideoScreenShot(url){
var listHtml = '<video id="video" class="video" controls="controls">'+
'<source src="'+url+'">'+
'</video>'+
'<div class="output"></div>';
$('.big-box').append(listHtml);
//创建画布
var canvas = document.createElement('canvas')
var video = $('.video')[0];
video.preload = true;
video.autoplay = true;
video.muted = true;
video.setAttribute('crossOrigin', 'anonymous');
//设置画布的宽和高,
canvas.width = 385;
canvas.height = 200;
video.onloadeddata = (() => {
canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height)
var dataURL = canvas.toDataURL('image/png');
...
// 删除掉不需要的video标签部分
$('.big-box .video').remove();
})
}
3.获取到dataURL后,一般在video.onloadeddata方法里进一步对dataURL做接下来的操作,video.onloadeddata方法有延迟,如果直接返回dataURL,或返回undefind。