Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Компонент, описанный на этой странице, расширенный отрисовщик видео, является устаревшей функцией. Он был заменен простым отрисовщиком видео (SVR), предоставляемого через компоненты MediaPlayer и IMFMediaEngine. Чтобы воспроизвести видеоконтент, необходимо отправить данные в один из этих компонентов и разрешить им создать экземпляр нового видеорендерера. Эти компоненты оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует по возможности использовать новый код на основе MediaPlayer или более низкоуровневые API IMFMediaEngine для воспроизведения видео в Windows вместо EVR. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Интерфейс IMFVideoDisplayControl управляет тем, как усовершенствованный видеорендерер (EVR) отображает видео в окне приложения. Этот интерфейс можно использовать в DirectShow или Media Foundation. Внутренние элементы управления отображением видео обеспечиваются стандартным управляющим элементом EVR. При создании пользовательского представления можно использовать тот же интерфейс или определить пользовательский интерфейс.
Правильный способ получить указатель на интерфейс IMFVideoDisplayControl зависит от того, используете ли вы версию DirectShow EVR или Media Foundation. Для Media Foundation EVR это также зависит от того, используете ли вы EVR напрямую или через мультимедийную сессию (что более типично).
Чтобы получить указатель на интерфейс IMFVideoDisplayControl, сделайте следующее:
Получите указатель на интерфейс IMFGetService.
Если вы используете фильтр DirectShow EVR, вызовите QueryInterface в фильтре.
Если вы используете приемник мультимедиа EVR напрямую, вызовите QueryInterface в приемнике мультимедиа.
Если вы используете сеанс мультимедиа, вызовите QueryInterface на сеансе мультимедиа.
Если вы используете сеанс мультимедиа, дождитесь, пока сеанс мультимедиа отправит событие MESessionTopologyStatus со значением состояния MF_TOPOSTATUS_READY. (Пропустить этот шаг в противном случае.)
Вызовите IMFGetService::GetService, чтобы получить интерфейс IMFVideoDisplayControl. Идентификатор службы MR_VIDEO_RENDER_SERVICE.
Для выполнения следующих задач можно использовать интерфейс IMFVideoDisplayControl:
Задайте окно вырезки.
Задайте прямоугольники источника и назначения.
Обновите окно видео в ответ на сообщения окна.
Включение или отключение полноэкранного режима.
Окно обрезки
Приложение должно предоставить окно, в котором EVR рисует видео. Чтобы задать окно кадрирования, вызовите IMFVideoDisplayControl::SetVideoWindow с указателем на окно приложения.
Если вы создаете медиаприемник EVR через его объект активации, то этот шаг не требуется. Объект активации автоматически вызывает SetVideoWindowс помощью дескриптора окна, предоставленного в функции MFCreateVideoRendererActivate.
Исходные и конечные прямоугольники
Во время воспроизведения выступающий принимает часть составного изображения видео и рисует его на область окна видео. Часть составного изображения — это исходный прямоугольник, а область окна видео — прямоугольник назначения.
Исходный прямоугольник определяется с помощью нормализованных координат, где точка (0.0, 0.0) соответствует верхнему левому углу видео, а (1.0, 1.0) соответствует нижнему правому углу видео. Исходный прямоугольник может быть любым регионом в этом прямоугольнике. Прямоугольник назначения указывается в пикселях относительно клиентской области окна. Исходный прямоугольник по умолчанию — это весь образ, а прямоугольник назначения по умолчанию — пустой прямоугольник.
Чтобы задать прямоугольники источника и назначения, используйте вызов IMFVideoDisplayControl::SetVideoPosition.
Если вы создаете медиасинк EVR через его объект активации, этот шаг не требуется. Объект активации автоматически задает прямоугольник назначения, равный всей клиентской области окна. Однако необходимо вызвать SetVideoPosition, если вы хотите изменить исходный прямоугольник или задать другой прямоугольник назначения.
Сообщения окна
Во время воспроизведения приложение должно отвечать на определенные сообщения окна следующим образом:
WM_PAINT: вызовите IMFVideoDisplayControl::RepaintVideo, чтобы перерисовать видео. Кроме того, избегайте закрашивания целевого прямоугольника во время воспроизведения видео, так как это может привести к мерцанию.
WM_SIZE. Для изменения размера целевого прямоугольника может потребоваться вызвать SetVideoPosition.
В отличие от фильтра "видеомикшер" (VMR) в DirectShow, вам не нужно уведомлять EVR при получении сообщения WM_DISPLAYCHANGE.
Связанные разделы