Я работаю над сценарием, который возьмет видео в формате mp4 и создаст снимок первого кадра. Цель этого заключается в том, что некоторые мобильные браузеры не воспроизводят mp4 при загрузке. Он покажет mp4 с кнопкой воспроизведения. Поэтому создание снимка будет хорошим запасным вариантом для мобильных устройств.
У меня уже есть базовый фрагмент кода, и он работает 70% времени. Однако, когда он не работает, я думаю, что у меня возникают проблемы со сценарием, пытающимся сделать снимок из кэшированное видео или оно пытается захватить до полной загрузки видео. У кого-нибудь есть предложения как сделать это на 100%? Я попытался отложить строки кода, чтобы подождать, пока все загрузится, но иногда это не работает .... Что немного помогло, так это добавление небольшого setTimeOut
...
( function( window, $ ) {
const document = window.document;
const ImgSnapshot = (el) => {
//setup variables
const $el = $(el);
const video = $el.find(".wave-animation__container").get(0);
$(video).ready( () => {
setTimeout(() => {
function createCanvas(){
//create a canvas obj
let canvas = document.createElement("canvas");
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas.getContext('2d')
.drawImage(video, 0, 0, canvas.width, canvas.height);
//wait until we have the canvas object captured
return $.Deferred().resolve( canvas ).promise();
}
createCanvas().done( ( canvas ) => {
//create an image element to append
let img = document.createElement("img");
img.src = canvas.toDataURL();
img.classList.add('hide-for-medium', 'snapshot');
$el.append(img);
video.classList.add( 'show-for-medium' );
});
}, 150);
});
};
$(document).ready(function(){
$('.js-wave-animation').each(function(){
new ImgSnapshot(this);
});
});
} )( window, jQuery );