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.]
O Intelligent Connect é o mecanismo que o Filter Graph Manager utiliza para criar gráficos de filtro. Consiste em vários algoritmos relacionados que selecionam filtros e os adicionam ao gráfico de filtros.
Leia este tópico se estiver com problemas para criar um determinado gráfico de filtro e quiser solucionar o problema, ou se estiver escrevendo seu próprio filtro e quiser disponibilizá-lo para a criação automática de gráficos.
O Intelligent Connect envolve os seguintes métodosIGraphBuilder:
- IGraphBuilder::AddSourceFilter
- IGraphBuilder::Render
- IGraphBuilder::RenderFile
- IGraphBuilder::Connect
IGraphBuilder::AddSourceFilter
O método IGraphBuilder::AddSourceFilter adiciona um filtro de origem que pode renderizar um arquivo especificado. Primeiro, ele olha no registro e corresponde ao protocolo (como https://), a extensão de nome de arquivo ou um conjunto de bytes de verificação predeterminados, que são bytes em deslocamentos específicos no arquivo que correspondem a determinados padrões. Para obter detalhes, consulte Registrando um tipo de arquivo personalizado. Supondo que o método localize um filtro de origem apropriado, ele cria uma instância desse filtro, adiciona-o ao gráfico e chama o do filtro IFileSourceFilter::Load método com o nome do arquivo.
IGraphBuilder::Render
O IGraphBuilder::Render método cria uma subseção de um gráfico. Ele começa a partir de um pino de saída desconectado e funciona a jusante, adicionando novos filtros conforme necessário. O filtro inicial já deve estar no gráfico. Em cada etapa, o método Render procura um filtro que possa se conectar ao filtro anterior. O fluxo pode se ramificar se um filtro de conexão tiver vários pinos de saída. A pesquisa para quando cada fluxo tem um renderizador. Se o método Render ficar preso, ele poderá fazer backup e tentar novamente, usando um conjunto diferente de filtros.
Para conectar cada pino de saída, o método Render faz o seguinte:
Se o pino suportar a interfaceIStreamBuilder, o Filter Graph Manager delega todo o processo ao método IStreamBuilder::Renderdo pino. Ao expor essa interface, o pino assume a responsabilidade de construir o restante do gráfico, até o renderizador. No entanto, muito poucos pinos suportam esta interface.
O Gerenciador de Gráficos de Filtros tenta usar filtros armazenados em cache na memória, se houver. Durante todo o processo do Intelligent Connect, o Filter Graph Manager pode armazenar em cache filtros de etapas anteriores do processo. (Consulte também Dynamic Graph Building.)
Se o gráfico de filtros contiver filtros com pinos de entrada não conectados, o Gerenciador de Gráficos de Filtros tentará fazê-los em seguida. Você pode forçar o método Render a tentar um filtro específico adicionando esse filtro ao gráfico antes de chamar Render.
A partir do Windows 7, o DirectShow tem uma lista de filtros preferidos para determinados subtipos de mídia. Se houver um filtro preferencial para o tipo de mídia que está sendo renderizado, o Gerenciador de Gráficos de Filtros tentará esse filtro em seguida. Um aplicativo pode modificar a lista de filtros preferidos usando o interface IAMPluginControl. As alterações na lista afetam o processo atual do aplicativo e são descartadas após o término do processo.
Finalmente, se nenhum filtro adequado tiver sido encontrado, o Filter Graph Manager pesquisa o registro, usando o IFilterMapper2::EnumMatchingFilters método. Ele tenta fazer a correspondência entre os tipos de mídia preferidos do pino de saída e os tipos de mídia listados no registro.
Cada filtro é registrado com um mérito, um valor numérico que indica o quão preferível é o filtro, em relação a outros filtros. O método EnumMatchingFilters retorna filtros em ordem de mérito, com um mérito mínimo de MERIT_DO_NOT_USE + 1. Ignora filtros com mérito de MERIT_DO_NOT_USE ou menos. Os filtros também são agrupados em categorias, definidas pelo GUID. As próprias categorias têm mérito, e o método EnumMatchingFilters ignora qualquer categoria com mérito de MERIT_DO_NOT_USE ou menos, mesmo que os filtros nessa categoria tenham valores de mérito mais altos.
A partir do Windows 7, o DirectShow tem uma lista de filtros bloqueados para determinados subtipos de mídia. O Gestor de Gráficos de Filtros ignora os filtros nesta lista. Um aplicativo pode modificar a lista de filtros bloqueados usando o interface IAMPluginControl. As alterações nessa lista afetam o processo atual do aplicativo e são descartadas após o término do processo.
Para resumir, o método Render tenta filtros na seguinte ordem:
- Use IStreamBuilder.
- Experimente filtros armazenados em cache.
- Experimente filtros no gráfico.
- Windows 7 ou posterior: tente o filtro preferido para o tipo de mídia, se houver.
- Procurar filtros no registo.
IGraphBuilder::RenderFile
O método IGraphBuilder::RenderFile cria um gráfico de reprodução padrão a partir de um nome de arquivo. Internamente, esse método usa AddSourceFilter para localizar o filtro de origem correto e Render para criar o restante do gráfico.
IGraphBuilder::Conectar
O método IGraphBuilder::Connect conecta um pino de saída a um pino de entrada. Este método adiciona filtros intermediários, se necessário, usando uma variação do algoritmo descrito para o método Render:
- Tente uma conexão direta entre os filtros, sem filtros intermediários.
- Experimente filtros armazenados em cache.
- Experimente filtros no gráfico.
- Windows 7 ou posterior: tente o filtro preferido para o tipo de mídia, se houver.
- Procurar filtros no registo.
Tópicos relacionados