Медиаплеер застревает в середине буферизованного диапазона в Chrome - PullRequest
2 голосов
/ 26 сентября 2019

ЧТО ТАКОЕ МОЯ ПРОБЛЕМА?

Прямой потоковый проигрыватель моего сайта использует 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, который включает текущийпозиция воспроизведения и достаточное количество данных для обеспечения непрерывного воспроизведения:

  1. Установите для атрибута HTMLMediaElement.readyState значение HAVE_ENOUGH_DATA.
  2. Воспроизведение может возобновиться в этот момент, если оно было ранее приостановлено при переходе к 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), Его комментарий показывает, что:

Некоторыеплатформы / браузеры могут застрять в середине буферизованного диапазона (например, при поиске во вкладке фона). Определите, когда мы застряли, чтобы игрок мог ответить.

, но я не могу воспроизвести, когда мойбраузер находится на фоновой вкладке.

...