Буферизация видео HTML5, несмотря на ожидание события `canplaythrough` для `play()`

Я пытаюсь гарантировать (насколько это возможно), что видео HTML5 начинает воспроизводиться только тогда, когда оно может воспроизводиться полностью без буферизации. Для контекста MediaStream видео затем используется для микширования с другим источником звука и отправки через одноранговые соединения WebRTC. Видео обычно имеют размер 5-10 МБ и продолжительность в несколько минут (т. е. при хорошем широкополосном соединении не должно возникнуть проблем с загрузкой всего видео задолго до того, как оно будет воспроизведено).

Для этого мой код в настоящее время ожидает начала события canplaythrough в элементе видео и вызывает play() при его срабатывании.

Это «работает» в том смысле, что видео начинает воспроизводиться, и в большинстве случаев буферизации достаточно для непрерывного воспроизведения видео. Но в некоторых случаях (в частности, для двух человек, которые оба использовали Chrome на MacBook Air и имели явно не невероятное, но приличное широкополосное подключение к Интернету) видео воспроизводится прерывисто и прерывисто — что, как я полагаю, означает видео недостаточно буферизовано.

Существуют ли более эффективные методы обеспечения достаточной буферизации видео в большинстве браузеров?

Возможно, использование fetch() для буферизации всего видео в памяти поможет? Или результирующий blob() также на самом деле лениво буферизуется за кулисами?

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


person comradelion    schedule 21.05.2020    source источник


Ответы (1)


Я создал инструмент под названием Поток или нет, который может помочь на стороне сети. Он сообщит вам, сколько времени требуется для запуска видео, сколько киосков и т. д. Вы можете использовать devTools вашего браузера для дросселирования сети (а в Chrome вы можете эмулировать процессор).

Честно - чтобы увидеть, является ли проблема сетью, если битрейт (используйте FFprobe https://www.streamclarity.com/probe?url=) ниже скорости сети, вы не ограничены сетью.

Есть еще одна возможность. Каковы размеры вашего видео? Каковы размеры области просмотра в браузере? Если вы просите устройство обрезать много пикселей, ограничение воспроизведения может сместиться с полосы пропускания на скорость обработки процессора. Я видел, как это происходило на мобильных устройствах и на старых компьютерах Mac, пытающихся воспроизводить видео в формате 4k, просто не хватает процессора для обработки такого количества пикселей.

  1. Я бы проверил скорость сети, просто чтобы быть уверенным.
  2. Убедитесь, что вы не отправляете больше пикселей, чем вам нужно. У маломощных устройств будут проблемы.
person Doug Sillars    schedule 23.05.2020