Capturar um arquivo DV 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.]

Um arquivo DV AVI tipo 2 tem dois fluxos, um que contém vídeo DV e outro que contém áudio. Para capturar um arquivo tipo 2 durante a visualização, use o grafo de filtro mostrado no diagrama a seguir.

Captura do tipo 2 com versão prévia

Esse grafo é quase o mesmo que o grafo para captura do tipo 1 (consulte Capturar um arquivo DV tipo 1). No entanto, o fluxo de captura passa pelo filtro divisor DV antes de atingir o filtro AVI Mux . Portanto, o AVI Mux recebe dois fluxos, um fluxo de áudio e um fluxo de vídeo codificado em DV.

Crie este grafo da seguinte maneira:

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. Crie o Divisor dv e adicione-o ao grafo de filtro.
  2. Chame ICaptureGraphBuilder2::SetOutputFileName para conectar o filtro AVI Mux ao filtro Gravador de Arquivos.
  3. Chame ICaptureGraphBuilder2::RenderStream para conectar o filtro de captura MSDV ao Divisor de DV. Essa chamada também conecta um dos pinos de saída do Divisor de DV ao AVI Mux.
  4. Chame RenderStream novamente para conectar o outro pino do Divisor de DV ao AVI Mux.
  5. Chame RenderStream uma terceira vez para renderizar o fluxo de visualização. Ignore esta etapa se não quiser visualizar o vídeo.

Vídeo digital no DirectShow