Цикл видео HTML5 не работает в Chrome (CMS Sitefinity)

Я столкнулся с этой своеобразной проблемой: я не мог заставить видео HTML5 зацикливаться в моей локальной среде разработки (ASP.NET + IIS7). Видео нормально воспроизводится автоматически. Мой код выглядит так:

<video id="frontpage-video" autoplay loop>
  <source src="http://test-site:8084/video_mp4.mp4" type="video/mp4">
  <source src="http://test-site:8084/video_webm.webm" type="video/webm">
</video>

Если я изменяю URL-адреса источников видео на некоторые общедоступные URL-адреса (например, на Dropbox), цикл работает нормально. Это не является серьезной проблемой, так как я думаю (надеюсь), что это сработает, как только мой сайт заработает и видео станет общедоступным.

У меня такой вопрос: могу ли я зациклить видео, если мое видео не находится в открытом доступе?

В гугле подобных проблем не нашел. Может быть, это какая-то настройка IIS, которая предотвращает зацикливание видео?

Обновление 1. Проблема возникает только в Chrome. Firefox и IE работают нормально.

Обновление 2: кажется, что видео останавливается в конце, но никогда не возвращает true для element.ended

> document.getElementById('frontpage-video').duration;
< 16.12

> document.getElementById('frontpage-video').currentTime;
< 16.12

> document.getElementById('frontpage-video').ended;
< false

Обновление 3. Проблема либо в IIS, либо в Telerik's Sitefinity CMS. Сервер должен отправить статус «206 Partial Content», но вместо этого он отправляет 200 OK. Кто-нибудь из пользователей Sitefinity сталкивался с этой проблемой и знает, как ее решить?


person Henri Hietala    schedule 23.07.2014    source источник
comment
Можете ли вы вставить то, что вы видите при запуске: curl -I -H Range: bytes=0-200 test -сайт:8084/video_mp4.mp4   -  person brianchirls    schedule 25.07.2014
comment
HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Length: 1492371 Content-Type: video/mp4 Срок действия: -1 Сервер: Microsoft-IIS/8.5 content-disposition: inline; filename=video_mp4.mp4 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Дата: пятница, 25 июля 2014 г., 12:51:47 GMT   -  person Henri Hietala    schedule 25.07.2014


Ответы (4)


Похоже, ваша проблема в том, что вы не используете HTTP Byte Serving. Ваш сервер отправляет ответ «200 OK», но он должен отправлять «206 Partial Content» вместе со следующими заголовками:

Accept-Ranges:bytes
Content-Range:bytes 0-1492370/1492371

Запрос диапазона байтов позволяет браузеру запрашивать только те части файла, которые ему нужны. Поэтому, если вы будете искать вокруг, он может перейти прямо к этой точке.

С обычным ответом 200 вы, как минимум, обнаружите, что не можете искать в видео. Но, в зависимости от того, как закодирован ваш видеофайл и где в файле размещены метаданные, вы можете увидеть больше проблем. Иногда файл может вообще не воспроизводиться. WebM обычно более надежен, чем MP4, который может быть повсюду.

Я недостаточно хорошо знаю IIS, чтобы рассказать вам, как его настроить, но попробуйте начать здесь: http://blogs.visigo.com/chriscoulson/easy-handling-of-http-range-requests-in-asp-net/

person brianchirls    schedule 25.07.2014
comment
Интересный. Я тоже не эксперт IIS, поэтому мне нужна помощь в этом. Спасибо. - person Henri Hietala; 25.07.2014
comment
Вы сами пишете код для обслуживания видеофайлов с помощью ASP? Или IIS справляется с этим? Если вы делаете это, эта статья, на которую я ссылаюсь, должна помочь. - person brianchirls; 25.07.2014
comment
Я не совсем уверен, обрабатывается ли это IIS или Sitefinity CMS. - person Henri Hietala; 25.07.2014
comment
Этот ответ, если таковой заслуживал награды, так как он сказал мне причину моей проблемы. Спасибо! - person Henri Hietala; 01.08.2014
comment
Спасибо, Анри. Удачи, и я надеюсь, что у вас все получилось. - person brianchirls; 01.08.2014
comment
Большое спасибо, у меня от этого голова заболела. Еще раз спасибо. - person asumaran; 24.10.2014

Chrome/Opera не может зациклить видео, если само видео не обслуживается с ответом HTTP 206 Partial Content, а вместо этого 200 OK.

Проблема в том, что поставщики хранилищ Sitefinity не поддерживают частичный контент (версия 7.0). Они планируют реализовать это в будущем.

На данный момент возможным обходным решением является использование внешнего поставщика хранилища BLOB-объектов, такого как Azure, Amazon или ExternalFileSystem (ExternalFileSystemStorageProvider).

Я получил эту информацию от службы поддержки Sitefinity.

person Henri Hietala    schedule 01.08.2014

Возможно, тип MIME в IIS не настроен для MP4. Откройте IIS и найдите страницу по умолчанию. Вы увидите тип MIME на правой панели. Нажмите Add и поставьте field1=.mp4 и field2=video/mp4. Перезапустите ИИС. Надеюсь, это может сработать.

person nyxem1    schedule 23.07.2014
comment
У меня правильно установлен тип MIME. Видео запускается с первого раза как надо. Проблема только в зацикливании видео. - person Henri Hietala; 23.07.2014
comment
Я установил тип Mime - и он играет, но я не могу пропустить вперед. - person PeterX; 06.07.2015

  • В вашем вопросе ваш video-элемент не имеет идентификатора frontpage-video (но я думаю, это копипаста?)
  • проверьте, вызывается ли video end event в ваших браузерах webkit, и если да, перезапустите видео.

.

<script type='text/javascript'>
document.getElementById('frontpage-video').addEventListener('ended',myHandler,false);
function myHandler(e) {
    if(!e) { e = window.event; }
    //restart your video
}

person longi    schedule 23.07.2014
comment
Я добавил идентификатор после того, как опубликовал этот вопрос, но он там. Как уже было сказано, видео никогда не заканчивается событием, поэтому скрипт ничего не делает. - person Henri Hietala; 23.07.2014