Огг-страница

![]() |
Страница Ogg — это единица данных в битовом потоке Ogg , обычно размером от 4 до 8 КБ, с максимальным размером 65 307 байт. [1]
Цель
[ редактировать ]Одна из целей форматов мультимедийных контейнеров — обеспечить объединение нескольких в кодеков . один файл или поток Например, чтобы объединить аудио , видео и субтитры в один файл.
Точка зрения Кристофера Монтгомери , создателя формата Ogg, заключается в том, что единицы данных мультиплексированного кодека должны представлять собой отдельный уровень абстракции от единиц данных, используемых кодеком, чтобы ограничить объем буферизации, необходимой при декодировании содержащихся данных. . По его мнению, которое поддерживают другие разработчики, работающие с Xiph.org Foundation , это дает Ogg техническое преимущество перед альтернативными форматами битового потока , такими как AVI , QuickTime и MPEG .
Каждая страница Ogg также предоставляет смещение по времени содержащихся данных, что позволяет осуществлять эффективный поиск, который является одновременно точным и совместимым с потоковой передачей . Напротив, многие другие форматы стремятся байтировать позиции в потоке или полагаются на оглавление для поиска информации.
Структура страницы
[ редактировать ]Каждая страница Ogg начинается с четырехбайтовой магической строки «OggS». Если синхронизация потеряна, декодер может найти следующее вхождение этой последовательности, чтобы снова начать декодирование. За этими четырьмя байтами следует нулевой байт для Ogg версии 0. Поле версии изначально предназначалось для того, чтобы позволить нескольким типам страниц Ogg, настроенным для разных полезных данных, сосуществовать в одном потоке. В 2000-е годы стало ясно, что будет использоваться только одностраничная версия. [2]
Шестой байт каждой страницы определяет флаги типа. Значение 1 указывает, что страница содержит данные пакета, продолженного с предыдущей страницы. Значение 2 указывает, что это первая страница потока, а значение 4 указывает, что это последняя страница потока. Эти значения можно комбинировать с помощью сложения или логического ИЛИ .
Следующие 8 байтов, или 64 бита , называются абсолютной позицией гранулы и представляют собой синтетическое значение, которое кодирует временную метку декодирования, временную отметку представления и расстояние до первой необходимой ссылки. Точное кодирование положения гранулы зависит от конкретного кодека. [2] [3]
Следующие 4 байта — это серийный номер потока , которому принадлежит эта страница. Каждый логический поток должен иметь уникальный серийный номер внутри физического потока. Он также предназначен для использования как слабый хэш, чтобы коллизия была очень маловероятной при мультиплексировании различных потоков, что устраняет необходимость постоянного пересчета заголовков страниц на каждом этапе мультиплексирования.
Следующие 4 байта представляют собой порядковый номер страницы в потоке. Это счетчик страниц, позволяющий обнаружить потерянные страницы. По сравнению с другими форматами контейнеров, большое количество битов также позволяет осуществлять прямую UDP одноадресную / многоадресную рассылку с переупорядочением и повторной сборкой обработки Ogg. [2]
Следующие 4 байта, начиная с 23-го байта страницы, представляют собой CRC контрольную сумму страницы. Поскольку значение этого поля изменяется, результат проверки вычисляется с значением этого поля, равным нулю.
Далее, 27-й байт каждой страницы определяет количество содержащихся в ней сегментов в диапазоне от 0 до 255. Это также размер следующей таблицы сегментов в байтах. Каждый байт таблицы сегментов определяет длину сегмента.
Каждый сегмент может иметь длину до 255 байт и ограничивается страницей. Сегмент размером менее 255 байт отмечает конец пакета; следующий сегмент начнет новый пакет. Пакет с длиной, кратной 255 байтам, закончится сегментом длиной 0. Если последний сегмент страницы имеет длину 255 байт, то последний пакет продолжается на следующей странице.
Ссылки
[ редактировать ]- ^ «RFC 3533 — Формат инкапсуляции Ogg, версия 0» .
- ^ Jump up to: а б с Монтгомери, Кристофер (27 апреля 2010 г.). «Монти — в защиту доброго имени Огга» . люди.xiph.org/~xiphmont. Архивировано из оригинала 29 апреля 2010 г. Проверено 2 мая 2010 г.
- ^ "ogg-мультиплекс" . Проверено 2 марта 2011 г.