Introduzione alla programmazione dell'applicazione DirectShow

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Questo articolo introduce la terminologia di base e i concetti usati in DirectShow. Dopo aver letto questa sezione, sarà possibile scrivere la prima applicazione DirectShow.

Filtri e grafici di filtro

Il blocco predefinito di DirectShow è un componente software denominato filtro. Un filtro è un componente software che esegue un'operazione su un flusso multimediale. Ad esempio, i filtri DirectShow possono

  • leggere i file
  • ottenere video da un dispositivo di acquisizione video
  • decodificare vari formati di flusso, ad esempio video MPEG-1
  • passare i dati alla scheda grafica o audio

I filtri ricevono l'input e producono l'output. Se, ad esempio, un video con filtro decodifica MPEG-1, l'input è il flusso con codifica MPEG e l'output è una serie di fotogrammi video non compressi.

In DirectShow un'applicazione esegue qualsiasi attività connettendo catene di filtri insieme, in modo che l'output da un filtro diventi l'input per un altro. Un set di filtri connessi viene chiamato grafico di filtro. Ad esempio, il diagramma seguente mostra un grafico di filtro per la riproduzione di un file AVI.

filtrare il grafico per riprodurre un file avi

Il filtro Origine file legge il file AVI dal disco rigido. Il filtro splitter AVI analizza il file in due flussi, un flusso video compresso e un flusso audio. Il filtro DEcompressor AVI decodifica i fotogrammi video. Il filtro Renderer video disegna i fotogrammi per la visualizzazione usando DirectDraw o GDI. Il filtro Dispositivo DirectSound predefinito riproduce il flusso audio usando DirectSound.

L'applicazione non deve gestire tutto questo flusso di dati. I filtri vengono invece controllati da un componente di alto livello denominato Filter Graph Manager. L'applicazione effettua chiamate API di alto livello, ad esempio "Run" (per spostare i dati attraverso il grafico) o "Stop" (per arrestare il flusso di dati). Se è necessario un maggiore controllo sulle operazioni di flusso, è possibile accedere ai filtri direttamente tramite interfacce COM. Filter Graph Manager passa anche le notifiche degli eventi all'applicazione.

Filter Graph Manager funge anche da un altro scopo: fornisce metodi per l'applicazione per compilare il grafico del filtro, connettendo i filtri insieme. DirectShow fornisce anche vari oggetti helper che semplificano questo processo. Questi sono descritti dettagliatamente nella documentazione.

Scrittura di un'applicazione DirectShow

In termini generali, esistono tre attività che devono essere eseguite da qualsiasi applicazione DirectShow. Questi sono illustrati nel diagramma seguente.

tipica applicazione directshow

  1. L'applicazione crea un'istanza di Filter Graph Manager.
  2. L'applicazione usa Filter Graph Manager per compilare un grafico di filtro. Il set esatto di filtri nel grafico dipenderà dall'applicazione.
  3. L'applicazione usa Filter Graph Manager per controllare il grafico dei filtri e trasmettere i dati tramite i filtri. In questo processo, l'applicazione risponderà anche agli eventi di Filter Graph Manager.

Al termine dell'elaborazione, l'applicazione rilascia Filter Graph Manager e tutti i filtri.

DirectShow si basa su COM; Filter Graph Manager e i filtri sono tutti oggetti COM. È consigliabile avere una conoscenza generale della programmazione client COM prima di iniziare a programmare DirectShow. Sono disponibili molti libri sulla programmazione COM.

Per iniziare a usare DirectShow, vedere l'articolo Come riprodurre un file, che presenta un'applicazione console semplice per riprodurre un file video. La sezione About DirectShow illustra in dettaglio l'architettura DirectShow, mentre la sezione Using DirectShow esamina gli scenari principali supportati da DirectShow, ad esempio acquisizione, modifica video, riproduzione DVD e televisione.