형식 2 파일에서 전송

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

type-2 transmit with preview

형식 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에 연결합니다. 첫 번째 호출에서 Capture Graph Builder는 그래프에 AVI 분할자를 자동으로 추가하고 AVI Splitter의 출력 핀 중 하나를 DV Mux에 연결합니다. 두 번째 호출에서 Capture Graph Builder는 AVI Splitter의 두 번째 출력 핀을 찾아서 DV Mux에 연결합니다.

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

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

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

DirectShow의 디지털 비디오