Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Формат файла Microsoft AVI — это спецификация RIFF-файла, используемая с приложениями, которые записывают, редактируют и воспроизводит звуковые видео последовательности. Как правило, файлы AVI содержат несколько потоков различных типов данных. Большинство последовательностей AVI используют аудио- и видеопотоки. Простой вариант для последовательности AVI использует видеоданные и не требует аудиопотока.
В этом разделе не описываются расширения формата файлов OpenDML AVI. Дополнительные сведения об этих расширениях см. в разделе Расширения формата файлов OpenDML AVI, опубликованные в подкомитете формата файлов OpenDML AVI M-JPEG.
FOURCCs
4CC (четырехзначный код) — это 32-разрядное целое число без знака, созданное путем объединения четырех символов ASCII. Например, функция FOURCC "abcd" представлена в системе Little-Endian как 0x64636261. FOURCCs может содержать пробелы, поэтому "abc" является допустимым FOURCC. Формат файла AVI использует коды FOURCC для идентификации типов потоков, блоков данных, записей индекса и других сведений.
Формат файла RIFF
Формат файла AVI основан на формате документа RIFF (формат файла обмена ресурсами). Файл RIFF состоит из заголовка RIFF, за которым следует нулевая или более списков и блоков.
Заголовок RIFF имеет следующую форму:
'RIFF' fileSize fileType (data)
где RIFF — это литеральный код FOURCC "RIFF",
fileSize
— это 4-байтовое значение, указывающее размер данных в файле, аfileType
— это FOURCC, определяющий конкретный тип файла. ЗначениеfileSize
включает размерfileType
FOURCC плюс размер следующих данных, но не включает размер "RIFF" FOURCC или размерfileSize
. Данные файла состоят из блоков и списков в любом порядке.Блок имеет следующую форму:
ckID ckSize ckData
где
ckID
— это FOURCC, определяющий данные, содержащиеся в блоке,ckSize
— это 4-байтовое значение, указывающее размер данных вckData
, аckData
— ноль или более байт данных. Данные всегда заполняются до ближайшей границы WORD.ckSize
предоставляет размер допустимых данных в блоке; он не включает заполнение, размерckID
или размерckSize
.Список имеет следующую форму:
'LIST' listSize listType listData
где "LIST" — это литеральный код FOURCC "LIST",
listSize
— это 4-байтовое значение, указывающее размер списка,listType
является кодом FOURCC, аlistData
состоит из блоков или списков в любом порядке. ЗначениеlistSize
включает размерlistType
плюс размерlistData
; Он не включает значение "LIST" FOURCC или размерlistSize
.
Оставшаяся часть этого раздела использует следующую нотацию для описания блоков RIFF:
ckID ( ckData )
Где размер блока неявен. С помощью этой нотации список можно представить следующим образом:
'LIST' ( listType ( listData ) )
Необязательные элементы помещаются в квадратные скобки: [ optional element ]
Форма AVI RIFF
Файлы AVI определяются AVI-файлами FOURCC 'AVI' в заголовке RIFF. Все файлы AVI включают два обязательных блока LIST, которые определяют формат потоков и данных потока соответственно. Файл AVI также может содержать блок индекса, который предоставляет расположение блоков данных в файле. Файл AVI с этими компонентами имеет следующую форму:
RIFF ('AVI '
LIST ('hdrl' ... )
LIST ('movi' ... )
['idx1' (<AVI Index>) ]
)
Список hdrl определяет формат данных и является первым обязательным блоком LIST. Список movi содержит данные для последовательности AVI и является вторым обязательным блоком LIST. Список idx1 содержит индекс. Файлы AVI должны хранить эти три компонента в правильной последовательности.
Заметка
Расширения OpenDML определяют другой тип индекса, определяемого методом FOURCC "indx".
В списках hdrl и movi используются вложенные фрагменты данных. В следующем примере показана форма AVI RIFF, развернутая с блоками, необходимыми для выполнения этих списков:
RIFF ('AVI '
LIST ('hdrl'
'avih'(<Main AVI Header>)
LIST ('strl'
'strh'(<Stream header>)
'strf'(<Stream format>)
[ 'strd'(<Additional header data>) ]
[ 'strn'(<Stream name>) ]
...
)
...
)
LIST ('movi'
{SubChunk | LIST ('rec '
SubChunk1
SubChunk2
...
)
...
}
...
)
['idx1' (<AVI Index>) ]
)
Главный заголовок AVI
Список hdrl начинается с основного заголовка AVI, который содержится в блоке avih. Главный заголовок содержит глобальные сведения для всего файла AVI, например количество потоков в файле и ширину и высоту последовательности AVI. Основной блок заголовка состоит из структуры AVIMAINHEADER.
Заголовки потоков AVI
Один или несколько списков strl следуют главному заголовку. Для каждого потока данных требуется список strl. Каждый список strl содержит сведения об одном потоке в файле и должен содержать блок заголовка потока ('strh') и блок формата потока ('strf'). Кроме того, список strl может содержать блок данных заголовка потока ('strd') и блок имени потока ('strn').
Блок заголовка потока ('strh') состоит из структуры AVISTREAMHEADER.
Блок формата потока ('strf') должен следовать блоку заголовка потока. Блок формата потока описывает формат данных в потоке. Данные, содержащиеся в этом блоке, зависят от типа потока. Для видеопотоков информация представляет собой структуру BITMAPINFO, включая сведения о палитре при необходимости. Для аудиопотоков информация представляет собой структуру WAVEFORMATEX.
Если фрагмент данных заголовка потока ('strd') присутствует, он следует блоку формата потока. Формат и содержимое этого блока определяются драйвером кодека. Как правило, драйверы используют эти сведения для настройки. Приложения, которые считывают и записывают файлы AVI, не должны интерпретировать эти сведения; они просто передают его в драйвер и из него в виде блока памяти.
Необязательный фрагмент strn содержит текстовую строку, завершающую значение NULL, описывающую поток.
Заголовки потоков в списке hdrl связаны с данными потока в списке movi в соответствии с порядком блоков strl. Первый блок strl применяется к потоку 0, второй применяется к потоку 1 и т. д.
Stream Data (список movi)
После сведений о заголовке представлен список movi, содержащий фактические данные в потоках, то есть видеокадры и звуковые образцы. Блоки данных могут находиться непосредственно в списке movi, или они могут быть сгруппированы в списках rec. Группирование "rec" подразумевает, что сгруппированные блоки должны быть считываются с диска одновременно и предназначены для файлов, которые перемешиваются для воспроизведения из CD-ROM.
FourCC, определяющий каждый блок данных, состоит из двухзначного номера потока, за которым следует двухзначный код, определяющий тип информации в блоке.
Двухзначный код | Описание |
---|---|
дБ | Несжатый видеокадр |
постоянный ток | Сжатый видеокадр |
ПК | Изменение палитры |
wb | Звуковые данные |
Например, если stream 0 содержит звук, блоки данных для этого потока будут иметь fourCC '00wb'. Если поток 1 содержит видео, блоки данных для этого потока будут иметь FOURCC "01db" или "01dc". Блоки видеоданных также могут определять новые записи палитры для обновления палитры во время последовательности AVI. Каждый блок изменения палитры ('xxpc') содержит структуру AVIPALCHANGE. Если поток содержит изменения палитры, задайте флаг AVISF_VIDEO_PALCHANGES в dwFlags член структуры AVISTREAMHEADER для этого потока.
Текстовые потоки могут использовать произвольные двухзначные коды.
Записи индекса AVI
-
индекс AVI 1.0
-
Необязательный индекс ('idx1') может следовать списку movi. Индекс содержит список блоков данных и их расположение в файле. Он состоит из структуры AVIOLDINDEX с записями для каждого блока данных, включая блоки rec. Если файл содержит индекс, задайте флаг AVIF_HASINDEX в dwFlags член структуры AVIMAINHEADER.
-
индекс AVI 2.0
-
Индекс AVI 2.0 может отображаться как один блок. Кроме того, сегменты индекса можно переключить в блок movi. Если сегменты индекса помещаются в блок movi, супер индекс содержит индекс сегментов индекса. СтруктураAVIMETAINDEX — это базовая структура для сегментов индекса и супериндексов. Дополнительные сведения см. в разделе Расширения формата файлов OpenDML AVI, опубликованные в формате OpenDML AVI M-JPEG. (Этот ресурс может быть недоступен на некоторых языках и странах.)
Другие блоки данных
Данные можно выровнять в AVI-файле, вставив блоки "НЕЖЕЛА" по мере необходимости. Приложения должны игнорировать содержимое блока "НЕЖЕЛАТЕЛЬНАЯ".
Связанные разделы