Sobre filtros do DirectShow
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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 DirectShow usa uma arquitetura modular, em que cada estágio de processamento é feito por um objeto COM chamado filtro. O DirectShow fornece um conjunto de filtros padrão para os aplicativos usarem, e os desenvolvedores podem escrever seus próprios filtros personalizados que estendem a funcionalidade do DirectShow. Para ilustrar, aqui estão as etapas necessárias para reproduzir um arquivo de vídeo AVI, juntamente com os filtros que executam cada etapa:
- Leia os dados brutos do arquivo como um fluxo de bytes (filtro De origem do arquivo).
- Examine os cabeçalhos AVI e analise o fluxo de bytes em quadros de vídeo e exemplos de áudio separados (filtro divisor AVI).
- Decodificar os quadros de vídeo (vários filtros de decodificador, dependendo do formato de compactação).
- Desenhe os quadros de vídeo (filtro do Renderizador de Vídeo).
- Envie os exemplos de áudio para o cartão de som (filtro de dispositivo DirectSound padrão).
Esses filtros são mostrados no diagrama a seguir.
Como mostra o diagrama, cada filtro está conectado a um ou mais outros filtros. Os pontos de conexão também são objetos COM, chamados de pinos. Os filtros usam pinos para mover dados de um filtro no próximo. As setas no diagrama mostram a direção na qual os dados viajam. No DirectShow, um conjunto de filtros é chamado de grafo de filtro.
Os filtros têm três estados possíveis: em execução, interrompidos e pausados. Quando um filtro está em execução, ele processa dados de mídia. Quando ele é interrompido, ele para de processar dados. O estado em pausa é usado para sinalizar dados antes da execução; a seção Fluxo de Dados no Gráfico de Filtro descreve esse conceito com mais detalhes. Com exceções muito raras, as alterações de estado são coordenadas em todo o grafo de filtro; todos os filtros nos estados de comutador de grafo em uníssono. Portanto, todo o grafo de filtro também é considerado em execução, parado ou pausado.
Os filtros podem ser agrupados em várias categorias amplas:
- Um filtro de origem introduz dados no grafo. Os dados podem vir de um arquivo, de uma rede, de uma câmera ou de qualquer outro lugar. Cada filtro de origem manipula um tipo diferente de fonte de dados.
- Um filtro de transformação usa um fluxo de entrada, processa os dados e cria um fluxo de saída. Codificadores e decodificadores são exemplos de filtros de transformação.
- Os filtros do renderizador ficam no final da cadeia. Eles recebem dados e os apresentam ao usuário. Por exemplo, um renderizador de vídeo desenha quadros de vídeo na tela; um renderizador de áudio envia dados de áudio para a cartão de som; e um filtro de gravador de arquivos grava dados em um arquivo.
- Um filtro de divisor divide um fluxo de entrada em duas ou mais saídas, normalmente analisando o fluxo de entrada ao longo do caminho. Por exemplo, o Divisor AVI analisa um fluxo de bytes em fluxos de áudio e vídeo separados.
- Um filtro mux usa várias entradas e as combina em um único fluxo. Por exemplo, o AVI Mux executa a operação inversa do Divisor AVI. Ele usa fluxos de áudio e vídeo e produz um fluxo de bytes formatado por AVI.
As distinções entre essas categorias não são absolutas. Por exemplo, o filtro Leitor do ASF atua como um filtro de origem e um filtro divisor.
Todos os filtros directShow expõem a interface IBaseFilter e todos os pinos expõem a interface IPin . O DirectShow também define muitas outras interfaces que dão suporte a funcionalidades mais específicas.
Tópicos relacionados