Compartir a través de


Capturar un archivo DV de tipo 2

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Un archivo DV AVI de tipo 2 tiene dos secuencias, una que contiene vídeo DV y otra que contiene audio. Para capturar un archivo de tipo 2 durante la vista previa, use el gráfico de filtros que se muestra en el diagrama siguiente.

captura de tipo 2 con versión preliminar

Este gráfico es casi el mismo que el gráfico para la captura de tipo 1 (vea Capturar un archivo DV de tipo 1). Sin embargo, la secuencia de captura pasa por el filtro DIVISOR DV antes de alcanzar el filtro Mux avi . Por lo tanto, AVI Mux recibe dos secuencias, una secuencia de audio y una secuencia de vídeo codificada en DV.

Compile este grafo de la siguiente manera:

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. Cree el divisor de DV y agréguelo al gráfico de filtros.
  2. Llame a ICaptureGraphBuilder2::SetOutputFileName para conectar el filtro Mux avi al filtro File Writer.
  3. Llame a ICaptureGraphBuilder2::RenderStream para conectar el filtro de captura de MSDV al divisor de DV. Esta llamada también conecta uno de los pines de salida de DV Splitter a avi Mux.
  4. Vuelva a llamar a RenderStream para conectar el otro pin de DV Splitter a avi Mux.
  5. Llame a RenderStream una tercera vez para representar la secuencia de vista previa. Omita este paso si no desea obtener una vista previa del vídeo.

Vídeo digital en DirectShow