Поделиться через


Настройка кодирования видео (Microsoft Media Foundation)

Чтобы настроить кодировщик видео, выполните следующие действия.

  1. Задайте все свойства DMO кодировщика с помощью IPropertyBag::Write. В следующем списке приведен минимальный набор свойств, необходимых для кодирования видеопотока CBR (все эти значения имеют значения по умолчанию, которые можно использовать):

    • Свойство MFPKEY_VIDEOWINDOW указывает окно буфера, используемое для потока. Дополнительные сведения о параметрах буферных окон и о том, как он влияет на содержимое, см. в разделе "Методы кодирования". Окно буфера по умолчанию составляет три секунды, что подходит для многих сценариев.
    • Сложность видео определяет компромисс между качеством закодированного содержимого и временем, необходимым для кодирования. Если значение не задано, используется значение по умолчанию. Однако рекомендуемые режимы для определенного кодека можно найти путем вызова IWMCodecProps::GetCodecProp для получения g_wszWMVCComplexityExLive, g_wszWMVCComplexityExOffline и g_wszWMVCComplexityExMax. Затем можно задать MFPKEY_COMPLEXITYEX значение от 0 до указанной максимальной сложности.
    • MFPKEY_CRISP указывает относительную важность гладкости видео и качества изображения закодированных кадров. В большинстве случаев значение по умолчанию работает нормально.
    • Для содержимого видео, хранящегося в контейнере, отличном от ASF, свойство MFPKEY_ASFOVERHEADPERFRAME должно иметь значение 0. Это не значение по умолчанию.

    Сведения о настройке потоков VBR см. в разделе "Использование кодировки VBR".

  2. Настройте структуру DMO_MEDIA_TYPE для входного типа или, если вы используете пакет SDK Media Foundation, используйте функцию MFInitMediaTypeFromVideoInfoHeader. Используйте структуру VIDEOINFOHEADER , описывающую несжатое входное содержимое. Кодек не изменяет размер видео или преобразует цветовое пространство.

  3. Задайте тип ввода с помощью IMediaObject::SetInputType или МВФTransform::SetInputType.

  4. Настройте тип вывода для кодировщика. После установки входного типа кодировщик перечисляет типы выходных данных, которые завершены, за исключением члена dwBitrate структуры VIDEOINFOHEADER или атрибута MF_MT_AVG_BITRATE интерфейса IMFMediaType. Если вы получите выходной тип перед настройкой входного типа, то у доставленной DMO_MEDIA_TYPE структуры не будет связанного VIDEOINFOHEADER.

  5. Получите частные данные кодека и добавьте его в структуру VIDEOINFOHEADER, передаваемую в структуру DMO_MEDIA_TYPE или в IMFMediaType. Дополнительные сведения см. в разделе "Использование частных данных Видеокодека".

  6. Задайте тип вывода путем вызова метода IMediaObject::SetOutputType или МВФTransform::SetOutputType. Передайте DMO_MEDIA_TYPE структуру с завершенной структурой VIDEOINFOHEADER (включая добавленные частные данные), на которую ссылается элемент pbFormat, или создайте МВФМедиаТип, вызвав MFInitMediaTypeFromVideoInfoHeader.

Примечание.

Объект видеокодировщика поддерживает два выходных данных. Второй выходной результат предназначен для кодировщика "post view". Он предоставляет несжатые образцы, так как они будут доставлены из декодера. Это позволяет отслеживать качество кодирования без необходимости ждать, пока весь поток не будет обработан. Этот вывод является необязательным. Если вы хотите использовать его, настройте его тип после того же процесса, который использовался для задания входного типа кодировщика.

Работа с видео