Передача из файла Type-2
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Чтобы передать файл type-2 во время предварительного просмотра, используйте граф фильтров, показанный на следующей схеме.
передача
Файл типа 2 содержит два потока, один аудиопоток и один видеопоток с кодировкой DV. На этом графе используется фильтр 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. В первом вызове построитель графов записи автоматически добавляет разделитель AVI в граф и подключает один из выходных закреплений AVI Splitter к мультиплексу DV. Во втором вызове построитель графов записи находит второй выходной пин-код AVI Splitter и подключает его к мультиплексу DV.
Третий вызов RenderStream подключает dv Muxer к фильтру Бесконечного пин-кода. Следующий вызов подключает один поток из Бесконечного пин-кода Tee к фильтру записи MSDV. Этот поток передается на устройство. Последний вызов RenderStream создает раздел предварительного просмотра графа.
Если во время передачи не требуется предварительного просмотра, можно опустить бесконечный пин-код и просто подключить мультиплекс DV к фильтру MSDV:
hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);
Связанные разделы