Acquisire un file DV type-2

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine 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, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Un file DV AVI di tipo 2 include due flussi, uno che contiene video DV e un altro che contiene audio. Per acquisire un file type-2 durante l'anteprima, usare il grafico del filtro illustrato nel diagramma seguente.

acquisizione type-2 con anteprima

Questo grafico è quasi lo stesso del grafico per l'acquisizione type-1 (vedere Acquisire un file DV type-1). Tuttavia, il flusso di acquisizione passa attraverso il filtro Splitter DV prima di raggiungere il filtro AVI Mux . Avi Mux riceve quindi due flussi, un flusso audio e un flusso video con codifica DV.

Compilare questo grafico come indicato di seguito:

ICaptureGraphBuilder2 *pBuilder;  // Capture graph builder.
IBaseFilter           *pDV;       // DV capture filter (MSDV)
IBaseFilter           *pAviMux    // Avi Mux filter.
IBaseFilter           *pDVSplit;  // DV Splitter

// Initialize pDV (not shown). 
// Create and initialize the Capture Graph Builder (not shown).

// Create the DV Splitter and add it to the filter graph.
hr = CoCreateInstance(CLSID_DVSplitter, 0, CLSCTX_INPROC_SERVER,
    IID_IBaseFilter, reinterpret_cast<void**>)(&pDVSplit));
hr = pGraph->AddFilter(pDVSplit, L"DV Splitter");

// Create the file-writing section of the graph.
hr = pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,
    OLESTR("C:\\Example2.avi"), &pAviMux, 0);

// Connect the capture pin to the DV Splitter, and render one stream from
// the DV Splitter to the AVI Mux. 
hr = pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved, 
    pDV, pDVSplit, pAviMux);

// Render the other stream from the DV splitter to the AVI Mux.
hr = pBuilder->RenderStream(0, 0, pDVSplit, 0, pAviMux);

// Render the preview stream.
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Interleaved, 
    pDV, 0, 0);

// Remember to release all interfaces.
  1. Creare il splitter DV e aggiungerlo al grafico del filtro.
  2. Chiamare ICaptureGraphBuilder2::SetOutputFileName per connettere il filtro AVI Mux al filtro Writer file.
  3. Chiamare ICaptureGraphBuilder2::RenderStream per connettere il filtro di acquisizione MSDV al splitter DV. Questa chiamata connette anche uno dei pin di output di DV Splitter all'AVI Mux.
  4. Chiamare di nuovo RenderStream per connettere l'altro pin di DV Splitter all'AVI Mux.
  5. Chiamare RenderingStream una terza volta per eseguire il rendering del flusso di anteprima. Ignorare questo passaggio se non si vuole visualizzare in anteprima il video.

Video digitale in DirectShow