dash.js — зачем получать события BUFFER_EMPTY?

Как бы я ни пытался настроить прямую трансляцию в dash.js player, иногда я получаю событие BUFFER_EMPTY ("bufferStalled"), затем воспроизведение приостанавливается и выполняется повторная буферизация.

Это как-то связано с "уровнем буфера", но я не могу настроить уровень буфера так, чтобы он не переполнялся. Из журналов/событий я вижу, что «уровень буфера» колеблется около 10 секунд, но иногда он падает до 0,5, ниже которого срабатывает событие bufferStalled и прерывается воспроизведение. Я воспроизводю видеоконтент из локальной сети, так что условия сети в порядке.

Любая идея, как настроить это, чтобы иметь стабильную потоковую передачу видео?


person Pointer Null    schedule 28.12.2017    source источник


Ответы (1)


Проблема может быть также с серверными потоками и доступными скоростями передачи данных - для этого потребуется некоторое тестирование.

Когда проигрыватель видит низкий уровень буферизации, он обычно переключается на более низкую скорость передачи данных, чтобы повысить вероятность передачи потока по сети (проще говоря — более подробную информацию см. ниже). Возможно, у одного из нижних потоков действительно есть проблема с вашим упаковщиком или сервером потоковой передачи. Понятно, что без тестирования сложно сказать.

Также стоит подумать о длине сегментов — более короткие сегменты, как правило, облегчают быстрое переключение.

А также. даже если это локальная сеть, трафик локальной сети или даже другая активность на хост-компьютере все же могут быть фактором.

Если вы просто хотите посмотреть, как работает буферизация dash.js, вот хорошее руководство: https://github.com/Dash-Industry-Forum/dash.js/wiki/ABR-Logic

и обзорную диаграмму здесь: https://github.com/Dash-Industry-Forum/dash.js/wiki/Buffer-and-Scheduling-Logic

Dash.js изменил подход в середине прошлого года, чтобы использовать динамическое переключение между двумя основными правилами буферизации, которые были на месте — это описано в изменениях GitHub (https://github.com/Dash-Industry-Forum/dash.js/pull/2083), но краткий обзор из есть два правила, которые оба используются сейчас:

  • ThroughputRule желателен в переходных условиях, таких как запуск и поиск.
  • BolaRule желателен в стабильных условиях с достаточным буфером.

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

Обратите внимание, что, хотя автоматическое переключение правил использует лучшее из обоих правил, и ThroughputRule, и BolaRule могут хорошо работать без другого.

person Mick    schedule 04.01.2018