Panoramica della compilazione di Graph
[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.
Per creare un grafico di filtro, iniziare creando un'istanza di Filter Graph Manager:
IGraphBuilder* pIGB;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
(void **)&pIGB);
Filter Graph Manager supporta i metodi grafici seguenti:
- IFilterGraph::ConnectDirect tenta di creare una connessione diretta tra due pin. Se i pin non possono connettersi, il metodo ha esito negativo.
- IGraphBuilder::Connect connette due pin. Se possibile, rende una connessione diretta. In caso contrario, usa filtri intermedi per completare la connessione.
- IGraphBuilder::Rendering inizia da un pin di output e compila il resto del grafico. Questi metodi aggiungono filtri in base alle esigenze, lavorando a valle, fino a raggiungere un filtro del renderer.
- IGraphBuilder::RenderFile compila un grafico completo per la riproduzione dei file.
- IFilterGraph::AddFilter aggiunge un filtro al grafico. Non connette il filtro. È necessario creare il filtro prima di chiamare questo metodo chiamando CoCreateInstance o usando l'enumeratore Filter Mapper o System Device.
Questi metodi forniscono tre approcci di base per la compilazione del grafico:
- Filter Graph Manager compila l'intero grafico.
- Filter Graph Manager compila parte del grafico.
- L'applicazione compila l'intero grafico.
Filter Graph Manager compila l'intero grafico
Se si vuole semplicemente riprodurre un file creato in un formato riconosciuto, ad esempio AVI, MPEG, WAV o MP3, usare il metodo RenderFile . L'articolo Come riprodurre un file illustra come eseguire questa operazione.
Il metodo RenderFile inizia cercando nel Registro di sistema un filtro di origine che può analizzare il file. Usa il protocollo (ad esempio " https://
nell'URL), l'estensione del file o i modelli di byte predefiniti nel file per determinare il filtro di origine. Per informazioni dettagliate, vedere Registrazione di un tipo di file personalizzato.
Per compilare il resto del grafico, Filter Graph Manager usa un processo iterativo in cui accetta i tipi multimediali supportati da un filtro sui pin di output e cerca nel Registro di sistema filtri che accettano tale tipo di supporto come input. Usa diversi criteri per restringere i filtri di ricerca e priorità:
- La categoria di filtro identifica la funzionalità generale del filtro.
- Il tipo di supporto descrive il tipo di dati che il filtro può accettare come input o recapitare come output.
- Il merito determina l'ordine in cui vengono provati i filtri. Se due filtri nella stessa categoria di filtro supportano entrambi gli stessi tipi di input, Filter Graph Manager seleziona quello con il valore di merito più alto. Alcuni filtri vengono assegnati in modo intenzionale a un valore basso perché sono progettati per scopi specializzati e devono essere aggiunti solo al grafico dall'applicazione.
Filter Graph Manager usa l'oggetto Filter Mapper per eseguire ricerche nel Registro di sistema.
Man mano che viene aggiunto ogni filtro, Filter Graph Manager tenta di connetterlo al pin di output del filtro precedente. I filtri negoziano per determinare se possono connettersi e, in tal caso, quale tipo di supporto usare per la connessione. Se il nuovo filtro non è in grado di connettersi, Filter Graph Manager lo elimina e prova un altro filtro. Questo processo continua fino a quando ogni flusso viene eseguito il rendering.
Il filtro Graph Manager compila parte del grafico
Per eseguire qualcosa oltre la semplice riproduzione di un file, l'applicazione deve eseguire almeno alcuni dei lavori di compilazione del grafico. Ad esempio, un'applicazione di acquisizione video deve selezionare un filtro di origine di acquisizione e aggiungerlo al grafico. Se si scrivono dati in un file AVI, è necessario aggiungere i filtri AVI Mux e File Writer al grafico. Tuttavia, è spesso possibile consentire a Filter Graph Manager di completare il grafico. Ad esempio, è possibile eseguire il rendering di un pin per l'anteprima chiamando il metodo Render .
L'applicazione compila l'intero grafico
In alcuni scenari, l'applicazione potrebbe dover compilare il grafico aggiungendo e connettendo ogni filtro. In questo caso, probabilmente si conosce in particolare quali filtri devono essere aggiunti al grafico. Con questo approccio, l'applicazione aggiunge ogni filtro chiamando AddFilter, enumera i pin nei filtri e li connette chiamando Connect o ConnectDirect.
Argomenti correlati