Есть ли способ узнать, когда данные, которые в данный момент переданы на HTMLMediaElement
, полностью декодированы и доступны в buffered
и готовы к поиску?
У меня есть ситуация, когда я Я пытаюсь проверить, соответствуют ли определенные кадры указанному условию c, прежде чем я передам больше данных в поток элемента (я контролирую поток), поэтому мне нужен способ убедиться, что я "видел" все кадры которые соответствуют текущим данным. Мне не нужно делать выборку каждого кадра, но у меня есть небольшой интервал, не менее 500 мс, который я хотел бы сделать. Конкретнее, у меня есть обработка l oop, которая выглядит следующим образом:
- Передайте несколько байтов в сетевой поток, подающий
HTMLMediaElement
- Подождите, пока байты не будут полностью декодированы и доступны в
.buffered
TimeRanges
<- это шаг, который мне нужен, чтобы помочь мне сделать это надежно. </li> - Сканировать все новые доступные кадры через некоторый интервал, как видно из
.buffered
, чтобы убедиться, они удовлетворяют заданному условию c. - Сообщите другой части системы, что все байты до текущего индекса соответствуют условию или, если нет, прервите обработку потока.
- Если не все байты были обработаны, go до шага № 1.
У меня было несколько идей о том, как это сделать, но способ взаимодействия событий на HTMLMediaElement
не всегда оправдал мои ожидания основанные на документации, и иногда есть предостережения. В идеале, это должно быть одно событие, которое сигнализирует об этом, но я не уверен, что оно есть, особенно , надежно . Поэтому я обращаюсь к StackOverflow за мудростью. Вот мои мысли на данный момент:
- Я предполагаю, что один из возможных вариантов - использовать событие
stalled
, но с задержкой в три секунды в соответствии с заданием c приведет к неприемлемой производительности. - Событие
seeked
может потенциально использоваться, но только в качестве приблизительного. При поиске где-то чуть больше времени буферизованного события событие seeked
должно сработать, как только декодирование завершится, по крайней мере, до этого момента. Однако с относительно небольшими порциями данных seeked
, вероятно, означает, что декодирование более или менее завершено до всех загруженных данных, а не только до рассматриваемого вопроса - но это только предположение. readyState >= HAVE_FUTURE_DATA
. Это можно будет использовать аналогично событию seeked
, но также гарантирует, что данные превысили текущее местоположение. Я не думаю, что это дает какое-либо практическое преимущество перед вариантом № 2.
Есть ли способ, которым я могу достичь этого просто и надежно?