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 pBuild foi inicializado, conforme descrito em Sobre o Construtor de Gráficos de Captura.
- O pCap foi inicializado criando uma instância do filtro de captura e adicionando-a ao grafo de filtro, conforme descrito em Selecionando um dispositivo de captura.
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.
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.
Tópicos relacionados