Capturar um arquivo DV tipo 2
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
Um arquivo DV AVI tipo 2 tem dois fluxos, um que contém vídeo DV e outro que contém áudio. Para capturar um arquivo tipo 2 durante a visualização, use o grafo de filtro mostrado no diagrama a seguir.
Esse grafo é quase o mesmo que o grafo para captura do tipo 1 (consulte Capturar um arquivo DV tipo 1). No entanto, o fluxo de captura passa pelo filtro divisor DV antes de atingir o filtro AVI Mux . Portanto, o AVI Mux recebe dois fluxos, um fluxo de áudio e um fluxo de vídeo codificado em DV.
Crie este grafo da seguinte maneira:
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.
- Crie o Divisor dv e adicione-o ao grafo de filtro.
- Chame ICaptureGraphBuilder2::SetOutputFileName para conectar o filtro AVI Mux ao filtro Gravador de Arquivos.
- Chame ICaptureGraphBuilder2::RenderStream para conectar o filtro de captura MSDV ao Divisor de DV. Essa chamada também conecta um dos pinos de saída do Divisor de DV ao AVI Mux.
- Chame RenderStream novamente para conectar o outro pino do Divisor de DV ao AVI Mux.
- Chame RenderStream uma terceira vez para renderizar o fluxo de visualização. Ignore esta etapa se não quiser visualizar o vídeo.
Tópicos relacionados