Visualizando vídeo (DirectShow)

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, 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.]

Para criar um grafo de visualização de vídeo, chame o método ICaptureGraphBuilder2::RenderStream da seguinte maneira:

ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder
// Initialize pBuild (not shown).

IBaseFilter *pCap; // Video capture filter.

/* Initialize pCap and add it to the filter graph (not shown). */

hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
    pCap, NULL, NULL);

Este exemplo pressupõe o seguinte:

O primeiro parâmetro para o método ICaptureGraphBuilder2::RenderStream especifica uma categoria de pino; para um grafo de visualização, use PIN_CATEGORY_PREVIEW. O segundo parâmetro especifica um tipo de mídia, como um GUID de tipo principal. Para vídeo, use MEDIATYPE_Video. Os dispositivos DV fornecem áudio e vídeo intercalados, para os quais o tipo de mídia é MEDIATYPE_Interleaved. (Para obter mais informações sobre a captura de DV, consulte Vídeo digital no DirectShow.)

O terceiro parâmetro é um ponteiro para a interface IBaseFilter do filtro de captura. Os próximos dois parâmetros não são necessários neste exemplo. Eles são usados para especificar filtros adicionais que podem ser necessários para renderizar o fluxo. Definir o último parâmetro como NULL faz com que o Capture Graph Builder selecione um renderizador padrão para o fluxo, com base no tipo de mídia. Para vídeo, o Capture Graph Builder sempre usa o filtro Do Renderizador de Vídeo como o renderizador padrão.

Observação

No Windows XP e posterior, embora o Renderizador de Combinação de Vídeo (VMR) seja o renderizador de vídeo padrão para métodos IGraphBuilder , ele não é o renderizador padrão para o método RenderStream . Em qualquer plataforma, o Capture Graph Builder sempre usa o filtro antigo do Renderizador de Vídeo, a menos que você especifique o contrário.

 

Embora a categoria de pino seja fornecida como PIN_CATEGORY_PREVIEW, não importa se o filtro realmente tem um pino de visualização; ele pode ter um pino de porta de vídeo ou apenas um pino de captura. Em ambos os casos, o Capture Graph Builder compila automaticamente o grafo correto.

O diagrama a seguir mostra o grafo mais simples possível para visualizar o vídeo.

grafo de visualização de vídeo

Neste diagrama, o filtro de captura tem um pin de visualização, que se conecta diretamente ao renderizador de vídeo.

Se o filtro de captura tiver apenas um pino de captura, o Construtor de Gráficos de Captura inserirá um filtro Smart Tee , que dividirá o fluxo em um fluxo de captura e em um fluxo de visualização. Isso é descrito mais detalhadamente em Combinando Captura de Vídeo e Visualização.

Em alguns casos, o fluxo de vídeo deve passar pelo filtro Mixer de Sobreposição. Nesse caso, o método RenderStream o adiciona automaticamente ao grafo.

Combinando captura e visualização de vídeo

Captura de vídeo