Согласование типов мультимедиа для кодировщика
В Microsoft Media Foundation кодировщики реализуются как Media Foundation преобразует (MFTs) с одним входным и одним выходом. Перед сеансом кодирования кодировщик должен знать характеристики потока, который он получит в качестве входных данных, и формат потока, который он будет производить в качестве выходных данных. Перед передачей данных через кодировщик необходимо задать типы входных и выходных носителей и связанные характеристики. Необходимо указать форматы входных и выходных данных, указав соответствующие идентификаторы guid типа мультимедиа и задать характеристики выходного потока, задав соответствующие атрибуты типа мультимедиа в типе выходного носителя. У недавно созданного кодировщика нет наборов типов носителей.
Тип носителя ввода — это несжатый формат, например звук PCM или RGB-видео. Типы форматов, используемые кодировщиком, ограничены теми, которые описаны VIDEOINFOHEADER и структурах WAVEFORMATEX. Дополнительные сведения об этих структурах см. в документации по пакету SDK для Windows. Media Foundation предоставляет вспомогательные функции для создания типов мультимедиа из структур формата. Например, функция MFInitMediaTypeFromVideoInfoHeader инициализирует тип видео из структуры VIDEOINFOHEADER, а функция MFInitMediaTypeFromWaveFormatEx инициализирует тип видео из WAVEFORMATEX или структуры WAVEFORMATEXTIBLE. Дополнительные сведения см. в преобразования типов мультимедиа. Для кодировщика необходимо задать тип входного носителя, вызвав IMFTransform::SetInputType.
Тип выходного носителя — это формат сжатия, используемый в окончательном исходном потоке или файле. Можно задать доступный тип носителя выходных данных только после задания входного типа носителя. Поддерживаемые типы выходных данных можно получить, вызвав IMFTransform::GetOutputAvailableType в цикле, пока кодировщик не вернет MF_E_NO_MORE_TYPES. Добавим индекс типа с каждой итерацией. При поиске соответствующего типа носителя задайте тип выходных носителей, вызвав IMFTransform::SetOutputType.
Выбор выходного типа носителя зависит от типа кодирования и требований к кодировке. Например, для аудиопотоков, закодированных в кодировке CBR, необходимо найти тип носителя, соответствующий входным данным, и имеет скорость передачи данных, которая максимально близка к целевому значению.
Если вы хотите использовать режим кодирования, отличный от CBR, необходимо задать режим, а затем перечислить типы выходных данных для этого режима, так как кодировщик изменяет поддерживаемые типы выходных данных в зависимости от набора режимов. Свойства, управляющие режимом кодирования, MFPKEY_VBRENABLED и MFPKEY_PASSESUSED. Например, если вы перечисляете типы выходных данных для кодирования качества VBR, тип носителя зависит от значения качества, которое вы решили использовать. Сведения о настройке этих свойств см. в разделе Свойства кодирования.
Связанные разделы