Передача из файла типа 2

Чтобы передать файл типа 2 при предварительном просмотре, используйте граф фильтров, показанный на следующей схеме.

type-2 transmit with preview

Файл типа 2 содержит два потока, один аудиопоток и один видеопоток в кодировке DV. Этот граф использует фильтр мультиплексора DV для объединения аудио- и видеопотоков. Он отправляет чередованный поток в фильтр 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. В первом вызове построитель записи Graph автоматически добавляет разделитель AVI в граф и подключает один из выходных контактов разделителя AVI к мультиплексу DV. Во втором вызове построитель записи Graph находит второй выходной пин-код разделителя AVI и подключает его к мультиплексу DV.

Третий вызов RenderStream подключает мультиплексер DV к фильтру Infinite Pin Tee. Следующий вызов подключает один поток из бесконечного тройника к фильтру записи MSDV. Этот поток передается на устройство. Последний вызов RenderStream создает предварительный просмотр раздела графа.

Если во время передачи не требуется предварительный просмотр, можно опустить бесконечный тройник пин-кода и просто подключить мультиплекс DV к фильтру MSDV:

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

Цифровое видео в DirectShow