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


API кодировщика

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

API кодировщика предоставляет единый интерфейс для настройки программных и аппаратных кодировщиков. Приложения могут использовать API кодировщика для настройки кодировщика и хранения параметров конфигурации. Поставщики кодировщиков могут использовать API кодировщика для предоставления возможностей кодировщика. Хотя API кодировщика предназначен в основном для кодировщиков, он достаточно общий, что декодеры также могут поддерживать его.

API кодировщика предоставляется приложениям через интерфейс ICodecAPI , который предоставляется фильтром кодировщика. Фильтр кодировщика может быть собственным фильтром DirectShow, аппаратным кодировщиком или объектом мультимедиа DirectX (DMO).

  • Программные фильтры. Кодировщик, реализованный как собственный фильтр DirectShow, должен предоставлять ICodecAPI напрямую.
  • Аппаратные кодировщики. Устройство кодирования предоставляется через один или несколько мини-драйверов AVStream, которые представлены В пользовательском режиме с помощью KSProxy. KSProxy преобразует вызовы метода ICodecAPI в наборы свойств KS. Дополнительные сведения см. в документации по DDK.
  • DMO: DMO должен предоставлять интерфейс ICodecAPI . Приложения DirectShow могут запрашивать фильтр-оболочку DMO, который предоставляет интерфейс путем агрегирования объекта DMO. Приложения, не основанные на DirectShow, могут запрашивать DMO напрямую.

Ограничения кодировщика

Кодировщик может зарегистрировать список высокоуровневых возможностей, сохранив их в системном реестре. Каждая возможность идентифицируется по идентификатору GUID. Чтобы перечислить возможности определенного кодировщика, сделайте следующее:

  1. Создайте моникер, представляющий фильтр кодировщика. (См . раздел Использование перечислителя системных устройств.)
  2. Запросите моникер фильтра для интерфейса IGetCapabilitiesKey .
  3. Вызовите IGetCapabilitiesKey::GetCapabilitiesKey. Метод возвращает дескриптор для раздела реестра, содержащего список возможностей фильтра.
  4. Вызовите функцию RegEnumValue для перечисления значений возвращаемого ключа.

При разработке кодировщика создайте записи реестра для возможностей при регистрации фильтра. Для фильтров программного обеспечения создайте ключ с именем Capabilities , расположенный рядом с ключами FilterData и FriendlyName . Как правило, эти сведения добавляются после вызова AMovieDllRegisterServer2 для регистрации данных стандартного фильтра. Дополнительные сведения см. в разделе Регистрация фильтров DirectShow. Кроме того, можно создать раздел CapabilitiesLocation , содержащий строку, указывающую расположение раздела Capabilities в реестре. Строка должна начинаться с "HKLM\", "HKCR\" или "HKCU\", чтобы указать поддеревь реестра. Для устройств Plug and Play файлы установки драйвера должны создать ключ Capabilities рядом с ключом FriendlyName фильтра, или использовать ключ CapabilitiesLocation , как описано для фильтров программного обеспечения.

После создания ключа Capabilities создайте значение для каждого GUID возможности. Имя значения должно быть строковой формой GUID в формате {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Каждый тип значения должен иметь один из следующих значений:

  • Одно числовое значение. Используйте значение DWORD .
  • GUID. Используйте строковую форму GUID.
  • Числовые пары. Используйте строку в форме "a,b", чтобы представить пары значений, таких как ширина и высота, или числитель и знаменатель для дробей.
  • Массивы значений. Используйте многостроковые (REG_SZ_MULTI) для представления нескольких значений.

В следующем примере показан макет реестра для фильтра программного обеспечения.

\HKCR\CLSID\Filter Category\Instance\Filter CLSID\Capabilities\
    
Values: 
    
    guid1: 1234 (REG_DWORD)   
    
    guid2: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" (REG_SZ)
    
    guid3: "2","4","6" (REG_SZ_MULTI)
    
    guid4: "720,480" (REG_SZ) 

Профили кодировщиков

Профиль кодировщика — это фиксированный список параметров конфигурации, которые можно применить к кодировщику во время выполнения. Профили не зависят от кодировщика; приложение может выбрать кодировщик, затем выбрать профиль и применить параметры профиля к кодировщику. Профили идентифицируются по идентификатору GUID и должны храниться в следующем расположении в реестре:

\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\

где GUID профиля

— это строковая форма GUID, идентифицирующая профиль. Создайте значения для каждого параметра. Также создайте строковое значение с именем FriendlyName, данные которого идентифицируют профиль (например, LowBandwidthVideo).

Разработка кодировщика и декодера