Capturar um arquivo DV tipo 1

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído pelo MediaPlayer, IMFMediaEngine e Captura de áudio/vídeo no Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o MediaPlayer, o IMFMediaEngine e a Captura de áudio/vídeo no Media Foundation em vez do 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 AVI DV tipo 1 contém um único fluxo intercalado. Para capturar um arquivo de tipo 1 durante a visualização, use o gráfico de filtro mostrado no diagrama a seguir.

Captura tipo-1 com visualização

Os filtros neste gráfico incluem:

  • O filtro Smart Tee divide o DV intercalado em um fluxo de captura e um fluxo de visualização. Ambos os fluxos contêm os mesmos dados intercalados.
  • O AVI Mux e o File Writer gravam o fluxo intercalado no disco.
  • O DV Splitter divide o fluxo intercalado em um fluxo de vídeo DV e um fluxo de áudio. Ambos os fluxos são renderizados para visualização.
  • O decodificador de vídeo DV decodifica o fluxo de vídeo DV para visualização.

Crie este gráfico da seguinte maneira:

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

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

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

// Render the capture stream.
hr = pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved, 
    pDV, 0, pAviMux);

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

// Remember to release all interfaces.
  1. Chame ICaptureGraphBuilder2::SetOutputFileName para conectar o filtro Mux AVI ao filtro Gravador de Arquivos.
  2. Chame ICaptureGraphBuilder2::RenderStream com o PIN_CATEGORY_CAPTURE de categoria de pino para renderizar o fluxo de captura. O Capture Graph Builder insere automaticamente o filtro Smart Tee.
  3. Chame RenderStream novamente, mas com a categoria de pino PIN_CATEGORY_PREVIEW, para renderizar o fluxo de visualização. Ignore esta chamada se não quiser visualizar o vídeo.

Para ambas as chamadas para RenderStream, o tipo de mídia é MEDIATYPE_Interleaved, ou seja, vídeo DV intercalado. Nesse código, o Capture Graph Builder adiciona automaticamente todos os filtros necessários, exceto o filtro de captura MSDV.

Vídeo digital no DirectShow