Ogg Media
Ogg Media | |
---|---|
Расширение | .ogm |
Тип формата | формат описания контейнеров[вд] |
Расширен из | Ogg |
Ogg Media (OGM) — формат,контейнер для храненияпотоков данных, таких как видео, аудио, и субтитры. Обеспечивает необходимые средства для надёжной транспортировки файла, контроля целостности файла, минимизации количества перемещений по файлу во время воспроизведения нескольких потоков (чередование).
Контейнер Ogg Media — сторонняя модификация контейнераOgg, рассчитанного на свободные кодеки, поддерживаемыеXiph.Org, сделанная для поддержки несвободных кодеков, обычно используемых с контейнеромAVI, с помощьюDirectShow. Ogg Media была создана в 2002 году независимо отXiph.Org, которая в 2004 году опубликовала просьбу убрать вводящее в заблуждение слово «Ogg» из названия контейнера.[1]
Формат OGM
[править |править код]Каждый поток данных в терминах 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-код для проверки правильности данных при передаче и воспроизведении.
См. также
[править |править код]Примечания
[править |править код]- ↑OGMАрхивировано 30 января 2009 года.
![]() | В статьене хватаетссылок на источники (см.рекомендации по поиску). Информация должна бытьпроверяема, иначе она может быть удалена. Вы можетеотредактировать статью, добавив ссылки наавторитетные источники в видесносок.(19 октября 2024) |