LINUX.ORG.RU

Video wait MSE

 , , , ,


0

1

Проигрываю FLV(h264\aac) видео, данные идут через fetch, а потом в MSE. Для обработки FLV формата использую вот такую штуку https://github.com/Bilibili/flv.js/

Все бы хорошо, но постоянно появляется событие waiting на video элементе, хотя данные в буфере всегда есть с большим запасом (в video.buffered и в sourceBuffer.buffered, они синхронны всегда). Из-за этого идет отставание(и оно нарастает с каждым waiting событием) проигрывания видео.

В документации сказано
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/waiting_event

The waiting event is fired when playback has stopped because of a temporary lack of data.

То есть событие наступает только когда нет данных. В моем случае буфер всегда есть в запасе
let start = video.buffered.start(0);
//187.34
let end = video.buffered.end(0);
//278.16
let currentTime = video.currentTime;
275.65
let delta = end -  currentTime;
//2.51

Из этого можно полагать что есть запас для проигрывания 2.51sec. То есть данные в буфере имеются ВСЕГДА, но периодически появляется это waiting событие. Оно появляется даже когда delta 10 и 30 секунд - вообще не важно сколько.

После некоторого времени видео вообще перестает проигрываться и останавливается, но не происходит никаких событий при этом, ни pause, abort, ended, suspend ... ничего нет, просто идет бесконечный progress и timeupdate. Стоит вручную подвинуть currentTime хоть на 1 сек. вперед или взад, то видео снова продолжает проигрываться.

Если бы были ошибки в demuxer то они бы появились на video или sourceBuffer, я так думаю, но никаких ошибок и событий не происходит.

Как отдебажить из-за чего возникает событие waiting и остановка видео в дальнейшем? Узнал что есть chrome://media-internals/ но там пока не понятно что отлавливать

★★★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.