Видеокодировщик 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.
Поддерживаются такие значения:
  • eAVEncH264VProfile_Base (по умолчанию)
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High (требуется Windows 8)
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:
  • eAVEncAdaptiveMode_None. Без адаптивного кодирования. (по умолчанию).
  • eAVEncAdaptiveMode_FrameRate. Адаптивное изменение частоты кадров.

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 Устанавливает компромисс между качеством и скоростью. Допустимый диапазон:
  • 0–33: низкая сложность
  • 34–66: средняя сложность (по умолчанию)
  • 67–100: высокая сложность

Это значение влияет на то, как кодировщик выполняет различные операции кодирования, такие как компенсация движения. При более высоких уровнях сложности кодировщик работает медленнее, но обеспечивает более высокое качество с той же скоростью передачи.
CODECAPI_AVEncH264CABACEnable Включает или отключает CABAC (контекстно-адаптивное двоичное арифметическое кодирование) для кода энтропии H.264. Значение по умолчанию — VARIANT_FALSE.
CABAC не используется для базового профиля.
CODECAPI_AVEncH264SPSID Задает значение seq_parameter_set_id в единице SPS NAL битового потока H.264.
CODECAPI_AVEncMPVDefaultBPictureCount Задает максимальное количество последовательных кадров B в выходном битовом потоке. Допустимые значения:
  • 0: не используйте кадры B (по умолчанию).
  • 1. Используйте один кадр B.
  • 2. Используйте два B-кадра.
Чтобы задать этот параметр, задайте свойство перед вызовом IMFTransform::SetOutputType.
Для базового профиля количество кадров 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 кодировщик задает следующие атрибуты в выходных примерах:

Примечание

В предыдущей версии документации неправильно указано, что кодировщик поддерживается в 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:

Следующие Windows 8.1 свойства ICodecAPI являются необязательными, но тестируются в HCK, если они поддерживаются.

Следующие Windows 8 и Windows 8.1 свойства ICodecAPI являются необязательными, но тестируются в HCK, если они поддерживаются.

Следующие свойства ICodecAPI являются необязательными. Они не тестируются в HCK.

Требования

Требование Значение
Минимальная версия клиента
Windows 7 [только классические приложения]
Минимальная версия сервера
Ни одна версия не поддерживается
DLL
Mfh264enc.dll

См. также раздел

Объекты кодека

Поддержка MPEG-4 в Media Foundation

Поддерживаемые форматы мультимедиа в Media Foundation

Типы видеофайла