Это быстрое начало решения, которое должно, по крайней мере, указать вам правильное направление.Это дает вам синглтон с методом init, который при вызове устанавливает предварительный просмотр для конкретного видеоэлемента.
var adManager = function () {
var vid = document.getElementById("myVid"),
adSrc = "videos/epic_rap_battles_of_history_16_adolf_hitler_vs_darth_vader_2_1280x720.mp4",
src;
var adEnded = function () {
vid.removeEventListener("ended", adEnded, false);
vid.src = src;
vid.load();
vid.play();
};
return {
init: function () {
src = vid.src;
vid.src = adSrc;
vid.load();
vid.addEventListener("ended", adEnded, false);
}
};
}();
Однако есть ряд вещей, которые здесь не рассматриваются.Например, если вы устанавливаете метод init для вызова при начале воспроизведения видео, вам необходимо сохранить флаг, указывающий, воспроизводится ли реклама, чтобы обработчик воспроизведения ничего не делал при переходе собъявление к контенту (которое требует события play после вызова load (), чтобы получить плавное воспроизведение).
Мы используем нечто подобное в нашем проекте воспроизведения видео и большей части видеообъявления.сервисы там делают что-то подобное для воспроизведения видео на основе HTML (в отличие от воспроизведения видео Flash).
Это относительно просто, но вы просто должны следить за тем, когда должны выполняться обратные вызовы событий и когдадобавить и удалить эти обратные вызовы.
Еще одна вещь, которую следует учитывать, - это ненадежность «завершенного» события.Я еще не выяснил, когда и на каких платформах он постоянно срабатывает, но это довольно известная проблема.Возможное решение - вместо этого использовать timeupdate и проверить, является ли свойство currentTime примерно на секунду меньше, чем свойство duration, чтобы вы знали, что находитесь прямо в конце видео.