Transmitir do arquivo Type-2

Para transmitir um arquivo tipo 2 durante a visualização, use o grafo de filtro mostrado no diagrama a seguir.

type-2 transmit with preview

Um arquivo tipo 2 tem dois fluxos, um fluxo de áudio e um fluxo de vídeo codificado em DV. Este 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 de AVI e ao Divisor de AVI ao DV Mux. Na primeira chamada, o Capture Graph Builder adiciona automaticamente o Divisor de 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 ao RenderStream conecta o DV Muxer ao filtro Infinite 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