Introdução à programação de aplicativos 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.]
Este artigo apresenta a terminologia básica e os conceitos usados no DirectShow. Depois de ler esta seção, você estará pronto para escrever seu primeiro aplicativo DirectShow.
Filtros e grafos de filtro
O bloco de construção do DirectShow é um componente de software chamado filtro. Um filtro é um componente de software que executa alguma operação em um fluxo multimídia. Por exemplo, os filtros do DirectShow podem
- ler arquivos
- obter vídeo de um dispositivo de captura de vídeo
- decodificar vários formatos de fluxo, como vídeo MPEG-1
- passar dados para os elementos gráficos ou cartão de som
Os filtros recebem entrada e produzem saída. Por exemplo, se um filtro decodificar o vídeo MPEG-1, a entrada será o fluxo codificado em MPEG e a saída será uma série de quadros de vídeo descompactados.
No DirectShow, um aplicativo executa qualquer tarefa conectando cadeias de filtros, de modo que a saída de um filtro se torne a entrada para outro. Um conjunto de filtros conectados é chamado de grafo de filtro. Por exemplo, o diagrama a seguir mostra um grafo de filtro para reproduzir um arquivo AVI.
O filtro Origem do Arquivo lê o arquivo AVI do disco rígido. O filtro divisor AVI analisa o arquivo em dois fluxos, um fluxo de vídeo compactado e um fluxo de áudio. O filtro de descompactador AVI decodifica os quadros de vídeo. O filtro Renderizador de Vídeo desenha os quadros para a exibição, usando DirectDraw ou GDI. O filtro Dispositivo DirectSound Padrão reproduz o fluxo de áudio usando DirectSound.
O aplicativo não precisa gerenciar todo esse fluxo de dados. Em vez disso, os filtros são controlados por um componente de alto nível chamado Gerenciador de Grafo de Filtros. O aplicativo faz chamadas à API de alto nível, como "Executar" (para mover dados pelo grafo) ou "Parar" (para interromper o fluxo de dados). Se você precisar de mais controle sobre as operações de fluxo, poderá acessar os filtros diretamente por meio de interfaces COM. O Gerenciador de Grafo de Filtro também passa notificações de eventos para o aplicativo.
O Gerenciador de Grafo de Filtro também tem outra finalidade: fornece métodos para o aplicativo criar o grafo de filtro, conectando os filtros juntos. (O DirectShow também fornece vários objetos auxiliares que simplificam esse processo. Eles são descritos detalhadamente na documentação.)
Escrevendo um aplicativo DirectShow
Em termos gerais, há três tarefas que qualquer aplicativo DirectShow deve executar. Eles são ilustrados no diagrama a seguir.
- O aplicativo cria uma instância do Gerenciador de Grafo de Filtro.
- O aplicativo usa o Gerenciador de Grafo de Filtro para criar um grafo de filtro. O conjunto exato de filtros no grafo dependerá do aplicativo.
- O aplicativo usa o Gerenciador de Grafo de Filtro para controlar o grafo de filtro e transmitir dados por meio dos filtros. Ao longo desse processo, o aplicativo também responderá a eventos do Gerenciador de Grafo de Filtro.
Quando o processamento é concluído, o aplicativo libera o Gerenciador de Grafo de Filtro e todos os filtros.
O DirectShow é baseado em COM; o Gerenciador de Grafo de Filtro e os filtros são todos objetos COM. Você deve ter uma compreensão geral da programação de cliente COM antes de começar a programar o DirectShow. Muitos livros sobre programação COM estão disponíveis.
Para começar a usar o DirectShow, leia o artigo Como reproduzir um arquivo, que apresenta um aplicativo de console simples para reproduzir um arquivo de vídeo. A seção Sobre o DirectShow explica mais detalhadamente a arquitetura do DirectShow, enquanto a seção Usando o DirectShow examina os principais cenários compatíveis com o DirectShow, como captura, edição de vídeo, reprodução de DVD e televisão.