RIFF
Материал из Википедии — свободной энциклопедии
RIFF (англ. Resource Interchange File Format) — один из форматов файлов-контейнеров для хранения потоковых мультимедиа-данных (видео, аудио, возможно текст). Наиболее известными форматами, использующими RIFF в качестве контейнера, являются: AVI (видео), WAV (аудио), RMI (MIDI-треки).
Формат RIFF использует little-endian порядок байтов (младший байт идёт последним). Для машин с форматом данных big-endian предлагался формат RIFX, однако из-за существенно меньшей в бытовом секторе популярности компьютеров с таким форматом данных, RIFX не прижился, в настоящее время формат RIFF воспроизводится и на машинах с big-endian порядком байтов.
Изначально RIFF имел принципиальное ограничение размера данных в 4 ГиБ (точнее, максимальный размер файла 232+7 байт). В силу особенностей ряда популярных программ по созданию и воспроизведению файлов (в большой степени из-за медиа-стека в Microsoft Windows) ограничение усилилось до 2 ГиБ (из-за замены в парсерах RIFF'а DWORD на signed int32). Для поддержки файлов больше 4 ГиБ формат AVI был расширен до AVI-DV, выходящего за рамки контейнера RIFF.
Формат RIFF является адаптацией формата IFF для little-endian компьютеров (в основном, ради PC на 80x86). Разработан он был в 1991 году компаниями Microsoft и IBM. (IFF был создан в 1985).
Содержание |
[править] chunk
Основной концепцией RIFF-формата является chunk, порция данных с заголовком и сигнатурой, указывающей на содержимое chunk'а.
Формат chunk'а:
FOURCC | ckID | сигнатура chunk'а |
DWORD | ckSize | размер данных chunk'а |
BYTE[] | ckData | сами данные chunk'а |
Если chunk содержит нечётное количество байт, то после него добавляется один байт. Таким образом chunk'и всегда выравнены на границу в 2 байта.
[править] FOURCC
FOURCC (от англ. Four Character Code) — последовательность из четырёх символов, используемая для идентификации каких-либо данных. В отношении RIFF — это ckID (идентификаторы chunk'ов) и типы форм. В отношении видео-потока FOURCC обычно используется для идентификации кодека (например, «XVID», «DIV3», «MP43»). FOURCC занимает 4 байта; это размер 32-битного числа, так что иногда FOURCC записывают в виде числа (представления числа в ASCII little-endian).
Например:
FOURCC | число (шестнадцатеричное) | число (десятичное) |
---|---|---|
'RIFF' | 0x46464952 | 1179011410 |
'AVI ' | 0x20495641 | 541677121 |
'XVID' | 0x44495658 | 1145656920 |
'idx1' | 0x31786469 | 829973609 |
Два типа chunk'ов RIFF и LIST могут содержать внутри себя вложенные chunk'и. Весь файл представляет собою единый RIFF-chunk (это одна из причин ограничения размера файла).
ckID для chunk'ов самого формата RIFF всегда записываются большими буквами ASCII. В chunk'ах внутренних форматов (использующих RIFF), таких как AVI или WAV, ckID записывается маленькими буквами. Если ckID содержит две или три буквы, недостающие до 4х символов байты заменяются пробелами (AVI → 'AVI ').
[править] Форма записи
Для удобства записи в спецификациях используется следующая форма записи формата chunk'а:
ckID( <formType> ck )
Например, запись для AVI-файла: RIFF( 'AVI ' LIST( 'hdrl' avi_header) LIST ('movi' movi) [idx1] ). (Квадратные скобки указывают на необязательность элемента).
[править] Стандартные chunk'и
[править] RIFF
Chunk с ckID = 'RIFF' имеет следующую структуру ckData:
FOURCC | FormType | тип содержимого |
BYTE[] | ck | содержимое |
Наиболее распространённые типы:
- 'AVI ' - AVI: содержат видео и аудио информацию.
- 'WAVE' - WAV: содержит звуковую информацию
- 'RMID' - RMI: содержит музыку в формате MIDI
Другие типы:
- 'RDIB' - англ. RIFF Device Independent Bitmap формат хранения изображений
- 'RMMP' - англ. RIFF Multimedia Movie File
- 'PAL ' - англ. Palette Format
[править] LIST
Chunk 'LIST' имеет формат, аналогичный RIFF, первые 4 байта содержат ListType (тип вложенного chunk'а), далее до конца чанка следует вложенный chunk'а. В рамках формата AVI внутри LIST содержатся chunk'и с заголовоком файла, заголовками потоков. Так же chunk LIST используется для хранения информации о содержимом.
[править] JUNK и PAD
Для выравнивания блоков данных по размеру сектора на носителе для обеспечения скорости перемотки и доступа существуют два chunk'а: 'JUNK' и 'PAD' , которые "ничего не значат", которые пропускаются программами воспроизведения. Изначально предполагалось, что при создании файла эти chunk'и будут просто заполнены нулями, однако некоторые программы редактирования видео хранят там свою сигнатуру. (Например, так поступает Virtual Dub).
Запись chunk'ов в сокращённой нотации:
JUNK ( filler ) PAD (filler)
[править] INFO
INFO - специальный ListType для хранения информации о содержимом файла. INFO не влияет на то, как програмы работают с файлом, эта информация (большей частью) показывается пользователю. Назначение INFO подобно назначению mp3-тэгов. Список chunk'ов для INFO:
- IARL (англ. Archival Location) - место архивного хранения документа (практически не используется)
- IART (англ. Artist) - список авторов произведения (стандартный тэг, отображается практически во всех плеерах).
- ICMS (англ. Commissioned) - список лиц, предоставивших содержимое файла. (не используется)
- ICMT (англ. Comments) - комментарий. (отображается практически по всех плеерах)
- ICOP (англ. Copyright) - информация об авторских правах.
- ICRD (англ. Creation date) - Дата создания оригинального произведения. Формат YYYY-MM-DD. (редко используется).
- ICRP (англ. Cropped) - данные об обрезке произведения. (не используется).
- IDIM (англ. Dimensions) - Физические размеры оригинала. (не используется).
- IENG (англ. Engineer) - фамилии лиц, создававших файл. (не используется).
- IKEY (англ. Keywords) - список ключевых слов, относящихся к произведению. (не используется)
- ILGT (англ. Lightness) - степень освещённости оригинала (зависит от оборудования оцифровки) (не используется).
- IMED (англ. Medium) - тип носителя оригинала (не используется)
- INAM (англ. Name) - название произведения. Существуют разногласия о том, следует ли использовать INAM или ISBJ для сохранения заголовка произведения. (стандартный тэг, поддерживается и часто испольуется)
- IPLT (англ. Palette Setting) - количество цветов при оцифровке. (не используется).
- IPRD (англ. Product) - заголовок продукта, для которого в оригинале предназначалось произведение. (не используется)
- ISBJ (англ. Subject) - описывает содержимое файла. Переодически, наравне с INAM, используется для хранения заголовка. (используется)
- ISFT (англ. Software) - ПО, использованное для создания файла. Обычно автоматически заполняется программами по редактированию, но не отображается в списке тэгов. (используется)
- ISHP (англ. Sharpness) - необходимый уровень резкости для воссоздания произведения. (не используется)
- ISRC (англ. Source) - название огранизации, предоставившей произведение. (не используется)
- ISRF (англ. Source Form) - форма оригинального произведения (бумага/слайд и т. д.) (не используется)
- ITCH (англ. Technician) - специалист, производивший оцифровку (не используется)