Как повторить загрузку видео снова после его сбоя

На моей странице я показываю видео, загруженное из Sprout таким образом

В случае, если что-то пошло не так, значит, видео не загружено из-за 404 или 403 http status, как я могу повторить попытку в 4 раза? (в ожидании 5 секунд каждый раз)

Это мой код

<video id="video" width="200" height="200" controls>
   <source id='currentVID' src="" type="video/mp4">
</video>


var actualvideo = 'https://api-files.sproutvideo.com/file/7c9adbb51915e2cdf4/b6e4822661adad1aremovethis/240.mp4';
if (actualvideo !== '') {
    var video = document.getElementById('video');

    $('video source').last().on('error', function() {

    alert('something went wrong');

    });


    video.pause();
    var source = document.getElementById('currentVID');
    source.setAttribute('src', actualvideo);
    video.appendChild(source);
}

https://jsfiddle.net/o2gxgz9r/9974/

Ответы

Ответ 1

Посмотрите на это:

var retry = 0;
$('video source').on('error', function() {
    if(retry < 4){
      retry++;
      alert('something went wrong! Retrying.. '+retry+'');
      $n = $(this);
        setTimeout(function(){
        $n.appendTo( $('#video') );
      },5000);
    }
});

Код снова присоединяет источник видео к нему с тегом видео до 4 раз с задержкой 5 секунд.

Рабочая скрипка:
https://jsfiddle.net/3uto3swj/

Ответ 2

Это простой случай использования setTimeout() для остановки и повторного запуска.

// set counter before defining listener 
// we'll do 4 retries (or 5 total attempts)
let retries = 4;

source.addEventListener('error', function onErr(){
    // test for truthiness, then decrease by 1
    if (retries--) { 

    // after 5000ms re-append source
    setTimeout( function retry(){ 
        video.appendChild( source );
    }, 5000);
  }
});

Я подправил вашу скрипку, чтобы применить ее. Я удалил маленькую посыпку jQuery, так как вы, похоже, не используете ее в любом случае. Похоже, вы просто не знали, как слушать событие с vanilla JS. Плюс я добавил притворное восстановление сети и кошку.; D

😸 скрипка

Извините, если я пропустил точки с запятой. Я обычно не использую их.