Trasmettere dal file di tipo 2

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Per trasmettere un file di tipo 2 durante l'anteprima, usare il grafico del filtro illustrato nel diagramma seguente.

trasmissione di tipo 2 con anteprima

Un file di tipo 2 ha due flussi, un flusso audio e un flusso video con codifica DV. Questo grafico usa il filtro DV Muxer per combinare i flussi audio e video. Invia il flusso interleaved al filtro MSDV, ma suddivide nuovamente il flusso per l'anteprima.

Compilare questo grafico come segue:

// 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);

Questo codice effettua diverse chiamate a RenderStream:

I primi due collegano il filtro di origine a AVI Splitter e avi Splitter al Mux DV. Nella prima chiamata, Capture Graph Builder aggiunge automaticamente avi Splitter al grafico e connette uno dei pin di output di AVI Splitter al Mux DV. Nella seconda chiamata, Capture Graph Builder trova il secondo pin di output di AVI Splitter e lo connette al Mux DV.

La terza chiamata a RenderStream connette il Muxer DV al filtro Tee pin infinito. La chiamata successiva connette un flusso dal tee pin infinito al filtro di acquisizione MSDV. Questo flusso viene trasmesso al dispositivo. L'ultima chiamata a RenderStream compila la sezione di anteprima del grafico.

Se non si vuole visualizzare l'anteprima durante la trasmissione, è possibile omettere il tee pin infinito e semplicemente connettere il Mux DV al filtro MSDV:

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

Video digitale in DirectShow