Согласование типов мультимедиа EVR
[Компонент, описанный на этой странице, Расширенный отрисовщик видео — это устаревшая функция. Он был заменен простой отрисовщик видео (SVR), предоставляемый через компоненты MediaPlayer и IMFMediaEngine . Чтобы воспроизвести видеоконтент, необходимо отправить данные в один из этих компонентов и разрешить им создать экземпляр нового отрисовщика видео. Эти компоненты оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer или БОЛЕЕ низкий уровень API IMFMediaEngine для воспроизведения видеотрансляции в Windows вместо EVR, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
В этом разделе описывается, как расширенный отрисовщик видео (EVR) проверяет типы носителей.
Для фильтра DirectShow EVR согласование типов происходит при подключении закреплений фильтра.
Для приемника мультимедиа EVR типы мультимедиа задаются через интерфейс IMFMediaTypeHandler на приемниках потоков. Как правило, загрузчик топологии согласовывает типы носителей, хотя приложение также может задавать типы носителей напрямую.
EVR не сообщает о предпочитаемых типах носителей. Клиент должен тестировать типы носителей, пока он не найдет допустимый тип. Тип носителя для ссылочного потока должен быть задан до того, как типы можно задать на любом из подпотоков.
Для эталонного потока миксер EVR получает список совместимых форматов целевых форматов визуализации DirectX Video Acceleration (DXVA). Ведущий EVR использует этот список для выбора формата для цепочки буферов Direct3D. Если не найден совместимый формат целевого объекта отрисовки, EVR отклоняет тип носителя.
Для подпотоков средство смешивания EVR запрашивает, поддерживает ли устройство DXVA этот формат подпотока в сочетании с целевым форматом отрисовки, выбранным для эталонного потока. В результате доступные форматы подпотоков могут изменяться в зависимости от ссылочного потока.
Ниже приведен процесс более подробно. Эти сведения не важны для большинства приложений, но могут оказаться полезными, если вы пишете пользовательский миксер или выступающий.
Для ссылочного потока согласование выполняется следующим образом:
EVR вызывает МВФTransform::SetInputType на миксере.
Миксер преобразует тип носителя в описание DXVA 2.0 с помощью структуры DXVA2_VideoDesc.
Миксер вызывает IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids , чтобы получить список графических идентификаторов графического интерфейса обработчика видео.
Для каждого GUID видеопроцессора миксер вызывает IDirectXVideoProcessorService::GetVideoProcessorRenderTargets , чтобы получить поддерживаемые целевые форматы отрисовки.
EVR вызывает МВФVideoPresenter::P rocessMessage на докладчика с сообщением MFVP_MESSAGE_INVALIDATEMEDIATYPE. Это сообщение приводит к тому, что выступающий выберет новый формат.
Выступающий вызывает IMFTransform::GetOutputAvailableType , чтобы получить список доступных форматов выходных данных из миксера. Миксер создает этот список из форматов, полученных на шаге 4.
Выступающий выбирает формат и вызывает МВФTransform::SetOutputType в миксере.
Для подпотоков процесс проще:
EVR вызывает МВФTransform::SetInputType на миксере.
Миксер вызывает IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats , чтобы получить список доступных форматов подпотоков.
Если предлагаемый формат содержится в этом списке, EVR принимает входной тип.
См. также