Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[O componente descrito nesta página, Enhanced Video Renderer, é um recurso herdado. Ele foi substituído pelo Simple Video Renderer (SVR), que está exposto através dos componentes MediaPlayer e IMFMediaEngine. Para reproduzir conteúdo de vídeo, você deve enviar dados para um desses componentes e permitir que eles instanciem o novo renderizador de vídeo. Esses componentes foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda enfaticamente que o novo código use MediaPlayer ou o nível inferior IMFMediaEngine APIs para reproduzir mídia de vídeo no Windows em vez do EVR, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
A interfaceIMFVideoDisplayControlcontrola como o renderizador de vídeo aprimorado (EVR) exibe vídeo dentro de uma janela do aplicativo. Essa interface pode ser usada no DirectShow ou no Media Foundation. Internamente, os controles de exibição de vídeo são fornecidos pelo apresentador padrão do EVR. Se você escrever um apresentador personalizado, poderá fornecer a mesma interface ou definir uma interface personalizada.
A maneira correta de obter um ponteiro para a interface IMFVideoDisplayControl depende de se estás a usar a versão DirectShow do EVR ou a versão Media Foundation. Para o Media Foundation EVR, também depende se está a usar o EVR diretamente ou a utilizá-lo através da Media Session (que é mais típico).
Para obter um ponteiro para a interface IMFVideoDisplayControl, faça o seguinte:
Obtenha um ponteiro para a interface IMFGetService.
Se estiveres a usar o filtro EVR DirectShow, invoca QueryInterface no filtro.
Se você estiver usando o coletor de mídia EVR diretamente, chame QueryInterface no coletor de mídia.
Caso esteja a utilizar a Sessão de Mídia, execute QueryInterface na Sessão de Mídia.
Se estiveres a usar a Sessão de Multimédia, aguarda até que a Sessão de Multimédia envie o evento MESessionTopologyStatus com um valor de estado de MF_TOPOSTATUS_READY. (Ignore esta etapa caso contrário.)
Ligue IMFGetService::GetService para obter o interface de IMFVideoDisplayControl. O identificador de serviço é MR_VIDEO_RENDER_SERVICE.
Você pode usar o IMFVideoDisplayControl interface para executar as seguintes tarefas:
Defina a janela de recorte.
Defina os retângulos de origem e destino.
Atualize a janela de vídeo em resposta às mensagens da janela.
Ative ou desative o modo de tela cheia.
Janela de recorte
O aplicativo deve fornecer uma janela onde o EVR desenha o vídeo. Para definir a janela de recorte, chame IMFVideoDisplayControl::SetVideoWindow com um identificador para a janela do aplicativo.
Caso crie o coletor de mídia EVR através do objeto de ativação, esta etapa não será necessária. O objeto de ativação chama automaticamente a função SetVideoWindow, usando o identificador de janela que você forneceu na função MFCreateVideoRendererActivate.
Retângulos de origem e destino
Durante a reprodução, o apresentador pega uma parte da imagem de vídeo composta e a desenha em uma área da janela de vídeo. A parte da imagem composta é o retângulo de origem e a área da janela de vídeo é o retângulo de destino .
O retângulo de origem é definido usando coordenadas normalizadas onde o ponto (0.0, 0.0) corresponde ao canto superior esquerdo do vídeo, e (1.0, 1.0) corresponde ao canto inferior direito do vídeo. O retângulo de origem pode ser qualquer região dentro deste retângulo. O retângulo de destino é especificado em pixels, em relação à área do cliente da janela. O retângulo de origem padrão é a imagem inteira e o retângulo de destino padrão é um retângulo vazio.
Para definir os retângulos de origem e destino, chame IMFVideoDisplayControl::SetVideoPosition.
Caso cries o coletor de mídia EVR através do seu objeto de ativação, esta etapa não será necessária. O objeto de ativação define automaticamente o retângulo de destino igual a toda a área cliente da janela. No entanto, você deve chamar SetVideoPosition se quiser alterar o retângulo de origem ou definir um retângulo de destino diferente.
Mensagens da janela
Durante a reprodução, seu aplicativo deve responder a determinadas mensagens de janela, da seguinte maneira:
WM_PAINT: Chame IMFVideoDisplayControl::RepaintVideo para repintar o vídeo. Além disso, evite pintar sobre o retângulo de destino durante a reprodução do vídeo, pois isso pode causar cintilação.
WM_SIZE: Talvez seja necessário chamar SetVideoPosition para redimensionar o retângulo de destino.
Ao contrário do filtro VMR (Video Mixing Renderer) no DirectShow, não é necessário notificar o EVR quando receber uma mensagem WM_DISPLAYCHANGE.
Tópicos relacionados