Кратко

  • RFC 2035 передаёт не целый JPEG-файл, а данные сканирования без стабильных или выводимых таблиц и маркеров. Каждый пакет повторяет восьмиоктетный заголовок RTP/JPEG с Type, Q, шириной, высотой и 24-битным Fragment Offset.
  • Метка времени, номер последовательности, смещение и Marker отвечают за принадлежность кадру, порядок потока, позицию байтов и объявленный конец. Вместе они выявляют пробелы; ни одно поле не доказывает полноту само по себе.
  • Маркеры перезапуска сбрасывают состояние декодера. В Types 4 и 5 выравнивание интервала по пакету может разрешить частичное декодирование после потери, но не гарантирует пиксели, срок, непрерывность или качество восприятия.

Пакет, пришедший позже соседей, не обязан оказаться в конце кадра. В RFC 2035 у него есть Fragment Offset — позиция его байтов внутри JPEG-сканирования. Получатель может сразу записать данные по этому адресу. Очерёдность сети остаётся фактом доставки, а не становится структурой изображения.

Опубликованный в октябре 1996 года формат строился на экономии описания. Обычный JPEG содержит таблицы, размеры и сегменты, объясняющие кодирование. В видеопотоке такие сведения часто стабильны либо воспроизводимы по общей формуле. Повторять их в каждом кадре означает расходовать полосу без новых образцов изображения. Поэтому полезная нагрузка начинается с энтропийно-кодированных данных, а синтаксис восстанавливается из компактного заголовка.

Ограничение как условие совместимости

RFC 2035 охватывает последовательное DCT и одно чересстрочное сканирование. Небольшой набор Types задаёт выборку цвета и правила перезапуска. Узкая поверхность позволяла взаимодействовать аппаратным кодекам с ограниченными возможностями; она не обещала транспорт любой разновидности JPEG.

Восемь октетов включают специфическое поле, три байта смещения, Type, Q, Width и Height. Type выбирает интерпретацию. Q задаёт получение таблиц квантования. Размеры даны в единицах по восемь пикселей. Источник может менять качество и разрешение для регулировки скорости, поэтому параметры не постоянны.

При Q от 1 до 99 таблицы выводятся по алгоритму RFC. Значения от 100 требуют динамических таблиц через механизм сеанса за пределами RFC 2035; ноль зарезервирован. Видимое число ещё не означает достаточный контекст. А достаточный контекст остаётся инструкцией, не доказательством правильного кодирования или сохранности сканирования.

Четыре вопроса вместо одного статуса

Один кадр объединяется общим RTP timestamp. Sequence number показывает порядок и пропуски. Fragment Offset помещает данные. Marker объявляет последний пакет.

Общая метка времени не заполняет дыру. Непрерывная последовательность не удостоверяет содержимое. Правильное смещение не доказывает соседние диапазоны. Marker не восстанавливает начало. Получатель сравнивает смещение с длиной, выявляет пробелы и перекрытия, отдельно фиксирует начало и конец.

Такой контроль объясняет фрагментацию на уровне RTP. Потеря одного IP-фрагмента может скрыть от приложения всю датаграмму. Независимые RTP-пакеты сохраняют видимость дошедших диапазонов и дают отправителю управлять размером и темпом. Это наблюдаемость, а не надёжная доставка.

Если потерян финальный пакет, вместе с ним исчезает Marker. Нулевое смещение при новой метке времени показывает новое начало; непрерывность до следующего Marker позволяет оценить следующий кадр. Это не завершает предыдущий.

Перезапуск восстанавливает состояние, а не сцену

Хаффмановское декодирование и DC-прогноз несут состояние. Маркер перезапуска обнуляет его. Types 0 и 1 обходятся без таких маркеров. Types 2 и 3 допускают их без выравнивания по пакетам. Types 4 и 5 совмещают границы интервала и пакета и указывают положение счётчиком.

Целый выровненный интервал может декодироваться без предыдущих байтов. Потерянные пиксели при этом не возникают, полезность области неизвестна, срок воспроизведения не обеспечен. Локальная точка входа ограничивает зависимость декодера, но не является сокрытием потерь или обещанием качества.

Позднее RFC 2435 заменил RFC 2035; текущий реестр IANA ссылается на преемника для статического типа 26. Это современный статус. Независимые заголовки и изменения поздней спецификации нельзя приписывать документу 1996 года.

Не уничтожать событие ради удобного вывода

Захват доказывает наблюдённые байты и объявленные поля. Реконструктор способен сохранить созданный JPEG-синтаксис. Декодер добавляет результат и области. Затем идут deadline, вывод на экран и восприятие человеком. Это разные слои.

Принцип работающего кода у Lu Heng даёт практическое правило: сначала сохранять исполненное событие, затем формулировать итог. «Кадр полный» должно оставаться воспроизводимым вычислением. Если исходные пакеты и offsets уничтожены, итог превращается в непроверяемую власть.

RFC 2035 оставил тонкий общий слой: убрать воспроизводимое, повторять изменяемое и сделать позицию видимой выше IP. Его граница столь же важна, как эффективность. Пакет способен доказать своё место. Полное, своевременное и увиденное изображение требует другой цепочки свидетельств.

Источники