Русская Википедия:Ogg Media
Шаблон:Файловый формат Ogg Media (OGM) — формат, контейнер для хранения потоков данных, таких как видео, аудио, и субтитры. Обеспечивает необходимые средства для надёжной транспортировки файла, контроля целостности файла, минимизации количества перемещений по файлу во время воспроизведения нескольких потоков (чередование).
Контейнер Ogg Media — сторонняя модификация контейнера Ogg, рассчитанного на свободные кодеки, поддерживаемые Xiph.Org, сделанная для поддержки несвободных кодеков, обычно используемых с контейнером AVI, с помощью DirectShow. Ogg Media была создана в 2002 году независимо от Xiph.Org, которая в 2004 году опубликовала просьбу убрать вводящее в заблуждение слово «Ogg» из названия контейнера.[1]
Формат OGM
Каждый поток данных в терминах ogg называется логический поток (Шаблон:Lang-en), несколько логических потоков объединяются в физический поток (Шаблон:Lang-en).
Существуют следующие методы объединения логических потоков в один физический:
- последовательное объединение (Шаблон:Lang-en), все страницы первого логического потока следуют до страниц второго логического потока
- группировка (Шаблон:Lang-en), страницы потоков перемешиваются для обеспечения возможности одновременно читать данные из разных потоков без существенного изменения смещения в файле (для RIFF-контейнера такое положение потоков называется чередованием).
Каждый логический поток разбивается на пакеты (Шаблон:Lang-en). Формат пакета определяется используемым кодеком. Пакеты делятся на сегменты (Шаблон:Lang-en), размер каждого из сегментов не превышает 255 байт. Сегменты объединяются в страницы (Шаблон:Lang-en), каждая страница содержит в себе не более 255 сегментов (общий размер данных в одной странице никогда не превышает 64 Кб). Пакет может содержаться более чем в одной странице (то есть быть в размере больше 64 Кб), в этом случае для страницы содержащей продолжение пакета выставляется специальный флаг «продолжение пакета» (Шаблон:Lang-en).
Структура пакета
смещение (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-код для проверки правильности данных при передаче и воспроизведении.
См. также
Примечания
Шаблон:Rq Шаблон:Медиаконтейнеры