Видеокодировщик H.264
Видеокодировщик Microsoft Media Foundation H.264 — это преобразование Media Foundation , которое поддерживает следующие профили H.264:
- Базовый профиль
- Профиль Main
- Высокий профиль (требуется Windows 8)
Видеокодировщик H.264 предоставляет следующие интерфейсы:
Типы входных данных
Тип входного носителя должен иметь один из следующих подтипов:
- MFVideoFormat_I420
- MFVideoFormat_IYUV
- MFVideoFormat_NV12
- MFVideoFormat_YUY2
- MFVideoFormat_YV12
Дополнительные сведения об этих подтипах см. в разделе Идентификаторы GUID подтипа видео.
Тип выходных данных должен быть задан перед типом входных данных. Пока не будет задан тип выходных данных, метод IMFTransform::SetInputType кодировщика возвращает MF_E_TRANSFORM_TYPE_NOT_SET.
Типы вывода
Кодировщик поддерживает один выходной подтип:
- MFVideoFormat_H264
Задайте следующие атрибуты для выходного типа носителя.
attribute | Описание |
---|---|
MF_MT_MAJOR_TYPE | Основной тип. Должен быть MFMediaType_Video. |
MF_MT_SUBTYPE | Подтип видео. Должен быть MFVideoFormat_H264. |
MF_MT_AVG_BITRATE | Средняя закодированная скорость в битах в секунду. Должен быть больше нуля. |
MF_MT_FRAME_RATE | Частота кадров. |
MF_MT_FRAME_SIZE | Размер кадра. |
MF_MT_INTERLACE_MODE | Режим чередовки. |
MF_MT_MPEG2_PROFILE | Профиль кодирования H.264. Поддерживаются такие значения:
|
MF_MT_MPEG2_LEVEL | Необязательный элемент. Задает уровень кодирования H.264. Значение по умолчанию — –1, указывающее, что кодировщик выберет уровень кодирования. Рекомендуется не задавать уровень в типе носителя и разрешить кодировщику выбрать уровень. Кодировщик может получить правильный уровень для данного видеопотока с учетом ограничений формата и характеристик видео. Дополнительные сведения об ограничениях профиля и уровня см. в приложении A к ITU-T H.264. |
MF_MT_PIXEL_ASPECT_RATIO | Необязательный элемент. Задает пропорции пикселей. Значение по умолчанию — 1:1. |
После установки типа вывода кодировщик видео обновляет тип, добавляя атрибут MF_MT_MPEG_SEQUENCE_HEADER . Этот атрибут содержит заголовок последовательности.
Свойства кодека
Кодировщик H.264 реализует интерфейс ICodecAPI для настройки параметров кодирования. Он поддерживает следующие свойства.
Требования к кодеку для сертификации кодировщика HCK см. в разделе Сертифицированный кодировщик оборудования ниже.
В Windows 7 поддерживаются следующие свойства.
Свойство | Описание |
---|---|
CODECAPI_AVEncCommonRateControlMode | Задает режим управления скоростью. См. заметки. По умолчанию используется режим неограниченной переменной скорости (VBR). |
CODECAPI_AVEncCommonQuality | Задает уровень качества. Это свойство применяется, если режим управления скоростью основан на качестве VBR (eAVEncCommonRateControlMode_Quality). Допустимый диапазон — 1–100. Значение по умолчанию — 70. Чтобы задать этот параметр, задайте свойство перед вызовом IMFTransform::SetOutputType. Чтобы задать этот параметр в Windows 7, задайте свойство перед вызовом IMFTransform::SetOutputType. Кодировщик игнорирует изменения после задания типа вывода. В Windows 8 это свойство можно задать в любое время во время кодирования. Изменения применяются, начиная со следующего входного кадра. Внутри кодировщик преобразует это свойство в значение AVEncVideoEncodeQP . |
Для следующих свойств требуется Windows 8.
Свойство | Описание |
---|---|
CODECAPI_AVEncAdaptiveMode | Задает адаптивный режим кодирования. Кодировщик H.264 поддерживает следующие режимы в Windows 8:
|
CODECAPI_AVEncCommonBufferSize | Задает размер буфера (в байтах) для кодирования с постоянной скоростью (CBR). Допустимый диапазон — [1 ... 2²–1]. Требуется Windows 8. |
CODECAPI_AVEncCommonMaxBitRate | Для ограниченного кодирования VBR указывает скорость очистки "утечки контейнера" в битах в секунду. Это свойство применяется, если режим управления скоростью eAVEncCommonRateControlMode_PeakConstrainedVBR. Допустимый диапазон — [1 ... 2²–1]. |
CODECAPI_AVEncCommonMeanBitRate | Задает среднюю скорость для закодированного битового потока в битах в секунду. Это свойство игнорируется, если режим управления скоростью eAVEncCommonRateControlMode_Quality. Допустимый диапазон — [1 ... 2²–1]. В режимах CBR и без ограничений VBR средняя скорость передачи данных определяет окончательный размер файла. В режиме CBR средняя скорость также является скоростью, с которой сжатые биты стекаются из "негерметикого контейнера". (Дополнительные сведения см. в разделе Модель буфера нечеткого контейнера.) В Windows 7 средняя скорость передачи задается атрибутом MF_MT_AVG_BITRATE для типа носителя. В Windows 8 можно задать среднюю скорость передачи данных с помощью атрибута MF_MT_AVG_BITRATE или свойства CODECAPI_AVEncCommonMeanBitRate. Если оба параметра заданы, CODECAPI_AVEncCommonMeanBitRate переопределяется. В Windows 8 можно задать среднюю скорость во время кодирования. Если скорость передачи меняется, кодировщик использует адаптивную кодировку. |
CODECAPI_AVEncCommonQualityVsSpeed | Устанавливает компромисс между качеством и скоростью. Допустимый диапазон:
Это значение влияет на то, как кодировщик выполняет различные операции кодирования, такие как компенсация движения. При более высоких уровнях сложности кодировщик работает медленнее, но обеспечивает более высокое качество с той же скоростью передачи. |
CODECAPI_AVEncH264CABACEnable | Включает или отключает CABAC (контекстно-адаптивное двоичное арифметическое кодирование) для кода энтропии H.264. Значение по умолчанию — VARIANT_FALSE. CABAC не используется для базового профиля. |
CODECAPI_AVEncH264SPSID | Задает значение seq_parameter_set_id в единице SPS NAL битового потока H.264. |
CODECAPI_AVEncMPVDefaultBPictureCount | Задает максимальное количество последовательных кадров B в выходном битовом потоке. Допустимые значения:
Для базового профиля количество кадров B всегда равно нулю. Кодировщик переопределяет ненулевое значение. Для других профилей H.264, если это свойство не равно нулю, шаблон кодирования — IBBPBBP, где максимальное число последовательных кадров B равно CODECAPI_AVEncMPVDefaultBPictureCount. |
CODECAPI_AVEncMPVGOPSize | Задает число рисунков из одного заголовка GOP в следующий, включая начальную привязку, но не следующую. Допустимый диапазон — [0 ... 2²–1]. Если значение равно нулю, кодировщик выбирает размер GOP. Значение по умолчанию равно нулю. |
CODECAPI_AVEncNumWorkerThreads | Задает количество рабочих потоков, используемых кодировщиком. Допустимый диапазон — 0–16. Если значение равно нулю, кодировщик выбирает количество потоков. |
CODECAPI_AVEncVideoContentType | Указывает тип видеосодержимого. |
CODECAPI_AVEncVideoEncodeQP | Допустимый диапазон: 16–51. Значение по умолчанию — 24. Это свойство применяется, если режим управления скоростью eAVEncCommonRateControlMode_Quality. Это свойство настраивает тот же параметр кодирования, что и AVEncCommonQuality. Однако AVEncVideoEncodeQP позволяет приложению указать значение QP напрямую. Если заданы оба свойства, avEncVideoEncodeQP переопределяется. Значение по умолчанию 24 соответствует значению по умолчанию 70 для параметра AVEncCommonQuality . |
CODECAPI_AVEncVideoForceKeyFrame | При принудительном кодировщике кодирует следующий кадр в качестве ключевого кадра. |
CODECAPI_AVEncVideoMinQP | Допустимый диапазон: 0–51. Значение по умолчанию — 0. Это свойство применяется ко всем режимам управления скоростью. Кодировщик не должен выдавать значение QP ниже, чем указано в свойстве CODECAPI_AVEncVideoMinQP . |
CODECAPI_AVLowLatencyMode | Включает или отключает режим низкой задержки. См. раздел "Многопоточность" в разделе Примечания. |
Комментарии
Кодировщик поддерживает следующие режимы управления скоростью.
Режим | Константа | Описание |
---|---|---|
Константная скорость (CBR) | eAVEncCommonRateControlMode_CBR | Кодировщик пытается достичь постоянной скорости, используя модель "утечки контейнера". Целевая скорость передачи данных задается свойством CODECAPI_AVEncCommonMeanBitRate . Требуется Windows 8. |
Ограниченная переменная скорость (VBR) | eAVEncCommonRateControlMode_PeakConstrainedVBR | Кодировщик использует модель "утечки" с пиковой скоростью передачи. Скорость стока для негерметикого контейнера определяется свойством CODECAPI_AVEncCommonMaxBitRate . Требуется Windows 8. |
Переменная скорость передачи данных на основе качества (VBR) | eAVEncCommonRateControlMode_Quality | Кодировщик пытается достичь постоянного уровня качества, заданного свойством AVEncCommonQuality . |
Без ограничений VBR | eAVEncCommonRateControlMode_UnconstrainedVBR | Кодировщик пытается достичь целевой скорости, заданной атрибутом MF_MT_AVG_BITRATE в типе выходного носителя. Это режим по умолчанию. |
Для режима CBR и ограниченного режима VBR требуется Windows 8.
В Windows 8 кодировщик задает следующие атрибуты в выходных примерах:
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
Примечание
В предыдущей версии документации неправильно указано, что кодировщик поддерживается в Windows Server 2008 R2.
Многопоточность
В Windows 8 кодировщик поддерживает два режима кодирования:
- Кодирование среза. В этом режиме срезы кодируются параллельно. Каждый срез кодируется в разных потоках. Этот режим имеет низкую задержку, так как один рисунок кодируется параллельно. Однако этот подход не масштабируется по мере увеличения числа ядер, так как количество срезов ограничивается количеством строк макроблока на входном рисунке.
- Многокадровая кодировка. В этом режиме кодировщик принимает несколько входных кадров и кодирует их параллельно. Этот режим лучше масштабируется в многоядерной среде, но увеличивает задержку.
Кодировщик по умолчанию использует кодирование среза, чтобы свести к минимуму задержку. Чтобы включить многокадровый кодирование, задайте для свойства CODECAPI_AVLowLatencyModeзначение VARIANT_FALSE.
Чтобы задать количество рабочих потоков, используемых кодировщиком, задайте свойство CODECAPI_AVEncNumWorkerThreads .
В Windows 7 кодировщик всегда использует кодировку среза.
Сертифицированный аппаратный кодировщик
Если имеется сертифицированный аппаратный кодировщик, он обычно используется вместо системного кодировщика папки "Входящие" для сценариев, связанных с Media Foundation. Сертифицированные кодировщики должны поддерживать определенный набор свойств ICodecAPI и при необходимости могут поддерживать другой набор свойств. Процесс сертификации должен гарантировать правильную поддержку необходимых свойств и, если поддерживается необязательное свойство, он также поддерживается должным образом.
Ниже приведен набор обязательных и необязательных свойств ICodecAPI , которые кодировщики должны пройти сертификацию кодировщика HCK.
Требуются следующие Windows 8 и Windows 8.1 свойства ICodecAPI:
- CODECAPI_AVEncCommonRateControlMode
- CODECAPI_AVEncCommonQuality
- CODECAPI_AVEncCommonQualityVsSpeed
- CODECAPI_AVEncCommonMeanBitRate
- CODECAPI_AVEncCommonMaxBitRate
- CODECAPI_AVEncCommonBufferSize
- CODECAPI_AVEncMPVGOPSize
- CODECAPI_AVEncVideoEncodeQP
- CODECAPI_AVEncVideoForceKeyFrame
Следующие Windows 8.1 свойства ICodecAPI являются необязательными, но тестируются в HCK, если они поддерживаются.
- CODECAPI_AVEncVideoMinQP
- CODECAPI_AVEncVideoLTRBufferControl
- CODECAPI_AVEncVideoMarkLTRFrame
- CODECAPI_AVEncVideoUseLTRFrame
- CODECAPI_AVEncVideoEncodeFrameTypeQP
- CODECAPI_AVEncSliceControlMode
- CODECAPI_AVEncSliceControlSize
- CODECAPI_AVEncVideoMaxNumRefFrame
- CODECAPI_AVEncVideoMeanAbsoluteDifference
- CODECAPI_AVEncVideoMaxQP
- CODECAPI_AVEncVideoROIEnabled
- CODECAPI_AVEncVideoTemporalLayerCount (динамический)
- CODECAPI_AVEncH264CABACEnable
Следующие Windows 8 и Windows 8.1 свойства ICodecAPI являются необязательными, но тестируются в HCK, если они поддерживаются.
Следующие свойства ICodecAPI являются необязательными. Они не тестируются в HCK.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows 7 [только классические приложения] |
Минимальная версия сервера |
Ни одна версия не поддерживается |
DLL |
|
См. также раздел