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. Чтобы перечислить возможности определенного кодировщика, сделайте следующее:
- Создайте моникер, представляющий фильтр кодировщика. (См . раздел Использование перечислителя системных устройств.)
- Запросите моникер фильтра для интерфейса IGetCapabilitiesKey .
- Вызовите IGetCapabilitiesKey::GetCapabilitiesKey. Метод возвращает дескриптор для раздела реестра, содержащего список возможностей фильтра.
- Вызовите функцию 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).
Связанные темы