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


Использование фильтра EVR DirectShow

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

Чтобы создать расширенный фильтр отрисовщика видео (EVR), вызовите CoCreateInstance. CLSID определен как CLSID_EnhancedVideoRenderer в файле uuids.h. Вам не нужно вызывать MFStartup или MFShutdown для использования фильтра EVR.

Дополнительные сведения об использовании фильтра EVR в приложении DirectShow см. в разделе воспроизведение звука и видео в DirectShow.

Фильтр EVR начинает с одного входного пиновхода, соответствующего эталонному потоку. Чтобы добавить пин-коды для вложенных потоков, запросите фильтр для интерфейса IEVRFilterConfig и вызовите IEVRFilterConfig::SetNumberOfStreams. Вызовите этот метод перед подключением любых входных контактов. Пин 0 всегда является эталонным потоком. Подключите этот пин перед другими пинами, так как формат исходного потока может ограничить поддерживаемые форматы подпотоков.

Перед запуском графа задайте окно вырезки видео и прямоугольник назначения. Дополнительные сведения см. в разделе "Использование элементов управления отображением видео".

В отличие от диспетчера смешивания видео (VMR), EVR не имеет операционных режимов (оконные, безоконные и т. д.). В частности:

  • EVR не поддерживает режим окна. Приложение должно предоставить окно вырезки.
  • EVR не имеет безрежимного режима отрисовки. Чтобы заменить презентер по умолчанию, вызовите IMFVideoRenderer::InitializeRenderer.
  • EVR не имеет режима смешивания. EVR всегда создает миксер. Если у вас есть один входной поток, не нужно вызывать SetNumberOfStreams, чтобы принудительно использовать микшер EVR.

Интерфейсы фильтров

Фильтр EVR предоставляет следующие интерфейсы. Некоторые из этих интерфейсов описаны в пакете SDK DirectShow. Используйте QueryInterface для получения указателей на эти интерфейсы:

Интерфейсы входных пинов

Входные контакты на фильтре EVR имеют следующие интерфейсы. Используйте QueryInterface для получения указателей на эти интерфейсы:

Кроме того, с помощью интерфейса IMFGetService можно получить следующий интерфейс:

Воспроизведение аудио/видео в DirectShow

улучшенный рендерер видео