Compartilhar via


Transmitir do arquivo Tipo 2

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na 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 Captura de Áudio/Vídeo no 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 transmitir um arquivo tipo 2 durante a visualização, use o grafo de filtro mostrado no diagrama a seguir.

transmissão type-2 com versão prévia

Um arquivo tipo 2 tem dois fluxos, um fluxo de áudio e um fluxo de vídeo codificado em DV. Esse grafo usa o filtro DV Muxer para combinar os fluxos de áudio e vídeo. Ele envia o fluxo intercalado para o filtro MSDV, mas divide o fluxo novamente para visualização.

Crie este grafo da seguinte maneira:

// Add the DV Mux filter to the graph.
IBaseFilter *pDVMux;
hr = CoCreateInstance(CLSID_DVMux, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pDVMux));
hr = pGraph->AddFilter(pDVMux, L"DV Mux");

// Add the File Source filter to the graph.
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(L"C:\\Example2.avi", L"Source", 
    &pFileSource);

hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);

// Add the Infinite Pin Tee filter to the graph.
IBaseFilter *pTee;
hr = CoCreateInstance(CLSID_InfTee, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pTee));
hr = pGraph->AddFilter(pTee, L"Tee");

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pTee);
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pTee, 0, 0);

Esse código faz várias chamadas para RenderStream:

Os dois primeiros conectam o filtro de origem ao Divisor AVI e ao Divisor AVI ao DV Mux. Na primeira chamada, o Capture Graph Builder adiciona automaticamente o Divisor AVI ao grafo e conecta um dos pinos de saída do Divisor de AVI ao DV Mux. Na segunda chamada, o Capture Graph Builder localiza o segundo pino de saída do Divisor de AVI e conecta-o ao DV Mux.

A terceira chamada para RenderStream conecta o DV Muxer ao filtro Infinito Pin Tee. A próxima chamada conecta um fluxo do Infinito Pin Tee ao filtro de captura MSDV. Esse fluxo é transmitido para o dispositivo. A última chamada para RenderStream cria a seção de visualização do grafo.

Se você não quiser visualizar durante a transmissão, poderá omitir o Infinite Pin Tee e simplesmente conectar o DV Mux ao filtro MSDV:

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);

Vídeo digital no DirectShow