Кратко

  • RFC 3189 ставил M в последнем RTP-пакете кадра DV, но запрещал считать его единственным признаком смены кадра: последний пакет мог потеряться, поэтому границей служило изменение 90-килогерцовой временной метки RTP.
  • Остальная схема проводила такие же границы: пакет содержал целые 80-байтовые DIF-блоки одного кадра; часы двигались через намеренно отброшенные кадры; VAUX и AAUX не заменялись SDP; а повтор старого блока скрывал потерю, но не восстанавливал исходные данные.

Сигнал конца жил в самом уязвимом месте

DV пришёл из мира наклонно-строчной магнитной записи и IEEE 1394. Кадр уже имел внутреннюю иерархию: DIF-последовательности состояли из фиксированных 80-байтовых блоков, а идентификатор блока указывал тип и положение. Блок мог нести видео, звук, VAUX, subcode или заголовок.

RFC 3189 поместил целые блоки сразу после обычного заголовка RTP. Дополнительного заголовка DV не требовалось. Полезная нагрузка получалась кратной 80 байтам. В одном пакете разрешалось несколько блоков, но только из одного кадра; оставшееся место нельзя было заполнять началом следующего.

Все пакеты кадра делили одну временную метку с частотой 90 кГц. Новое значение означало новый кадр. M-бит давал более быстрый путь: если последний пакет пришёл, изображение можно было показать, не дожидаясь первого пакета с новой меткой.

Отсутствие M оставляло две версии. Либо кадр ещё передавался, либо последняя датаграмма вместе с признаком конца уже пропала. Ненаблюдаемая единица не могла опровергнуть окончание кадра.

Новый кадр не выдавал квитанцию за старый

Изменение времени позволяло двигаться дальше. Оно не подтверждало, что предыдущий кадр собран полностью. Для полноты требовались отдельные наблюдения — номера последовательности и набор полученных DIF-блоков.

Часть пропусков могла быть намеренной. Отправитель имел право удалить видео и VAUX отдельных кадров ради снижения частоты, но временная метка всё равно учитывала прошедший интервал. Он мог не передавать блоки областей, которые не изменились с предыдущего изображения.

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

Если сохранить только выведенное изображение, след маскировки может исчезнуть. Поздний исследователь увидит правдоподобный кадр и не сможет определить, какие его части действительно пришли по сети.

Описание сеанса оставило часть смысла в потоке

Звук и видео разрешалось объединять в один DV-поток или разводить по разным RTP-потокам. Выбор входил в назначение динамического payload type и не менялся в ходе сеанса, чтобы не усложнять синхронизацию последовательностей. Разным вариантам DV полагались разные динамические типы.

SDP сообщал кодировку и наличие встроенного звука, но не перечислял все варианты соотношения сторон, положения изображения, квантования, числа и назначения каналов, языка.

Нужные декодеру сведения оставались в пакетах source и source-control внутри VAUX и AAUX. Отправитель обязан был включить их в медиапоток. SDP описывал намерение, payload type выбирал формат, вспомогательные блоки объясняли фактическое содержимое. Доставка была ещё одной проверкой.

При раздельной передаче аудио рекомендовалось перепаковать в DAT12, L16 или L20 для приёмников без DV. Если оба потока оставались DV, одинаковые метки упрощали синхронизацию губ. Они не доказывали, что все звуковые и видеоданные пришли.

Преемник исправил синтаксис и сохранил правило

RFC 6469 заменил RFC 3189 в 2011 году. Он добавил HDTV-режимы SMPTE 370M, offer/answer и рекомендации по Source-Specific Multicast, уточнил пропуск subcode и обновил регистрацию media type.

Документ признал, что SDP-примеры RFC 3189 неверно использовали fmtp. Обозначение SMPTE 306M было оставлено для обратной совместимости, поскольку его формат уже покрывался SMPTE 314M.

Старые предложения не стали запрещёнными свидетельствами. Получатель мог принять 306M от прежней системы, а отправитель — попробовать его после отказа нового предложения. Исправление добавляло правильную интерпретацию, не стирая линию совместимости.

Правило M пережило пересмотр без изменения. Маркер по-прежнему ускорял показ, а переход определялся временной меткой, если последний пакет не пришёл.

Полезный признак не обязан быть полной истиной

M=1 на полученном пакете — точное наблюдение. Оно говорит, что отправитель отметил пакет последним. Оно не говорит, что все предыдущие пакеты прибыли. Новая метка точно говорит о новом кадре, но не о полноте старого. Маскировка точно говорит о решении декодера, но не о восстановлении источника.

Историческая сила RFC 3189 в таком распределении полномочий. Реальное время требует быстрых решений. Стандарт позволил принимать их, не превращая плавную картинку в ложную квитанцию о полной доставке.