Informazioni sui filtri 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.

DirectShow usa un'architettura modulare, in cui ogni fase di elaborazione viene eseguita da un oggetto COM denominato filtro. DirectShow offre un set di filtri standard per le applicazioni da usare e gli sviluppatori possono scrivere i propri filtri personalizzati che estendono la funzionalità di DirectShow. Per illustrare, ecco i passaggi necessari per riprodurre un file video AVI, insieme ai filtri che eseguono ogni passaggio:

  • Leggere i dati non elaborati dal file come flusso di byte (filtro origine file).
  • Esaminare le intestazioni AVI e analizzare il flusso di byte in fotogrammi video e esempi audio separati (filtro splitter AVI).
  • Decodificare i fotogrammi video (vari filtri decodificatori, a seconda del formato di compressione).
  • Disegna i fotogrammi video (filtro Renderer video).
  • Inviare gli esempi audio alla scheda audio (filtro Dispositivo DirectSound predefinito).

Questi filtri vengono visualizzati nel diagramma seguente.

filtrare il grafico per riprodurre un file avi con video compresso

Come illustrato dal diagramma, ogni filtro è connesso a uno o più filtri. I punti di connessione sono anche oggetti COM, denominati pin. I filtri usano i pin per spostare i dati da un filtro successivo. Le frecce del diagramma mostrano la direzione in cui viaggiano i dati. In DirectShow viene chiamato un set di filtri.

I filtri hanno tre possibili stati: esecuzione, arresto e sospensione. Quando un filtro è in esecuzione, elabora i dati multimediali. Quando viene arrestato, interrompe l'elaborazione dei dati. Lo stato sospeso viene usato per creare dati prima dell'esecuzione; la sezione Flusso di dati in Filter Graph descrive questo concetto in modo più dettagliato. Con eccezioni molto rare, le modifiche dello stato sono coordinate nell'intero grafico del filtro; tutti i filtri negli stati del commutatore grafico in unisono. L'intero grafico del filtro viene quindi detto anche in esecuzione, arrestato o sospeso.

I filtri possono essere raggruppati in diverse categorie generali:

  • Un filtro di origine introduce i dati nel grafico. I dati potrebbero venire da un file, da una rete, da una fotocamera o da qualsiasi altra parte. Ogni filtro di origine gestisce un tipo diverso di origine dati.
  • Un filtro di trasformazione accetta un flusso di input, elabora i dati e crea un flusso di output. I codificatori e i decodificatori sono esempi di filtri di trasformazione.
  • I filtri renderer si trovano alla fine della catena. Ricevono i dati e li presentano all'utente. Ad esempio, un renderer video disegna fotogrammi video sulla visualizzazione; un renderer audio invia dati audio alla scheda audio; e un filtro del writer di file scrive i dati in un file.
  • Un filtro splitter divide un flusso di input in due o più output, in genere analizzando il flusso di input lungo il percorso. Ad esempio, AVI Splitter analizza un flusso di byte in flussi video e audio separati.
  • Un filtro mux accetta più input e li combina in un singolo flusso. Ad esempio, AVI Mux esegue l'operazione inversa di AVI Splitter. Accetta flussi audio e video e produce un flusso di byte formattato dall'AVI.

Le distinzione tra queste categorie non sono assoluti. Ad esempio, il filtro lettore ASF funge sia da filtro di origine che da filtro splitter.

Tutti i filtri DirectShow espongono l'interfaccia IBaseFilter e tutti i pin espongono l'interfaccia IPin . DirectShow definisce anche molte altre interfacce che supportano funzionalità più specifiche.

Informazioni su Filter Graph Manager

Flusso di dati nel grafico di filtro

Filtri DirectShow