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


Согласование типов мультимедиа в кодировщике

В Microsoft Media Foundation кодировщики реализуются как преобразования Media Foundation (MFT) с одним входом и одним выходом. Перед сеансом кодирования кодировщику необходимо знать характеристики потока, который он получит в качестве входных данных, и формат потока, который будет создаваться в качестве выходных данных. Перед передачей данных через кодировщик необходимо задать типы входных и выходных носителей и связанные характеристики. Необходимо указать форматы входных и выходных данных, указав соответствующие GUID типа мультимедиа и задав характеристики выходного потока, задав соответствующие атрибуты типа мультимедиа для выходного типа мультимедиа. Новый экземпляр кодировщика не имеет заданных типов мультимедиа.

Тип входного носителя — это несжатый формат, например звук PCM или RGB-видео. Типы форматов, используемые кодировщиком, ограничены теми, которые описаны в структурах VIDEOINFOHEADER и WAVEFORMATEX . Дополнительные сведения об этих структурах см. в документации по windows SDK. Media Foundation предоставляет вспомогательные функции для создания типов мультимедиа из структур форматирования. Например, функция MFInitMediaTypeFromVideoInfoHeader инициализирует тип видео из структуры VIDEOINFOHEADER , а функция MFInitMediaTypeFromWaveFormatEx инициализирует тип видео из структуры WAVEFORMATEX или WAVEFORMATEXTENSIBLE . Дополнительные сведения см. в разделе Преобразования типов мультимедиа. Тип входного носителя необходимо задать в кодировщике, вызвав IMFTransform::SetInputType.

Тип выходного носителя — это формат сжатия, используемый в конечном исходном потоке или файле. Доступный тип выходного носителя можно задать только после установки типа входного носителя. Поддерживаемые типы выходных данных можно получить, вызвав IMFTransform::GetOutputAvailableType в цикле, пока кодировщик не вернет MF_E_NO_MORE_TYPES. Приумножение индекса типа с каждой итерацией. Когда вы найдете соответствующий тип носителя, задайте тип выходного носителя, вызвав IMFTransform::SetOutputType.

Решающий фактор при выборе типа выходного носителя зависит от типа кодирования и требований к кодировке. Например, для аудиопотоков в кодировке CBR требуется найти тип мультимедиа, соответствующий входным данным и имеющий скорость передачи, максимально приближенную к целевому значению.

Если вы хотите использовать режим кодирования, отличный от CBR, необходимо задать этот режим, а затем перечислить типы выходных данных для этого режима, так как кодировщик изменяет поддерживаемые типы выходных данных в зависимости от заданного режима. Свойства, управляющие режимом кодирования , MFPKEY_VBRENABLED и MFPKEY_PASSESUSED. Например, при перечислении типов выходных данных для кодирования качества VBR тип мультимедиа зависит от значения качества, которое вы решили использовать. Сведения о настройке этих свойств см. в разделе Свойства кодирования.

Создание экземпляра кодировщика MFT

Кодировщики Windows Media