mirror of https://github.com/VERT-sh/VERT.git
fix: more reliable video thumbnail generator
This commit is contained in:
parent
5b0d0e2cc8
commit
0481251559
|
|
@ -50,7 +50,10 @@ class Files {
|
||||||
});
|
});
|
||||||
const cover = selectCover(common.picture);
|
const cover = selectCover(common.picture);
|
||||||
if (cover) {
|
if (cover) {
|
||||||
const blob = new Blob([cover.data], {
|
const arrayBuffer = cover.data.buffer instanceof ArrayBuffer
|
||||||
|
? cover.data.buffer
|
||||||
|
: new Uint8Array(cover.data).buffer;
|
||||||
|
const blob = new Blob([new Uint8Array(arrayBuffer)], {
|
||||||
type: cover.format,
|
type: cover.format,
|
||||||
});
|
});
|
||||||
file.blobUrl = URL.createObjectURL(blob);
|
file.blobUrl = URL.createObjectURL(blob);
|
||||||
|
|
@ -84,11 +87,19 @@ class Files {
|
||||||
: new Image();
|
: new Image();
|
||||||
mediaElement.src = URL.createObjectURL(file);
|
mediaElement.src = URL.createObjectURL(file);
|
||||||
|
|
||||||
await new Promise((resolve) => {
|
await new Promise((resolve, reject) => {
|
||||||
if (isVideo) {
|
if (isVideo) {
|
||||||
(mediaElement as HTMLVideoElement).onloadeddata = resolve;
|
const video = mediaElement as HTMLVideoElement;
|
||||||
|
// seek to 10% of video time or 2 seconds in
|
||||||
|
video.onloadeddata = () => {
|
||||||
|
const seekTime = Math.min(video.duration * 0.1, 2);
|
||||||
|
video.currentTime = seekTime;
|
||||||
|
};
|
||||||
|
video.onseeked = resolve;
|
||||||
|
video.onerror = reject;
|
||||||
} else {
|
} else {
|
||||||
(mediaElement as HTMLImageElement).onload = resolve;
|
(mediaElement as HTMLImageElement).onload = resolve;
|
||||||
|
(mediaElement as HTMLImageElement).onerror = reject;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -103,6 +114,11 @@ class Files {
|
||||||
? (mediaElement as HTMLVideoElement).videoHeight
|
? (mediaElement as HTMLVideoElement).videoHeight
|
||||||
: (mediaElement as HTMLImageElement).height;
|
: (mediaElement as HTMLImageElement).height;
|
||||||
|
|
||||||
|
if (width === 0 || height === 0) {
|
||||||
|
URL.revokeObjectURL(mediaElement.src);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
const scale = Math.max(maxSize / width, maxSize / height);
|
const scale = Math.max(maxSize / width, maxSize / height);
|
||||||
canvas.width = width * scale;
|
canvas.width = width * scale;
|
||||||
canvas.height = height * scale;
|
canvas.height = height * scale;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue