DV Data in the AVI File Format

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Корпорация Майкрософт указала формат хранения данных цифрового видео (DV) в файлах AVI. Соответствие этой спецификации гарантирует, что AVI-файлы, созданные в этом формате, будут совместимы с будущими версиями архитектуры цифрового видео DirectShow для Платформы Windows.

В этой статье описывается формат файлов AVI, содержащих данные DV. Определены конкретные FOURCCs (четырехсимвольный код) для потоков данных с чередованием DV и обработчиков потоков для сжатия и распаковки dv. Определена структура формата потока для данных DV. Указаны спецификации для двух методов хранения данных DV в формате AVI-файла.

Предполагается, что читатель знаком с форматом данных DV. (Этот формат определен в спецификации цифровых видео-видео с использованием потребителей, также называемой Синей книгой.)

Существует два типа файлов DV AVI: файлы AVI, которые содержат один поток данных DV, называемый файлами типа 1 ; и AVI-файлы, содержащие dv video в качестве потока "vids" и dv audio в качестве потоков "auds", называемые файлами типа 2 .

Файлы AVI, содержащие один поток данных DV (тип 1)

Данные с чередованием DV можно хранить в собственном формате в виде одного потока в RIFF-файле AVI. Преимуществом этого является использование минимального объема хранилища данных для DV. Основной недостаток заключается в том, что этот формат файла не является обратно совместимым с Видео для Windows, так как он не содержит видео "vids" или аудиопоток "auds". Поддержка потока DV с чередованием обеспечивается с помощью фильтров DV Muxer и DV Splitter , предоставляемых с DirectShow.

Данные DV можно хранить в одном потоке в RIFF-файле AVI, указав "iavs" (чередующийся аудио- и видеопоток) FOURCC (четырехсимвольный код) в члене fccType и любой из "dvsd", "dvhd" или "dvsl" FOURCCs в элементе fccHandler блока заголовка потока "strh". Кадры в секунду видеопотока должны быть указаны в членах dwRate и dwScale и общее количество блоков видео в блоке movi в элементе dwLength .

Обработчик потока dvsd FOURCC указывает, что данные DV определены в части 2 спецификации цифровых видеопотоков, используемых потребителем. Видео имеет формат 525 строк с частотой 29,97 Гц (525–60) или 625 строк с частотой 25,00 Гц (625–50).

Обработчик потока "dvhd" FOURCC указывает, что данные DV определены в части 3 спецификации цифровых видеопотоков, используемых потребителем. Видео имеет формат 1125 строк с частотой 30,00 Гц (1125–60) или 1250 строк с частотой 25,00 Гц (1250–50).

Обработчик потока dvsl FOURCC указывает, что данные DV определены в части 6 спецификации цифровых видеопотоков, используемых потребителем. Видео имеет формат SD с высоким уровнем сжатия (SDL).

Примечание

В оставшейся части этой статьи приведены определения потоков dvsd.

 

За блоком заголовка потока должен следовать блок формата потока DVINFO .

Фактические данные DV хранятся в виде блоков ##dc в блоке movi (## в формате представляет идентификатор потока). Каждый блок содержит один кадр данных, 10 или 12 последовательностей DV DIF для систем 525-60 или 625-50 соответственно. Формат последовательности DV SD (dvsd) DIF определен в части 2 спецификации цифровых видеофиксов, используемых потребителем.

В следующем примере показана форма AIFF RIFF для AVI-файла с одним потоком данных DV, развернутым заполненными блоками заголовков.

00000000 RIFF (0FAE35D4) 'AVI '
0000000C     LIST (00000106) 'hdrl'
00000018         avih (00000038)
                     dwMicroSecPerFrame    : 33367
                     dwMaxBytesPerSec      : 3728000
                     dwPaddingGranularity  : 0
                     dwFlags               : 0x810 HASINDEX | TRUSTCKTYPE
                     dwTotalFrames         : 2192
                     dwInitialFrames       : 0
                     dwStreams             : 1
                     dwSuggestedBufferSize : 120000
                     dwWidth               : 720
                     dwHeight              : 480
                     dwReserved            : 0x0
00000058         LIST (0000006C) 'strl'
00000064             strh (00000038)
                         fccType               : 'iavs'
                         fccHandler            : 'dvsd'
                         dwFlags               : 0x0
                         wPriority             : 0
                         wLanguage             : 0x0 undefined
                         dwInitialFrames       : 0
                         dwScale               : 100 (29.970 Frames/Sec)
                         dwRate                : 2997
                         dwStart               : 0
                         dwLength              : 2192
                         dwSuggestedBufferSize : 120000
                         dwQuality             : 0
                         dwSampleSize          : 0
                         rcFrame               : 0,0,720,480
000000A4             strf (00000020)
                         dwDVAAuxSrc     : 0x........
                         dwDVAAuxCtl     : 0x........
                         dwDVAAuxSrc1    : 0x........
                         dwDVAAuxCtl1    : 0x........
                         dwDVVAuxSrc     : 0x........
                         dwDVVAuxCtl     : 0x........
                         dwDVReserved[2] : 0,0
000000CC     LIST (0FADAC00) 'movi'
0FADACD4     idx1 (00008900)

Файлы AVI, содержащие видео и аудиопотоки DV (тип 2)

Данные с чередованием DV можно разделить на видеопоток и от одного до четырех аудиопотоков в RIFF-файле AVI. Это имеет преимущество обратной совместимости с Видео для Windows, так как он содержит стандартный поток видео "vids" и по крайней мере один стандартный аудиопоток "auds". Основной недостаток заключается в том, что этот формат файла требует избыточного хранения звуковых данных в виде аудиопотоков. Поток "видео" на самом деле является собственным потоком данных с чередованием DV. Однако в качестве стандартного потока "vids" с типом обработчика "dvsd" используется декодер видео DV . Для этого формата также требуется использовать фильтр разделителя DV , чтобы разделить "захваченные" файлы перед их записью в виде AVI-файлов.

Данные DV могут храниться в виде видеопотока с отдельным количеством аудиопотоков в RIFF-файле AVI. Видеопоток указывается с помощью стандартного заголовка видеопотока (значение члена fccType — vids). Член fccHandler указывается как "dvsd", "dvhd" или "dvsl". Кадры в секунду видеопотока должны быть указаны в членах dwRate и dwScale и общее количество блоков видео в блоке movi в элементе dwLength .

В этом AVI-файле, содержав dv video в качестве потока "vids" и dv audio как "auds" streams формы DV, блок формата видеопотока является стандартной структурой BITMAPINFOHEADER . При необходимости блок формата потока можно расширить, включив блок DVINFO , увеличив размер блока формата потока с 40 байт (размер структуры BITMAPINFOHEADER ) до 72 байт (размер структур BITMAPINFOHEADER и DVINFO ) и сразу после структуры данных BITMAPINFOHEADER со структурой данных DVINFO .

Аудиопотоки задаются с помощью стандартного заголовка аудиопотока (значение члена fccType — "auds"). Член fccHandler не используется для аудиопотоков.

Видеоданные DV хранятся в виде блоков ##dc, как определено в предыдущем описании AVI-файла с одними данными DV, а звуковые данные хранятся в виде блоков ##wb в блоке movi.

Примечание

На некоторых языках и в некоторых странах может быть недоступна спецификация цифровых видеомеров, используемых потребителями.

 

В следующем примере показана форма RIFF AIFF для AVI-файла, содержащего dv video в виде потока "vids" и dv audio в виде потоков "auds", развернутых с заполненными блоками заголовков (включая необязательные данные DVINFO после BITMAPINFO в под-блоке strf для потока vids).

00000000 RIFF (103E2920) 'AVI '
0000000C     LIST (00000146) 'hdrl'
00000018         avih (00000038)
                     dwMicroSecPerFrame    : 33367
                     dwMaxBytesPerSec      : 3728000
                     dwPaddingGranularity  : 0
                     dwFlags               : 0x810 HASINDEX | TRUSTCKTYPE
                     dwTotalFrames         : 2192
                     dwInitialFrames       : 0
                     dwStreams             : 2
                     dwSuggestedBufferSize : 120000
                     dwWidth               : 720
                     dwHeight              : 480
                     dwReserved            : 0x0
00000058         LIST (00000094) 'strl'
00000064             strh (00000038)
                         fccType               : 'vids'
                         fccHandler            : 'dvsd'
                         dwFlags               : 0x0
                         wPriority             : 0
                         wLanguage             : 0x0 undefined
                         dwInitialFrames       : 0
                         dwScale               : 100 (29.970 Frames/Sec)
                         dwRate                : 2997
                         dwStart               : 0
                         dwLength              : 2192
                         dwSuggestedBufferSize : 120000
                         dwQuality             : 0
                         dwSampleSize          : 0
                         rcFrame               : 0,0,720,480
000000A4             strf (00000048)
                         biSize          : 40
                         biWidth         : 720
                         biHeight        : 480
                         biPlanes        : 1
                         biBitCount      : 24
                         biCompression   : 0x64737664 'dvsd'
                         biSizeImage     : 120000
                         biXPelsPerMeter : 0
                         biYPelsPerMeter : 0
                         biClrUsed       : 0
                         biClrImportant  : 0
                         dwDVAAuxSrc     : 0x........
                         dwDVAAuxCtl     : 0x........
                         dwDVAAuxSrc1    : 0x........
                         dwDVAAuxCtl1    : 0x........
                         dwDVVAuxSrc     : 0x........
                         dwDVVAuxCtl     : 0x........
                         dwDVReserved[2] : 0,0
000000F4         LIST (0000005E) 'strl'
00000100             strh (00000038)
                         fccType               : 'auds'
                         fccHandler            : '    '
                         dwFlags               : 0x0
                         wPriority             : 0
                         wLanguage             : 0x0 undefined
                         dwInitialFrames       : 0
                         dwScale               : 1 (32000.000 Samples/Sec)
                         dwRate                : 32000
                         dwStart               : 0
                         dwLength              : 2340474
                         dwSuggestedBufferSize : 4272
                         dwQuality             : 0
                         dwSampleSize          : 4
                         rcFrame               : 0,0,0,0
00000140             strf (00000012)
                         wFormatTag      : 1 PCM
                         nChannels       : 2
                         nSamplesPerSec  : 32000
                         nAvgBytesPerSec : 128000
                         nBlockAlign     : 4
                         wBitsPerSample  : 16
                         cbSize          : 0
00000814     LIST (103D0EF4) 'movi'
103D1710     idx1 (00011210)

Формат файла AVI