Partilhar via


Introdução à programação de aplicativos DirectShow

[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.]

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 Gráficos de Filtros

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 DirectShow podem

  • ler ficheiros
  • 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 a placa gráfica ou de som

Os filtros recebem entrada e produzem saída. Por exemplo, se um filtro decodifica vídeo MPEG-1, a entrada é o fluxo codificado em MPEG e a saída é uma série de quadros de vídeo não compactados.

No DirectShow, um aplicativo executa qualquer tarefa conectando cadeias de filtros juntas, para que a saída de um filtro se torne a entrada para outro. Um conjunto de filtros conectados é chamado de gráfico de filtro de . Por exemplo, o diagrama a seguir mostra um gráfico de filtro para reproduzir um arquivo AVI.

gráfico de filtro para reproduzir um arquivo AVI

O filtro Origem do ficheiro lê o ficheiro AVI a partir do disco rígido. O filtro AVI Splitter analisa o arquivo em dois fluxos, um fluxo de vídeo compactado e um fluxo de áudio. O filtro AVI Decompressor 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 Filter Graph Manager. O aplicativo faz chamadas de API de alto nível, como "Executar" (para mover dados através do gráfico) ou "Parar" (para parar 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 Filter Graph Manager também passa notificações de eventos para o aplicativo.

O Filter Graph Manager também serve a outro propósito: ele fornece métodos para o aplicativo construir o gráfico de filtro, conectando os filtros. (O DirectShow também fornece vários objetos auxiliares que simplificam esse processo. Estes são descritos minuciosamente na documentação.)

Escrevendo um aplicativo DirectShow

Em termos gerais, há três tarefas que qualquer aplicativo DirectShow deve executar. Estes são ilustrados no diagrama a seguir.

aplicação DirectShow típica

  1. O aplicativo cria uma instância do Filter Graph Manager.
  2. O aplicativo usa o Filter Graph Manager para criar um gráfico de filtro. O conjunto exato de filtros no gráfico dependerá da aplicação.
  3. O aplicativo usa o Filter Graph Manager para controlar o gráfico de filtro e transmitir dados através dos filtros. Ao longo deste processo, a aplicação também responderá a eventos do Filter Graph Manager.

Quando o processamento é concluído, o aplicativo libera o Filter Graph Manager e todos os filtros.

DirectShow é baseado em COM; o Filter Graph Manager e os filtros são todos objetos COM. Você deve ter uma compreensão geral da programação do 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 a arquitetura do DirectShow com mais detalhes, enquanto a seção Usando o DirectShow examina os principais cenários suportados pelo DirectShow, como captura, edição de vídeo, reprodução de DVD e televisão.