Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[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.]
[Esta API não é suportada e pode ser alterada ou indisponível no futuro.]
Para visualizar o projeto, você precisa de um componente chamado mecanismo de renderização , que cria um gráfico de filtro DirectShow a partir de uma linha do tempo. O gráfico de filtro é o que realmente renderiza o projeto. Você pode usar o mecanismo de renderização para visualizar um projeto ou para gravar o arquivo de saída final.
Este artigo não entra em detalhes sobre o mecanismo de renderização. Para visualização, você só precisa de algumas chamadas de método. Você pode encontrar uma discussão mais completa, incluindo como escrever arquivos de saída, em Renderizando um projeto. O exemplo de código a seguir mostra como construir um gráfico de visualização.
IRenderEngine *pRender = NULL;
hr = CoCreateInstance(CLSID_RenderEngine, NULL, CLSCTX_INPROC_SERVER,
IID_IRenderEngine, (void**) &pRender);
hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd( );
hr = pRender->RenderOutputPins( );
Crie o motor de renderização usando a função CoCreateInstance. Em seguida, chame os seguintes métodos na interface IRenderEnginedo mecanismo de renderização.
- SetTimelineObject. Especifica o cronograma a ser usado.
- ConnectFrontEnd. Cria um gráfico de filtro parcial, com um pino de saída para cada grupo na linha do tempo.
- RenderOutputPins. Completa o gráfico de visualização conectando cada pino de saída a um renderizador de vídeo ou áudio.
Depois que o gráfico for construído, você poderá visualizar o projeto executando o gráfico, como faria com qualquer gráfico de filtro DirectShow. Primeiro, obtenha um ponteiro para o gráfico de filtro chamando o IRenderEngine::GetFilterGraph método.
IGraphBuilder *pGraph = NULL;
hr = pRender->GetFilterGraph(&pGraph);
Faça uma consulta ao gráfico de filtro para as interfaces IMediaControl e IMediaEvent. Use essas duas interfaces para executar o gráfico e aguardar a conclusão da reprodução. Para obter uma explicação de como usar essas interfaces, consulte Como reproduzir um arquivo e Respondendo a eventos. O código a seguir mostra uma maneira de usar essas interfaces.
IMediaControl *pControl = NULL;
IMediaEvent *pEvent = NULL;
long evCode;
pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pControl->Run();
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();
O código neste exemplo bloqueia a execução do programa até que a reprodução seja concluída, devido ao parâmetro INFINITE na chamada do métodoIMediaEvent::WaitForComplete. Se algo der errado durante a reprodução, no entanto, isso pode fazer com que o programa pare de responder. Numa aplicação real, utilize um loop de mensagens para aguardar a conclusão da reprodução. Também é recomendável que você forneça ao usuário uma maneira de interromper a reprodução.
Quando terminar de usar o mecanismo de renderização, sempre chame o método IRenderEngine::ScrapIt. Esse método exclui o gráfico de filtro e libera todos os recursos mantidos pelo mecanismo de renderização.
pRender->ScrapIt();
Tópicos relacionados