Проигрываю 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/ но там пока не понятно что отлавливать