Что точно говорит video.buffered.length? - PullRequest
3 голосов
/ 18 марта 2012

Я заметил, что когда видео html5 загружается (буферизируется), его значение buffered.length равно 2, а когда оно завершает загрузку, оно меняется на 1.

Будет ли это надежным способом узнатьвидео уже хранится в кеше (buffered.length == 1)?Если нет, я что-то упустил?Может ли кто-нибудь объяснить мне, что именно говорит это значение?

Ответы [ 3 ]

3 голосов
/ 18 марта 2012

Согласно Apple HTMLMediaElement Документация buffered равна TimeRanges

именно поэтому свойство длины кажется неправильным

буферизованный процент можно вычислить с помощью

video.buffered.end(0) / video.duration
1 голос
/ 18 марта 2012

Насколько я понимаю, buffered возвращает объект TimeRanges с данными о том, сколько видео или аудио буферизовано.

buffered имеет три атрибута: length, start и end.

length возвращает количество буферизируемых «частей» носителя.

По-видимому, при нормальных обстоятельствах buffered.length возвращает 1.

Вот что об этом говорит Опера:

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

* Источник (Прокрутка вниз или поиск в буфере )

Полагаю, это ненадежный способ определить, кэшировано ли видео.

0 голосов
/ 07 февраля 2017

Полная строка кода, где # - целое число:

document.getElementById("videoId").buffered.start(#);

document.getElementById("videoId").buffered.end(#);

document.getElementById("videoId").buffered.length;

Если что-то кэшируется, не должно ли оно сразу загрузиться? Следовательно, video.buffered.end(0) после запуска кэшированного видео автоматически будет конец видео?

Кто-то может поправить меня или подтвердить это.

Примечание: end() требует параметра. Этот параметр возвращает значение для определенного буферизованного vid. например. Если начинается видео продолжительностью 60 секунд, start(0) равно 0, а end(0) постепенно увеличивается. Если вы измените положение видео на 30 секунд, start(1) становится 30 секунд, а end(1) постепенно увеличивается с 30 секунд.

К сожалению, я обнаружил, что мобильный iOS Safari на iOS 10.2.1 всегда возвращает значение 1 для .length. В связи с этим, я подозреваю, что поддержка не поддерживается в разных браузерах. Это ухудшается в Firefox 51.0.1 (который должен иметь лучшую поддержку этих методов), который увеличивает .length на 1, а затем вскоре после этого снова уменьшает. Я подозреваю, что это может быть вызвано тем, что Firefox объединяет две буферизованные части видео. По указанным выше причинам я попытался бы найти другой способ определить, как определить, кэшировано ли видео.

Попробуйте ввести URL-адрес для Chrome & Firefox:

about:cache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...