HTML5 видео не зацикливается

У меня странная проблема. Две мои версии Chrome (обычная и канареечная) отказываются зацикливать видео, которое я показываю. Или что ж, иногда они повторяют его дважды и после этого останавливаются. Как ни странно, это работает в сафари, так что я знаю, что это не какая-то шалость webkit.

<video autoplay="autoplay" data-type="bg" id="video" loop="loop">
    <source src="/assets/video/_L88P.mp4" content-type="video/mp4">
</video>

Моя установка - это Mac с горным львом и mamp на нем, хром-версии самые последние (канарейка: 26.0.1384.0 и обычная: 24.0.1312.52).

Кто-нибудь знает, почему это происходит?


person Joakim Wimmerstedt    schedule 15.01.2013    source источник


Ответы (5)


Я также обнаружил, что Chrome задыхается, если ключевые кадры MP4 не установлены должным образом. Например, в After Effects в «Выводе», если для расстояния между ключевыми кадрами установлено значение «Авто», видео не будет зацикливаться должным образом.

Я подозреваю, что Chrome нуждается в равномерно делимых ключевых кадрах в пределах длины видео, например, в том, чтобы не заканчиваться между ключевыми кадрами. то есть, если ваше видео состоит из 24 кадров, сделайте расстояние между ключевыми кадрами равномерно делимым, например 4.

Настройки вывода рендеринга After Effects

person evets    schedule 06.04.2013
comment
Ага, мне тоже помогли! Спасибо. - person elad.chen; 15.02.2016

Эта проблема решена, и вот решение в моем случае:

У видео было слишком большое разрешение. Даже если битрейт был низким, хром не хотел этого делать. Изменил его размер до 720p, и он работал отлично.

Другие предлагаемые решения, если у вас возникли проблемы:

  • Установите правильный тип содержимого, включая кодек.
  • Убедитесь, что вы используете браузер, поддерживающий ваш тип файла. Для живых файлов всегда используйте как минимум .mp4 и .ogg, и включайте .webm для безопасности.
  • Установите цикл через javascript. Это также хороший запасной вариант для браузеров, которые не в порядке с атрибутом цикла в теге видео (основным примером является ipad). Ниже приведен пример кода, который я скопировал вчера с сайта (извините, не могу вспомнить источник)

    var myVideo = document.getElementById('video');
    if (typeof myVideo.loop == 'boolean') { // loop supported
        myVideo.loop = true;
    } else { // loop property not supported
        myVideo.on('ended', function () {
        this.currentTime = 0;
        this.play();
        }, false);
    }
    myVideo.play();
    
person Joakim Wimmerstedt    schedule 16.01.2013
comment
Идеально. Установка разрешения на 720p решила проблему с Chrome и новой Opera (они оба используют один и тот же движок) - person Hooman Askari; 02.01.2015
comment
Я обнаружил, что и в видеороликах .mp4, и .ogg проблема с паузой в Chrome в цикле возникала при разрешении 1080p, но не в .webm - этот формат может воспроизводить 1920 без каких-либо проблем с паузой. - person WebMW; 08.01.2015

У меня недавно были проблемы с этим. Оказалось, что это как-то связано с тем, что мой сайт находится на локальном хосте. Когда я перемещаю сайт на свой рабочий сервер и тестирую удаленно, все работает, как ожидалось.

Чтобы заставить его работать на localhost, я использовал решение от Joakim Bananskal, но воспроизведение видео вызывало ошибку, потому что он уже пытался его воспроизвести, поэтому мне просто пришлось сначала сбросить видео с помощью load().

Установление цикла также, похоже, вызывало проблему, потому что видео никогда не запускало событие ended.

Мое окончательное решение для localhost ниже:

$("video").each(function () {
    this.loop = false;
    this.onended = function () {
        this.load();
    };
    this.play();
});

с этим HTML:

<video preload="auto" autoplay>
    <source src="/video.mp4" type="video/mp4">
    <source src="video.webm" type="video/webm">
    <source src="/video.ogg" type="video/ogg">
    <img src="/backupImage.png" />
</video>
person DoubleA    schedule 20.07.2016

По какой-то причине у меня возникли проблемы с привязкой завершенного события.

Вот как я это исправил:

  1. удален атрибут 'loop' из видео.
  2. добавлен onended для вызова replay ()

     <video autoplay='true' onended="replay()"></video> 
  3. определил replay (), как показано ниже:

    function replay() {
        console.log('video ended');
        document.getElementsByTagName('video').currentTime = 0;
        document.getElementsByTagName('video')[0].play();
    }
person Ramesh    schedule 09.01.2015
comment
ой, даже это не работает с HTTP 200 OK. Похоже, настройка HTTP 206 - это исправление. - person Ramesh; 12.01.2015

person    schedule
comment
Это была моя проблема, спасибо. Я использовал IIS. . . - person Matt Cashatt; 24.02.2016