Transmitir a partir do ficheiro Type-2
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize 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.]
Para transmitir um arquivo tipo-2 durante a visualização, use o gráfico de filtro mostrado no diagrama a seguir.
Um arquivo tipo-2 tem dois fluxos, um fluxo de áudio e um fluxo de vídeo codificado em DV. Este gráfico usa o filtro DV Muxer para combinar os fluxos de áudio e vídeo. Ele envia o fluxo intercalado para o filtro MSDV, mas divide o fluxo novamente para visualização.
Construa este gráfico da seguinte maneira:
// 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);
Esse código faz várias chamadas para RenderStream:
Os dois primeiros conectam o filtro de origem ao divisor AVI e o divisor AVI ao DV Mux. Na primeira chamada, o Capture Graph Builder adiciona automaticamente o divisor AVI ao gráfico e conecta um dos pinos de saída do divisor AVI ao DV Mux. Na segunda chamada, o Capture Graph Builder encontra o segundo pino de saída do divisor AVI e conecta-o ao DV Mux.
A terceira chamada para RenderStream conecta o DV Muxer ao filtro Infinite Pin Tee. A próxima chamada conecta um fluxo do Infinite Pin Tee ao filtro de captura MSDV. Este fluxo é transmitido para o dispositivo. A última chamada para RenderStream cria a seção de visualização do gráfico.
Se você não quiser visualizar durante a transmissão, você pode omitir o Infinite Pin Tee, e simplesmente conectar o DV Mux ao filtro MSDV:
hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);
Tópicos relacionados