Negociación de tipos de medios EVR
[El componente descrito en esta página, Representador de vídeo mejorado, es una característica heredada. Ha sido reemplazado por simple Video Renderer (SVR) expuesto a través de los componentes MediaPlayer y IMFMediaEngine. Para reproducir contenido de vídeo, debe enviar datos a uno de estos componentes y permitirles crear instancias del nuevo representador de vídeo. Estos componentes se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer o el nivel inferior IMFMediaEngine API para reproducir elementos multimedia de vídeo en Windows en lugar del EVR, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
En este tema se describe cómo el representador de vídeo mejorado (EVR) valida los tipos de medios.
Para el filtro DirectShow EVR, la negociación de tipos se produce cuando se conectan las patillas del filtro.
Para el receptor de medios EVR, los tipos de medios se establecen a través de la interfaz IMFMediaTypeHandler en los receptores de secuencias. Normalmente, el cargador de topología negocia los tipos multimedia, aunque la aplicación también puede establecer los tipos multimedia directamente.
El EVR no notifica ningún tipo de medio preferido. El cliente debe probar los tipos de medios hasta que encuentre un tipo aceptable. El tipo de medio para la secuencia de referencia debe establecerse para que los tipos se puedan establecer en cualquiera de las substreams.
Para la secuencia de referencia, el mezclador EVR obtiene una lista de formatos de destino de representación compatibles de DirectX Video Acceleration (DXVA). El moderador de EVR usa esta lista para seleccionar el formato de la cadena de intercambio de Direct3D. Si no se encuentra ningún formato de destino de representación compatible, el EVR rechaza el tipo de medio.
Para las substreams, el mezclador EVR consulta si el dispositivo DXVA admite ese formato de substream en combinación con el formato de destino de representación que se seleccionó para la secuencia de referencia. Como resultado, los formatos de substream disponibles pueden cambiar en función de la secuencia de referencia.
Este es el proceso con más detalle. Estos detalles no son importantes para la mayoría de las aplicaciones, pero puede ser útil si está escribiendo un mezclador personalizado o moderador.
Para el flujo de referencia, la negociación se produce de la siguiente manera:
El EVR llama IMFTransform::SetInputType en el mezclador.
El mezclador convierte el tipo de medio en una descripción de DXVA 2.0, utilizando la estructura DXVA2_VideoDesc.
El mezclador llama a IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids para obtener una lista de GUID del procesador de vídeo.
Para cada GUID del procesador de vídeo, el mezclador llama IDirectXVideoProcessorService::GetVideoProcessorRenderTargets para obtener los formatos de destino de representación admitidos.
El EVR llama IMFVideoPresenter::P rocessMessage en el moderador con el mensaje MFVP_MESSAGE_INVALIDATEMEDIATYPE. Este mensaje hace que el moderador seleccione un nuevo formato.
El moderador llama a IMFTransform::GetOutputAvailableType para obtener una lista de los formatos de salida disponibles del mezclador. El mezclador genera esta lista a partir de los formatos obtenidos en el paso 4.
El moderador selecciona un formato y llama a IMFTransform::SetOutputType en el mezclador.
Para substreams, el proceso es más sencillo:
El EVR llama IMFTransform::SetInputType en el mezclador.
El mezclador llama a IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats para obtener una lista de los formatos de substream disponibles.
Si el formato propuesto está incluido en esta lista, el EVR acepta el tipo de entrada.
Temas relacionados