Привет. Есть рабочий плеер, на базе <video>. При click, по прогресс-бару (pb), на мониторе возникает изображение-кадр, примерно - соответствующее выбранному (choos) моменту времени:
pb.addEventListener('click', (e) => {
choos.style.width = (e.offsetX * 100) / pb.offsetWidth + '%';
video.currentTime = (video.duration * e.offsetX) / pb.offsetWidth;
});
Изображение-кадр, формируется (кодировка по заданному типу) задействованным браузером.
Существует механизм визуализации выбора, в “окошке” (tt), с определёнными параметрами:
pb.addEventListener('mousemove', (e) => {
var skt = (video.duration * e.offsetX) / pb.offsetWidth;
tt.innerHTML = setTime(skt);
var rect = vp.getBoundingClientRect();
tt.style.left = `${e.pageX - rect.left}px`;
});
В данном случае - это время выбора, в заданном формате.
Я пытаюсь заменить время, в tt-окошке, на изображение-кадр, приблизительно - соответствующее выбранному (choos) моменту времени.
Общее, примерное, количество кадров (okk), в mp4-файле
var okk = new Array();
okk = 24 * video.duration;
Номер кадра в массиве:
num = 24 * Math.max(0, video.currentTime - 1) + 1;
Получаем массив, с шагом 1/24 сек.
Быстрее всего - этого времени, браузеру, будет недостаточно для пере-кодировки.
Приемлемо, если он будет обрабатывать каждый, 24-й кадр - из массива, ещё не просмотренных, реагируя на событие mousemove. По крайней мере - через click он, с этим, вполне справляется.
Как объяснить, это, браузеру?