Ogg Media (Ogg Media)

Перейти к навигации Перейти к поиску
Ogg Media
Расширение .ogm
Тип формата формат описания контейнеров[вд]
Расширен из Ogg

Ogg Media (OGM) — формат, контейнер для хранения потоков данных, таких как видео, аудио, и субтитры. Обеспечивает необходимые средства для надёжной транспортировки файла, контроля целостности файла, минимизации количества перемещений по файлу во время воспроизведения нескольких потоков (чередование).

Контейнер Ogg Media — сторонняя модификация контейнера Ogg, рассчитанного на свободные кодеки, поддерживаемые Xiph.Org, сделанная для поддержки несвободных кодеков, обычно используемых с контейнером AVI, с помощью DirectShow. Ogg Media была создана в 2002 году независимо от Xiph.Org, которая в 2004 году опубликовала просьбу убрать вводящее в заблуждение слово «Ogg» из названия контейнера.[1]

Каждый поток данных в терминах ogg называется логический поток (англ. logical bitstream), несколько логических потоков объединяются в физический поток (англ. physical bitstream).

Существуют следующие методы объединения логических потоков в один физический:

  • последовательное объединение (англ. chaining), все страницы первого логического потока следуют до страниц второго логического потока
  • группировка (англ. grouping), страницы потоков перемешиваются для обеспечения возможности одновременно читать данные из разных потоков без существенного изменения смещения в файле (для RIFF-контейнера такое положение потоков называется чередованием).

Каждый логический поток разбивается на пакеты (англ. packets). Формат пакета определяется используемым кодеком. Пакеты делятся на сегменты (англ. segments), размер каждого из сегментов не превышает 255 байт. Сегменты объединяются в страницы (англ. pages), каждая страница содержит в себе не более 255 сегментов (общий размер данных в одной странице никогда не превышает 64 Кб). Пакет может содержаться более чем в одной странице (то есть быть в размере больше 64 Кб), в этом случае для страницы содержащей продолжение пакета выставляется специальный флаг «продолжение пакета» (англ. continued_packet_flag).

Структура пакета

[править | править код]
смещение (hex) размер тип название описание
0x0 4 FOURCC capture_pattern всегда равен 'OggS', 0x4f 0x67 0x67 0x53
0x4 1 BYTE stream_structure_version версия структуры, должна быть равна 0
0x5 1 битовое поле header_type_flag 0x1 continued_packet_flag страница содержит продолжение пакета
0x2 begin_of_stream страница является первой страницей потока
0x4 end_of_stream страница является последней страницей потока
0x6 8 INT64 absolute_granule_position номер последнего фрейма или семпла (отсчёта), закодированного целиком в этом пакете. Фреймы, не поместившиеся в пакет целиком не учитываются, если нет фреймов, поместившихся в пакет целиком, указывается величина -1
0xE 4 INT32 page_serial_number номер логического потока (в рамках заданного физического потока), к которому относится содержимое страницы. Должно быть уникальным в рамках одного физического потока.
0x12 4 INT32 page_sequence_no порядковый номер страницы в логическом потоке
0x16 4 UINT32 page_checksum CRC32-код страницы
0x1A 1 BYTE page_segments количество сегментов в странице. Число [0-255], числа 0 и 255 допустимы (при числе 0 страница не содержит сегментов (и информации) и должна быть просто пропущена).
0x1B page_segments BYTE[] segment_table таблица размеров сегментов в странице. Количество записей в таблице определяется page_segment, в случае нулевого значения, segment_table отсутствует

Существенной особенностью формата является отсутствие общего заголовка для физического потока. Например, бинарное объединение двух файлов будет давать рабочий файл. В OGM-файлах отсутствует индекс у видеопотока (что увеличивает устойчивость формата при передаче данных, но затрудняет воспроизведение).

Каждая страница содержит CRC-код для проверки правильности данных при передаче и воспроизведении.

Примечания

[править | править код]
  1. OGM Архивировано 30 января 2009 года.