Introduzione alla programmazione di applicazioni DirectShow
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di usare un nuovo codice MediaPlayer, IMFMediaEngine e Acquisizione audio/video 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 presenta la terminologia e i concetti di base usati in DirectShow. Dopo aver letto questa sezione, si sarà pronti per scrivere la prima applicazione DirectShow.
Filtri e Grafici di Filtro
Il blocco costitutivo di DirectShow è un componente software denominato filtro. Un filtro è un componente software che esegue alcune operazioni 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 mpeg-1 video
- passare i dati alla scheda grafica o audio
I filtri ricevono l'input e producono l'output. Ad esempio, se un filtro decodifica video 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 tra loro, in modo che l'output di 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.
Il filtro Origine file legge il file AVI dal disco rigido. Il filtro AVI Splitter analizza il file in due flussi, un flusso video compresso e un flusso audio. Il filtro decompressore AVI decodifica i fotogrammi video. Il filtro Renderingr video disegna i fotogrammi sullo schermo, usando DirectDraw o GDI. Il filtro Default DirectSound Device 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 "Esegui" (per spostare i dati attraverso il grafico) o "Arresta" (per arrestare il flusso di dati). Se è necessario un maggiore controllo sulle operazioni di flusso, è possibile accedere ai filtri direttamente tramite le interfacce COM. Filter Graph Manager passa anche le notifiche degli eventi all'applicazione.
Filter Graph Manager serve anche a un altro scopo: fornisce metodi per l'applicazione per compilare il grafico dei filtri, connettendo i filtri tra loro. DirectShow fornisce anche vari oggetti helper che semplificano questo processo. Questi sono descritti accuratamente 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.
- L'applicazione crea un'istanza di Filter Graph Manager.
- L'applicazione usa Filter Graph Manager per creare un grafico di filtro. Il set esatto di filtri nel grafico dipende dall'applicazione.
- L'applicazione usa Filter Graph Manager per controllare il grafico dei filtri e trasmettere i dati tramite i filtri. Durante 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. Prima di iniziare a programmare DirectShow, è necessario avere una conoscenza generale della programmazione client COM. Sono disponibili molti libri sulla programmazione COM.
Per iniziare a usare DirectShow, leggere l'articolo Come riprodurre un file, che presenta una semplice applicazione console per riprodurre un file video. La sezione About DirectShow illustra in modo più dettagliato l'architettura DirectShow, mentre la sezione Using DirectShow esamina gli scenari principali supportati da DirectShow, ad esempio acquisizione, modifica video, riproduzione DVD e televisione.