Использование фильтра 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 для получения указателей на эти интерфейсы:
- IAMCertifiedOutputProtection (DirectShow)
- IAMFilterMiscFlags (DirectShow)
- IBaseFilter (DirectShow)
- IEVRFilterConfig
- IKsPropertySet (DirectShow)
- IMediaEventSink (DirectShow)
- IMFGetService
- IMFVideoPositionMapper
- МВФ Видеорендерер
- IPersistStream
- IQualityControl (DirectShow)
- IQualProp (DirectShow)
- ISpecifyPropertyPages
Интерфейсы входных пинов
Входные контакты на фильтре EVR имеют следующие интерфейсы. Используйте QueryInterface для получения указателей на эти интерфейсы:
- IEVRVideoStreamControl
- IMemInputPin (DirectShow)
- IMFGetService
- IPin (DirectShow)
- IQualityControl (DirectShow)
Кроме того, с помощью интерфейса IMFGetService можно получить следующий интерфейс:
Связанные разделы