/**
* 获取视频第一帧图片
* @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("");
}
})
}
}
获取视频第一帧
最新推荐文章于 2024-05-15 20:43:52 发布