Адаптивная потоковая библиотека (shaka / dash.js), которая не очищает буферизованное видео при поиске? - PullRequest
0 голосов
/ 12 февраля 2019

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

dash.js & shaka ведут себя так же, и нет простого способа изменить их

Я был вроде как патч DASH.js с помощью nooping этой функции , и это работает - но приводит к некоторому нежелательному поведению, такому как сегмент с низкой скоростью передачи данных буферизуется и никогда не обновляется даже при избыточной полосе пропускания

Chrome фактически буферизует несколько диапазонов по умолчанию, если вы 'ре потокового простого mp4, но это не DASH / адаптивный.Кто-нибудь знает о реализации DASH, которая поддерживает это?

1 Ответ

0 голосов
/ 24 апреля 2019

Я не знаю ни одного, но я расскажу, почему Shaka Player этого не делает.

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

Браузер устанавливает ограничения на количество контента, которое мы можем буферизовать.Таким образом, мы очищаем контент, который слишком далеко отстает.Это сотрет части уже буферизованных областей.Так что если есть область от 30-50, которая отображается на сегменты 6-8, которые мы уже буферизировали;если мы очистим некоторые данные и теперь будем буферизовать только 40-50, мы не знаем, какие сегменты все еще буферизируются.Обратите внимание, что мы не всегда можем посмотреть на время из манифеста, чтобы определить, какое время отображается на какие сегменты, поскольку оно может быть неточным.

Мы отслеживаем, сколько мы буферизовали перед точкой воспроизведения, чтобы избежать слишком большой буферизациивперед (опять же из-за ограничений браузера).Наличие нескольких буферизованных диапазонов усложняет способ расчета.Тем более, что когда мы добавляем сегменты последовательно, могут также быть пробелы.Таким образом, мы не можем просто посмотреть на конец текущего диапазона, чтобы определить, сколько мы буферизовали.Кроме того, большое количество HD-буферизации в конце видео не помогает, когда мы в начале, поэтому нам нужно очистить это, чтобы освободить место.

Вы также упоминаете, что низкийкачественные сегменты никогда не уходят.Это произошло бы и в Shaka Player.Мы никогда не заменяем уже загруженные сегменты.Это опять-таки для простоты (и это может произойти только в разумных пределах).Поэтому, когда мы попадаем в уже буферизованную область, мы просто пропускаем ее, даже если бы мы могли загружать HD.Достаточно сложно определить, какой поток следует воспроизводить последовательно, чтобы продолжить воспроизведение в режиме реального времени;добавление к этому необходимости определить, достаточно ли у нас дополнительных ресурсов для замены уже буферизованного контента, будет слишком сложным.

...