该视频长度为2分钟
效果图
let videoSrc =
// "/hls/ren-20154/min-27665/de-30340/ming-21517/yi-20041/segment-1/av1/4k/playlist.m3u8";
"/_nuxt/assets/mp4/play4.mp4";
const res = await generateThumbnails(videoSrc, {
width: 200,
height: 200,
drs: Number(testshowimage.currentTime),
});
export const generateThumbnails = async (url: string, container: { width: number, height: number, drs: number }) => {
return new Promise((resolve, reject) => {
const video = document.createElement('video')
video.crossOrigin = 'anonymous' // Enable CORS
video.preload = 'auto' // Preload the video 5656
// 静音
video.muted = true;
video.preload = 'metadata'; // 只加载视频的元数据,加快初始加载速度
if (url.includes('/_nuxt')) {
video.src = url;
} else {
var hls = new Hls();
hls.loadSource(url);
hls.attachMedia(video);
}
// 请求视频地址,如果是本地文件,直接执行
// if (/^blob:|base64,/i.test(url)) {
// video.src = url;
// } else {
// // mp4需要这个
// fetch(url).then(res => res.blob()).then(blob => {
// // 赋予视频
// video.src = URL.createObjectURL(blob);
// });
// }

video.addEventListener('loadedmetadata', function () {
video.currentTime = container.drs
video.play()
})
video.addEventListener('seeked', function () {
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d') as CanvasRenderingContext2D;
canvas.width = 200
canvas.height = 200
context.drawImage(video, 0, 0, canvas.width, canvas.height)
try {
const frameSrc = canvas.toDataURL('image/png')
console.log('frameSrc', frameSrc)
video.remove()
resolve(frameSrc)
} catch (e) {
console.error('Error exporting canvas as data URL:', e)
reject(e)
}
})
})
}