Типы видео H.264
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Для видео H.264 определены следующие подтипы мультимедиа.
Подтип | FOURCC | Описание |
---|---|---|
MEDIASUBTYPE_AVC1 | AVC1 | Поток H.264 без кодов запуска. |
MEDIASUBTYPE_H264 | "H264" | Поток H.264 с кодами начала. |
MEDIASUBTYPE_h264 | "h264" | Эквивалентно MEDIASUBTYPE_H264, с другим FOURCC. |
MEDIASUBTYPE_X264 | "X264" | Эквивалентно MEDIASUBTYPE_H264, с другим FOURCC. |
MEDIASUBTYPE_x264 | 'x264' | Эквивалентно MEDIASUBTYPE_H264, с другим FOURCC. |
Эти идентификаторы GUID подтипа объявляются в wmcodecdsp.h.
Основное различие между этими типами мультимедиа — наличие кодов запуска в битовом потоке. Если подтип MEDIASUBTYPE_AVC1, битовый поток не содержит коды запуска.
H.264 Bitstream с кодами запуска
Потоки H.264, передаваемые по воздуху или содержащиеся в программе MPEG-2 или транспортных потоках, или записанных на HD-DVD, форматируются, как описано в приложении B ITU-T Rec. H.264. Согласно этой спецификации, битовый поток состоит из последовательности единиц слоя абстракции сети (NALUs), каждая из которых префиксируется с начальным кодом, равным 0x000001 или 0x00000001.
При наличии кодов запуска в битовом потоке используется следующий тип носителя:
Ярлык | Ценность |
---|---|
Основной тип | MEDIATYPE_Video |
Подтипов | MEDIASUBTYPE_H264, MEDIASUBTYPE_h264, MEDIASUBTYPE_X264или MEDIASUBTYPE_x264 |
Тип формата | FORMAT_VideoInfo, FORMAT_VideoInfo2, FORMAT_MPEG2Videoили GUID_NULL |
Если тип формата GUID_NULL, структура формата отсутствует.
Если битовый поток содержит коды начала, любой из типов формата, перечисленных здесь, достаточно, так как декодатор не требует дополнительных сведений для анализа потока. Битовый поток уже содержит все сведения, необходимые декодировщику, и коды запуска позволяют декодировщику находить начало каждого NALU.
Следующие подтипы эквивалентны:
H.264 Bitstream без кодов запуска
Формат контейнера MP4 хранит данные H.264 без кодов запуска. Вместо этого каждый NALU префиксируется полем длины, которое дает длину NALU в байтах. Размер поля длины может отличаться, но обычно составляет 1, 2 или 4 байта.
Если коды запуска отсутствуют в битовом потоке, используется следующий тип носителя.
Ярлык | Ценность |
---|---|
Основной тип | MEDIATYPE_Video |
Подтип | MEDIASUBTYPE_AVC1 |
Тип формата | FORMAT_MPEG2Video |
Блок форматирования — это MPEG2VIDEOINFO структура. Эта структура должна быть заполнена следующим образом:
- hdr: структура VIDEOINFOHEADER2, описывающая битовый поток. Таблица цветов отсутствует после BITMAPINFOHEADER части структуры, и biClrUsed должно быть равно нулю.
- dwStartTimeCode: не используется. Установите значение нулю.
- cbSequenceHeader: длина массива dwSequenceHeader в байтах.
- dwProfile: указывает профиль H.264.
- dwLevel: указывает уровень H.264.
- dwFlags: количество байтов, используемых для поля длины, которое отображается перед каждой NALU. Поле длины указывает размер следующего NALU в байтах. Например, если dwFlags равно 4, каждое naLU предшествует 4-байтового поля длины. Допустимые значения: 1, 2 и 4.
- dwSequenceHeader: массив байтов, который может содержать набор параметров последовательности (SPS) и набор параметров рисунка (PPS) NALUs.
Контейнер MP4 может содержать наборы параметров последовательности (SPS) или наборы параметров рисунка (PPS) в качестве специальных единиц NAL в заголовках файлов или в отдельном потоке (отличном от видеопотока). При установке формата тип носителя может указывать единицы SPS и PPS NAL в массиве dwSequenceHeader. Если cbSequenceHeader больше нуля, dwSequenceHeader является началом массива байтов, содержащего SPS и PPS NALUs, разделенных полями длиной 2 байтов, все в порядке байтов сети (big-endian). Можно использовать как SPS, так и PPS, только один из этих типов или нет. Фактический тип каждого NALU можно определить путем изучения поля nal_unit_type самого NALU.
При использовании этого типа мультимедиа каждый образец мультимедиа начинается в начале NALU, а единицы NAL не охватывают примеры. Это позволяет декодированиям восстанавливаться после повреждения или удаления примеров данных.