Ogg Media

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

Формат 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 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-код для проверки правильности данных при передаче и воспроизведении.

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home