다음을 통해 공유


Type-2 DV 파일 캡처

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

형식 2 DV AVI 파일에는 DV 비디오가 포함된 스트림과 오디오가 포함된 스트림이 있습니다. 미리 보는 동안 형식 2 파일을 캡처하려면 다음 다이어그램에 표시된 필터 그래프를 사용합니다.

미리 보기가 있는 type-2 캡처

이 그래프는 형식 1 캡처에 대한 그래프와 거의 동일합니다( Type-1 DV 파일 캡처 참조). 그러나 캡처 스트림은 AVI Mux 필터에 도달하기 전에 DV 분할기 필터를 통과합니다. 따라서 AVI Mux는 오디오 스트림과 DV로 인코딩된 비디오 스트림이라는 두 개의 스트림을 받습니다.

다음과 같이 이 그래프를 작성합니다.

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. DV 분할자를 만들고 필터 그래프에 추가합니다.
  2. ICaptureGraphBuilder2::SetOutputFileName을 호출하여 AVI Mux 필터를 파일 작성기 필터에 연결합니다.
  3. ICaptureGraphBuilder2::RenderStream을 호출하여 MSDV 캡처 필터를 DV 분할자에 연결합니다. 또한 이 호출은 DV 분할자의 출력 핀 중 하나를 AVI Mux에 연결합니다.
  4. RenderStream을 다시 호출하여 DV 분할자의 다른 핀을 AVI Mux에 연결합니다.
  5. RenderStream을 세 번째로 호출하여 미리 보기 스트림을 렌더링합니다. 비디오를 미리 보려면 이 단계를 건너뜁니다.

DirectShow의 디지털 비디오