Запись DV-файла типа 2
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи Захват аудио и видео в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Файл AVI типа 2 DV имеет два потока, один из них содержит видео DV и другой, содержащий звук. Чтобы записать файл type-2 во время предварительного просмотра, используйте диаграмму фильтров, показанную на следующей схеме.
съемка
Этот график почти такой же, как и график для захвата типа 1 (см. раздел Захват DV-файла типа 1). Однако поток записи проходит через фильтр DV Splitter, прежде чем достичь фильтра AVI Mux. 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.
- Создайте разделитель DV и добавьте его в граф фильтров.
- Вызовите ICaptureGraphBuilder2::SetOutputFileName, чтобы подключить фильтр AVI Mux к фильтру записи файлов.
- Вызовите ICaptureGraphBuilder2::RenderStream для подключения фильтра записи MSDV к разделителу DV. Этот вызов также подключает один из выходных контактов сплиттера DV к AVI Mux.
- Снова вызовите RenderStream, чтобы подключить другой контакт разъёма DV Splitter к AVI Mux.
- Вызовите RenderStream в третий раз, чтобы отобразить поток предварительного просмотра. Пропустите этот шаг, если не хотите просматривать видео.
Связанные разделы