Запрос элемента видео HTML5 остается навсегда (на хроме)

У меня странная проблема в Chrome.

Каждый раз, когда я загружаю элемент , хром запускает два HTTP-запроса.

Первый из них останется в ожидании навсегда (я думаю, это запрос «метаданные», «частичный контент». Но дело в том, что он остается в ожидании)

Второй в том же файле в порядке и продолжается и заканчивается после завершения загрузки.

Проблема здесь в том, что первый запрос остается в ожидании, пока я не закрою страницу браузера. Поэтому в какой-то момент, если я загружу несколько видеороликов, Chrome сломается и перестанет загружаться, потому что каждый ansible запрос занят этими ожидающими запросами.

Я создал сокращенный тестовый пример: http://jsbin.com/ixifiq/3


Я проверяю, чтобы воспроизвести проблему, и это происходит на обеих страницах Video.js и MediaElements.js . Откройте вкладку «Сеть» при загрузке страницы, вы увидите первый ожидающий запрос. Затем нажмите воспроизведение на видео, и вы увидите, что второй запрос работает, но первый останется в ожидании навсегда.

Кто-нибудь знает, исправить эту ошибку?

(Эта ошибка все еще существует в Chrome 38.0.2125.111, OS X 10.10)

Это может быть ошибка Chrome, и вы можете решить ее без какого-либо манекена ?time-suffix трюка с ?time-suffix , просто помогая освобождению сокетов Chrome быстрее :

У меня была такая же ошибка в HTML-презентации RevealJs, с 20 + видео (по одному на слайд, автозапуск на слайд-фокусе). В качестве побочного эффекта эта проблема с нереализованным сокетом также повлияла на другие медиафайлы, загруженные ajax-lazy, сразу после первого ожидающего / заблокированного видео в том же HTML DOM.

Следуя ответу Уолтера (см. Отчет об ошибке ), я исправил проблему, следуя следующим шагам:

1- Установите атрибут preload видео в none :

  

2 – Используйте canplaythrough события canplaythrough для воспроизведения и / или приостановки видео после его загрузки и готовности. Это позволяет Chrome освобождать сокет, используемый для загрузки этого видео:

 function loadVideos(){ $("video").each(function(index){ $(this).get(0).load(); $(this).get(0).addEventListener("canplaythrough", function(){ this.play(); this.pause(); }); }); } 

Видимо, это ошибка от Chrome. И нечего делать с этим банкоматом.

Недавно я сообщил об этом в проекте Chromium, и он был назначен. Так что, надеюсь, это будет исправлено в ближайшем будущем.

Отчет об ошибке : https://code.google.com/p/chromium/issues/detail?id=234779

Я не знаю, будет ли он функционировать прямо сейчас, но я помню, как решить эту проблему, добавив параметр в URL-адрес видео, как «video.mp4? T = 2123». Конечно, каждый раз, когда вы загружаете видео, параметр должен быть другим. Я бы использовал

 var parameter = new Date().getMilliseconds(); 

чтобы получить его и добавить.

С этим, по крайней мере несколько месяцев назад, я смог воспроизводить одно и то же видео несколько раз без Chrome, ожидая ответа.

Надеюсь, поможет.

Эта ошибка все еще существует. Я использую видеопроигрыватель HTML5 на одностраничном приложении. После загрузки около 7 игроков с предварительной буферизацией я попал в предел и больше не загружаю видео. Я нашел другой ответ, связанный с изображениями, и я был удивлен, обнаружив, что этот ответ решает эту проблему.

 if(window.stop !== undefined) { window.stop(); } else if(document.execCommand !== undefined) { document.execCommand("Stop", false); } 

ссылка: Javascript: Отменить / Остановить запросы изображения

Я нашел эту проблему при использовании html5-видео внутри динамического контента, такого как карусели, для освобождения заблокированных сокетов, которые вы должны разгрузить источник видео:

 var video = $('#video'); video[0].pause(); video.prop('src',''); video.find('source').remove(); video.remove(); 

Ошибка исправлена, но я все же должен был сделать это на Chrome 42. По крайней мере, я все же мог установить preload = “auto”.

У нас были те же симптомы, но проблема заключалась в том, что мы дважды вызывали load() на одном и том же видео: один и тот же видеоконтроль, тот же источник видео (MP4). В инструментах dev появилось два идентичных 206 запросов, а затем, несколько раз переключив видео, Chrome отменит первый запрос, выключит прогрессивное воспроизведение и дождитесь завершения второго запроса.

Также обратите внимание, что если вы используете источник MP4 и не форматируется для прогрессивного воспроизведения (это означает, что атом MOOV находится в начале файла), тогда у вас будет 1-2 дополнительных запроса для файла, что делает его еще более запутанным.

Давайте будем гением компьютера.