다음을 통해 공유


Type-2 파일에서 전송

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

미리 보는 동안 형식 2 파일을 전송하려면 다음 다이어그램에 표시된 필터 그래프를 사용합니다.

미리 보기로 type-2 전송

형식 2 파일에는 오디오 스트림 1개와 DV로 인코딩된 비디오 스트림 1개 등 두 개의 스트림이 있습니다. 이 그래프는 DV Muxer 필터를 사용하여 오디오 및 비디오 스트림을 결합합니다. 인터리브된 스트림을 MSDV 필터로 보내지만 미리 보기용으로 스트림을 다시 분할합니다.

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

// Add the DV Mux filter to the graph.
IBaseFilter *pDVMux;
hr = CoCreateInstance(CLSID_DVMux, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pDVMux));
hr = pGraph->AddFilter(pDVMux, L"DV Mux");

// Add the File Source filter to the graph.
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(L"C:\\Example2.avi", L"Source", 
    &pFileSource);

hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);

// Add the Infinite Pin Tee filter to the graph.
IBaseFilter *pTee;
hr = CoCreateInstance(CLSID_InfTee, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pTee));
hr = pGraph->AddFilter(pTee, L"Tee");

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pTee);
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pTee, 0, 0);

이 코드는 RenderStream을 여러 차례 호출합니다.

처음 두 가지는 원본 필터를 AVI 분할기와 AVI 분할자를 DV Mux에 연결합니다. 첫 번째 호출에서 캡처 Graph Builder는 그래프에 AVI 분할기를 자동으로 추가하고 AVI 분할자의 출력 핀 중 하나를 DV Mux에 연결합니다. 두 번째 호출에서 캡처 Graph Builder는 AVI 분할자의 두 번째 출력 핀을 찾아 DV Mux에 연결합니다.

RenderStream에 대한 세 번째 호출은 DV Muxer를 무한 핀 티 필터에 연결합니다. 다음 호출은 무한 핀 티의 한 스트림을 MSDV 캡처 필터에 연결합니다. 이 스트림은 디바이스로 전송됩니다. RenderStream에 대한 마지막 호출은 그래프의 미리 보기 섹션을 빌드합니다.

전송하는 동안 미리 보기하지 않으려면 무한 핀 티를 생략하고 DV Mux를 MSDV 필터에 연결하면 됩니다.

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);

DirectShow의 디지털 비디오