Сведения о типах мультимедиа (Microsoft Media Foundation)

Тип мультимедиа описывает формат потока мультимедиа. В Microsoft Media Foundation типы мультимедиа представлены интерфейсом IMFMediaType . Этот интерфейс наследует интерфейс IMFAttributes . Сведения о типе мультимедиа указываются в виде атрибутов.

Чтобы создать новый тип мультимедиа, вызовите функцию MFCreateMediaType . Эта функция возвращает указатель на интерфейс IMFMediaType . Тип мультимедиа изначально не имеет атрибутов. Чтобы задать сведения о формате, задайте соответствующие атрибуты.

Список атрибутов типа мультимедиа см. в разделе Атрибуты типа мультимедиа.

Основные типы и подтипы

Два важных элемента информации для любого типа мультимедиа: основной тип и подтип.

  • Основным типом является GUID, определяющий общую категорию данных в потоке мультимедиа. К основным типам относятся видео и аудио. Чтобы указать основной тип, задайте атрибут MF_MT_MAJOR_TYPE . Метод IMFMediaType::GetMajorType возвращает значение этого атрибута.
  • Подтип дополнительно определяет формат. Например, в основном типе видео есть подтипы ДЛЯ RGB-24, RGB-32, YUY2 и т. д. Внутри звука есть звук PCM, звук с плавающей запятой IEEE и другие. Подтип предоставляет больше сведений, чем основной тип, но не определяет все сведения о формате. Например, подтипы видео не определяют размер изображения или частоту кадров. Чтобы указать подтип, задайте атрибут MF_MT_SUBTYPE .

Все типы мультимедиа должны иметь guid основного типа и GUID подтипа. Список идентификаторов GUID основных типов и подтипов см. в разделе Идентификаторы GUID типов мультимедиа.

Почему атрибуты?

Атрибуты имеют несколько преимуществ по сравнению со структурами форматирования, которые использовались в предыдущих технологиях, таких как DirectShow и пакет SDK для формата Windows Media.

  • Проще представить значения "не знаю" или "не волнуйтесь". Например, если вы пишете преобразование видео, вы можете заранее знать, какие форматы RGB и YUV поддерживает преобразование, но не размеры видеокадра, пока вы не получите их из источника видео. Точно так же вас могут не беспокоить некоторые детали, такие как первичные видео. При использовании структуры формата каждый элемент должен быть заполнен каким-то значением. В результате стало обычным использовать ноль для указания неизвестного значения или значения по умолчанию. Эта практика может привести к ошибкам, если другой компонент рассматривает ноль как допустимое значение. При использовании атрибутов можно просто опустить атрибуты, которые неизвестны или не относятся к компоненту.

  • Поскольку требования со временем менялись, структуры форматирования были расширены путем добавления дополнительных данных в конце структуры. Например, WAVEFORMATEXTENSIBLE расширяет структуру WAVEFORMATEX . Эта практика подвержена ошибкам, так как компоненты должны приводить указатели структуры к другим типам структур. Атрибуты можно безопасно расширять.

  • Определены взаимоисключаемые структуры формата. Например, DirectShow определяет структуры VIDEOINFOHEADER и VIDEOINFOHEADER2 . Атрибуты задаются независимо друг от друга, поэтому эта проблема не возникает.

Атрибуты типа мультимедиа

Типы носителей