Как узнать, когда HTMLMediaElement полностью расшифровал доступные в настоящее время данные? - PullRequest
0 голосов
/ 03 февраля 2020

Есть ли способ узнать, когда данные, которые в данный момент переданы на HTMLMediaElement, полностью декодированы и доступны в buffered и готовы к поиску?

У меня есть ситуация, когда я Я пытаюсь проверить, соответствуют ли определенные кадры указанному условию c, прежде чем я передам больше данных в поток элемента (я контролирую поток), поэтому мне нужен способ убедиться, что я "видел" все кадры которые соответствуют текущим данным. Мне не нужно делать выборку каждого кадра, но у меня есть небольшой интервал, не менее 500 мс, который я хотел бы сделать. Конкретнее, у меня есть обработка l oop, которая выглядит следующим образом:

  1. Передайте несколько байтов в сетевой поток, подающий HTMLMediaElement
  2. Подождите, пока байты не будут полностью декодированы и доступны в .buffered TimeRanges <- это шаг, который мне нужен, чтобы помочь мне сделать это надежно. </li>
  3. Сканировать все новые доступные кадры через некоторый интервал, как видно из .buffered, чтобы убедиться, они удовлетворяют заданному условию c.
  4. Сообщите другой части системы, что все байты до текущего индекса соответствуют условию или, если нет, прервите обработку потока.
  5. Если не все байты были обработаны, go до шага № 1.

У меня было несколько идей о том, как это сделать, но способ взаимодействия событий на HTMLMediaElement не всегда оправдал мои ожидания основанные на документации, и иногда есть предостережения. В идеале, это должно быть одно событие, которое сигнализирует об этом, но я не уверен, что оно есть, особенно , надежно . Поэтому я обращаюсь к StackOverflow за мудростью. Вот мои мысли на данный момент:

  1. Я предполагаю, что один из возможных вариантов - использовать событие stalled, но с задержкой в ​​три секунды в соответствии с заданием c приведет к неприемлемой производительности.
  2. Событие seeked может потенциально использоваться, но только в качестве приблизительного. При поиске где-то чуть больше времени буферизованного события событие seeked должно сработать, как только декодирование завершится, по крайней мере, до этого момента. Однако с относительно небольшими порциями данных seeked, вероятно, означает, что декодирование более или менее завершено до всех загруженных данных, а не только до рассматриваемого вопроса - но это только предположение.
  3. readyState >= HAVE_FUTURE_DATA. Это можно будет использовать аналогично событию seeked, но также гарантирует, что данные превысили текущее местоположение. Я не думаю, что это дает какое-либо практическое преимущество перед вариантом № 2.

Есть ли способ, которым я могу достичь этого просто и надежно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...