ЧТО ТАКОЕ МОЯ ПРОБЛЕМА?
Прямой потоковый проигрыватель моего сайта использует hls.js.Из статистики моего сервера, во многих случаях игрок застревает в середине буферизованного диапазона.
Вот мой необработанный журнал статистики сервера (удалены некоторые бесполезные параметры):
tm=2019-09-27 12:04:41`bufferLevel=8.447303999999974`currentTime=158.4`buffered=[6.024,166.832]`readyState=4`ua=Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/3.53.1153.400 QQBrowser/9.0.2524.400 Tencent AppMarket/4.8 GameCenter
currentTime
получается с помощью HTMLMediaElement.currentTime
, а буферизация - с помощью HTMLMediaElement.buffered
:
currentTime=158.4
buffered=[6.024,166.832]
readyState=4
из W3c:
Если HTMLMediaElement.buffered содержит TimeRange, который включает текущийпозиция воспроизведения и достаточное количество данных для обеспечения непрерывного воспроизведения:
- Установите для атрибута HTMLMediaElement.readyState значение HAVE_ENOUGH_DATA.
- Воспроизведение может возобновиться в этот момент, если оно было ранее приостановлено при переходе к HAVE_CURRENT_DATA.
В этом случае 613.3
находится в середине [469.277,677.612]
, видео должно прогрессировать, но это не так.
Hls.js будет периодическипроверка currentTime
прогрессирует каждые 100 мс.если currentTime
не прогрессировал в течение 1000 мс, то hls.js вызовет событие STALL
, и я отправлю статистику останова на сервер.
Я не могу воспроизвести эту проблему на моей стороне, она появляется только на моемстатистика сервера.
ЧТО Я ПРОБОВАЛ
У игрока в шака есть модуль для обнаружения этого случая (https://www.ellealcatrase.eu/player2/docs/api/lib_media_stall_detector.js.html), Его комментарий показывает, что:
Некоторыеплатформы / браузеры могут застрять в середине буферизованного диапазона (например, при поиске во вкладке фона). Определите, когда мы застряли, чтобы игрок мог ответить.
, но я не могу воспроизвести, когда мойбраузер находится на фоновой вкладке.