Кратко
- RFC 3533 снабдил страницу Ogg шаблоном
OggS, номерами потока и страницы, таблицей сегментов и CRC, чтобы находить и проверять её отдельно. - Один пакет кодека мог занимать несколько страниц, поэтому исправная поздняя страница могла содержать лишь продолжение, начало которого было утрачено раньше.
Самая опасная ошибка здесь выглядит зелёной. Заголовок страницы читается, длина сходится, CRC совпадает. Однако флаг сообщает, что первый пакет продолжает предыдущую страницу, а её нет. Проверка выполнила обещание точно. Ложным будет лишь следующий вывод — будто из исправности страницы следует полнота всего медиа.
RFC 3533 вышел в мае 2003 года как Informational RFC независимого потока и описал нулевую версию формата инкапсуляции Ogg. Это не спецификация аудио- или видеокодека. Кодировщик создаёт логический битовый поток из пакетов; Ogg делит пакеты на сегменты, собирает сегменты в страницы и чередует страницы одного или нескольких логических потоков в физическом потоке. Контейнер отвечает за рамки и порядок, а значение данных задаёт media mapping конкретного кодека.
Четырёхбайтовый шаблон захвата OggS помогает отыскать возможное начало страницы и восстановить синхронизацию после повреждённого участка. Затем анализатор должен разобрать заголовок и таблицу сегментов, определить полный размер страницы и сверить CRC. 32-битный CRC использует полином 0x04c11db7. Проверенная поправка 8825 уточняет: расчёт охватывает и заголовок с обнулённым полем CRC, и содержимое страницы. Это проверка случайного повреждения всей страницы, а не цифровая подпись.
Таблица lacing показывает несовпадение границ. Значение 255 означает, что пакет продолжается следующим сегментом; меньшее значение завершает пакет. Ноль может означать пустой пакет либо конец пакета размером, кратным 255. Отдельный флаг сообщает, что первый пакет страницы начался на предыдущей. Следовательно, текущая страница может пройти CRC и при этом не давать кодеку полного пакета без потерянного предшественника.
Номер страницы растёт отдельно в каждом логическом потоке. Благодаря этому потеря заметна даже при чередовании аудио, видео и метаданных. Но обнаружение не восстанавливает байты. Разрыв не говорит сам по себе, какие сэмплы или кадры исчезли. И непрерывная нумерация не доказывает, что приложение сохранило все страницы, собрало все пакеты, декодировало все кадры и выдало результат пользователю.
Серийный номер битового потока имеет ещё более узкую роль: он направляет страницы к правильному логическому декодеру. RFC говорит, что номер создаётся случайно и не связан с содержимым или кодировщиком. Это не идентификатор произведения, автора, устройства, аккаунта или владельца прав и не метка происхождения. Превращение его в постоянную личность добавило бы смысл, которого протокол не обещал.
Флаги BOS и EOS обозначают начало и конец логического потока. BOS несёт данные распознавания кодека, определённые mapping; до полезных данных могут идти дополнительные заголовочные пакеты. EOS может быть пустой страницей только с позицией и флагом конца. При grouping страницы одновременно начатых потоков чередуются, при chaining полные физические потоки следуют друг за другом. Эти знаки описывают конструкцию, но не удостоверяют наличие всего ожидаемого материала между ними.
Granule position также не является общими часами. RFC 3533 прямо говорит: у Ogg нет понятия времени, есть лишь возрастающие безразмерные позиции. Аудио-mapping может считать сэмплы, видео-mapping — кадры. Минус один означает, что на странице не заканчивается ни один пакет. Только слой, знающий кодек и mapping, способен перевести позицию во время.
Позднейшие документы про Opus показывают эту границу практически. RFC 7845, а затем сменивший его RFC 9639 задают для Opus в Ogg шкалу 48 кГц, pre-skip, обрезку конца и правила поиска; RFC 6716 описывает сам кодек. Эти решения не скрыты автоматически в восьми байтах базового поля, а внесены конкретным mapping.
Имена MIME тоже являются ограниченными символами. RFC 3534 зарегистрировал application/ogg; RFC 5334 объявил прежнее описание устаревшим, уточнил применение и добавил audio/ogg и video/ogg. Реестр IANA координирует имена. Корректный тип помогает выбрать обработчик, но не доказывает непрерывность страниц, поддержку кодека, безопасность, синхронизацию и успешное воспроизведение отдельного объекта.
CRC не даёт криптографической безопасности. RFC 3533 не предусматривает универсального шифрования или подписи контейнера и вложенных потоков. Ogg может переносить защищённое содержимое, если защиту обеспечивает другой формат, но CRC от этого не становится аутентификацией. Документ предупреждает и о злонамеренно изменённых потоках, переполнениях буфера и сходных угрозах. Успех синтаксического разбора не гарантирует безопасной работы последующего кода.
Реестр errata требует различать статусы. Поправка 6796 со статусом Verified заменяет в примере «pages» на «segments». Поправка 8825, тоже Verified, проясняет охват CRC. Техническая запись 8824 считает точную параметризацию CRC32 недостаточно определённой, но пока имеет лишь статус Reported. Это открытый вопрос, а не уже вступившая в силу новая норма.
Надёжная цепочка квитанций разделяет: получение байтов, поиск шаблона, установление границы, разбор сегментов, проверку CRC, контроль последовательности каждого потока, сборку полных пакетов, выбор mapping, принятие заголовков кодека, перевод granule, синхронизацию потоков, декодирование, вывод и наблюдаемый результат. RFC 3533 усилил ранние звенья и не выдавал их за поздние.
Источники
- RFC 3533 — HTML
- RFC 3533 — текст
- Информационная страница RFC Editor
- Запись IETF Datatracker
- История IETF Datatracker
- Errata RFC 3533
- RFC 3534 — application/ogg
- RFC 5334 — типы Ogg
- RFC 7845 — mapping Ogg Opus
- RFC 9639 — актуальный mapping Ogg Opus
- RFC 6716 — кодек Opus
- RFC 2119 — слова требований
- RFC 8174 — уточнение BCP 14
- RFC 6838 — процедуры типов медиа
- Реестр типов медиа IANA
- Описание структуры Ogg от Xiph
- Heng Lu — Running Code Is Primary
- Heng Lu — On Reality Layers
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
