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


Реализация кодеков

Кодеки Windows Media Audio и Video реализованы в виде COM-объектов. Как правило, кодек реализуется как пара ОБЪЕКТОВ COM: один для кодировщика и один для декодера. Кодировщик имеет идентификатор класса (CLSID), а декодер — другой идентификатор CLSID. Например, часть кодировщика в кодеке Windows Media Audio 9 имеет идентификатор CLSID, представленный константой CLSID_CWMAEncMediaObject, а часть декодера этого же кодека имеет идентификатор CLSID, представленный константой CLSID_CWMADecMediaObject.

В некоторых случаях в один COM-объект включается несколько кодировщиков. Например, кодировщик Windows Media Video 9 и windows Media Video 9.1 являются частью одного COM-объекта. Следовательно, они оба имеют один и тот же идентификатор CLSID, который представлен константой CLSID_CWMV9EncMediaObject. Аналогичным образом некоторые COM-объекты включают несколько декодировщиков.

Каждый объект кодировщика или декодера предоставляет интерфейс IMediaObject , чтобы объект можно было использовать в качестве объекта мультимедиа DirectX (DMO) и интерфейса IMFTransform , чтобы объект можно было использовать в качестве преобразования Media Foundation (MFT).

Для большинства кодировщиков, независимо от того, используется ли кодировщик как DMO или MFT, для создания экземпляра кодировщика используется тот же идентификатор CLSID. Например, чтобы создать экземпляр кодировщика Windows Media Video 9, используйте CLSID_CWMV9EncMediaObject, независимо от того, планируете ли вы использовать кодировщик в качестве DMO или MFT. Аналогично, для большинства декодеров каждый декодер имеет один идентификатор CLSID, независимо от того, используется ли декодер в качестве DMO или MFT.

Примечание

Существует ряд исключений из предыдущей инструкции, касающийся использования одного идентификатора CLSID как для DMO, так и для MFT. Например, декодер MPEG-4, часть 2, имеет один идентификатор CLSID, если он выступает в качестве DMO, и другой ИДЕНТИФИКАТОР CLSID, когда он выступает в качестве MFT.

 

Помимо основных интерфейсов, каждый кодировщик или объект декодера реализует два похожих интерфейса для работы со свойствами кодека : IPropertyBag и IPropertyStore. В более старых версиях объектов кодировщика и декодера использовался интерфейс IPropertyBag, который идентифицирует каждое свойство по строковому значению, содержая имя свойства. IPropertyStore — это новый интерфейс, который идентифицирует свойства с уникальным значением ключа свойства. Добавлена поддержка IPropertyStore для поддержки MFT. Большинство строк имен свойств IPropertyBag имеют соответствующий GUID ключа свойства IPropertyStore , а большинство идентификаторов GUID имеют соответствующую строку имени IPropertyBag , за несколькими исключениями.

В этой документации перечислены свойства по константе ключа свойства, но каждая запись содержит строковую константу property-name для использования с IPropertyBag , когда это необходимо.

Кодеки Windows Media