Службы форматирования файлов обмена ресурсами
[Функция, связанная с этой страницей, мультимедийный файл ввода-вывода, является устаревшей функцией. Он был заменен средство чтения источника. средство чтения источников оптимизировано для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код средства чтения источников вместо мультимедийных файлов ввода-выводапо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Предпочтительный формат мультимедийных файлов — это формат файлов обмена ресурсами (RIFF). Функции ввода-вывода RIFF-файла работают с основными буферизованными и небуферированными службами ввода-вывода файлов. Вы можете открывать, читать и записывать RIFF-файлы так же, как и другие типы файлов. Подробные сведения об RIFF см. в функциях и макросах AVIFile.
Файлы RIFF используют коды четырехзначных символов для идентификации элементов файла. Эти коды представляют собой 32-разрядные величины, представляющие последовательность из одного до четырех буквенно-цифровых символов ASCII, заполненных справа с пробелами. Тип данных для четырехзначных кодов — FOURCC. Используйте макрос mmioFOURCC для преобразования четырех символов в четырехзначный код. Чтобы преобразовать строку, завершающую значение NULL, в четырехзначный код, используйте функцию mmioStringToFOURCC.
Базовый стандартный блок RIFF-файла — это блоки. Блок — это логическая единица мультимедийных данных, например один кадр в клипе. Каждый блок содержит следующие поля:
- Четырехзначный код, указывающий идентификатор блока
- Значение doubleword, указывающее размер элемента данных в блоке
- Поле данных
На следующем рисунке показан блок RIFF, содержащий два вложенных фрагмента.
Блок, содержащийся в другом блоке, является вложенным элементом. Единственными блоками, разрешенными для хранения вложенных элементов, являются блоки с идентификатором блока RIFF или LIST. Блок, содержащий другой блок, называется родительский блок. Первый блок в RIFF-файле должен быть блоком RIFF. Все остальные блоки в файле являются вложенными фрагментами блока RIFF.
Блоки RIFF включают дополнительное поле в первые четыре байта поля данных. Это дополнительное поле предоставляет тип формы поля. Тип формы — это четырехзначный код, определяющий формат данных, хранящихся в файле. Например, файлы microsoft waveform-audio имеют тип формы "WAVE".
Блоки LIST также включают дополнительное поле в первые четыре байта поля данных. Это дополнительное поле содержит тип списка поля. Тип списка — это четырехзначный код, определяющий содержимое списка. Например, блок "LIST" с типом списка "INFO" может содержать блоки ICOP и ICRD, предоставляющие сведения об авторских правах и дате создания. На следующем рисунке показан блок RIFF, содержащий блок LIST и один другой вложенный фрагмент (блок LIST содержит два вложенных фрагмента).
Службы ввода-вывода мультимедиа включают две функции, которые можно использовать для перехода между блоками в RIFF-файле: mmioAscend и mmioDescend. Эти функции можно использовать в качестве высокоуровневых функций поиска. При переходе к блоку положение файла устанавливается в поле данных блока (8 байтов с начала блока). Для блоков RIFF и LIST позиция файла устанавливается в расположение после типа формы или типа списка (12 байтов с начала блока). При возрастаи из блока позиция файла устанавливается в расположение после конца блока.
Чтобы создать блок, используйте функцию mmioCreateChunk для записи заголовка блока в текущей позиции в открытом файле. Функции mmioAscend, mmioDescendи mmioCreateChunk используют структуруmmCKINFOMMCKINFO для указания и получения сведений о блоках RIFF.