Кратко

  • Получение объектов 418 и 420 фиксирует разрыв нумерации, но не доказывает потерю в сети или то, что объект 419 не создавался.
  • Текущий проект MOQT раздельно кодирует постоянное отсутствие, неизвестное состояние и исчерпание времени ожидания ретранслятора; телеметрия должна сохранить эти разные квитанции.

После 418 приходит 420. Мониторинг мгновенно записывает объект 419 в потери. Однако draft-ietf-moq-transport-21 не разрешает превращать номерной разрыв в готовый диагноз.

Объекты MOQT доставляются по потокам и дейтаграммам, через подписку или FETCH, напрямую или через ретрансляторы. 419 мог ещё не быть создан, не входить в фильтр этого пути, ожидаться выше по цепочке, выйти за бюджет ожидания или быть объявлен исходным издателем как объект, которого никогда не будет. На графике ситуации похожи, но их авторы и последствия различны.

Разрыв оставляет состояние неизвестным

Редакция 21 от 8 сентября сохраняет трёхсоставную модель, уже присутствовавшую в редакции 20. Для подписчика или кеша объект известен как существующий, известен как несуществующий либо остаётся неизвестным, потому что ещё не получен или не произведён. Новая редакция в основном перестраивает документ и не изобретает эту модель.

Правило узкое: наблюдаемый пропуск Object ID сам по себе ничего не сообщает о пропущенных объектах. Подгруппы используют разные потоки, дейтаграмма может обогнать поток, кеш может иметь края диапазона и запрашивать середину, а фильтр — исключать часть номеров.

Корректная квитанция называет Track, Group, Object, Subgroup, путь, механизм, наблюдателя и время. «Не появился здесь до срока» — факт. «Никогда не будет существовать» — утверждение, требующее полномочия.

Кто вправе сказать «никогда»

Prior Object ID Gap позволяет Original Publisher объявить, что предшествующий диапазон не существует и никогда не появится. Ретрансляторы не вправе добавлять это свойство. Удалить его можно лишь тогда, когда эквивалентный разрыв уже выражен ответом FETCH. Prior Group ID Gap применяет правило к группам.

Завершённый ограниченный FETCH тоже сообщает состояние диапазона, но формат различает End of Non-Existent Range, End of Unknown Range и End of Timed-Out Range. Издатель отвечает за долговременное решение о создании, ретранслятор — за хранение и ожидание, подписчик — за свой бюджет.

Тайм-аут — это квитанция бюджета

Важное недавнее изменение, перенесённое в текущий проект, — диапазон Timed-Out, добавленный в редакции 20. Код 0x20C отделяет объекты, ожидание которых ретранслятор прекратил после FILL_TIMEOUT, от действительно неизвестных объектов.

Параметр задаёт общий бюджет в миллисекундах для upstream FETCH одного запроса. Ноль означает только немедленно доступные данные. Без параметра срок зависит от реализации. Ретранслятор может сократить запрошенное время без уведомления.

Следовательно, Timed-Out доказывает лишь то, что данный ретранслятор перестал ждать в рамках данного запроса и бюджета. Это не доказательство потери пакета или отсутствия производства. Другой путь может доставить объект позже. Проект допускает позднее получение объекта после записи о его отсутствии из другого источника без автоматического признания Track повреждённым. Кешу нужны происхождение и правила согласования, а не вечная вера первому ответу.

У плеера другие часы

Медиа имеет срок воспроизведения. Существующий объект может прибыть корректно, но слишком поздно для зависимости декодера. Улучшающий слой может никогда не создаваться, а базовый продолжит работать. Время подключения, буфер и выбранное представление меняют результат для зрителя.

MOQT не определяет эти прикладные зависимости. Эксплуатация должна связывать, не сливая, наблюдение объекта, источник статуса, бюджет ретранслятора, переход кеша, зависимость кодека, срок показа и видимый эффект. Только так различаются задержка пути, неполный кеш, решение издателя и отбрасывание плеером корректных, но запоздавших данных.

Источники