Condividi tramite


Server di distribuzione plug-in

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

I server di distribuzione plug-in (PID) sono un modo per estendere la funzionalità di gestione del grafo dei filtri. Un server di distribuzione plug-in è un oggetto COM aggregato dal gestore dei grafici di filtro in fase di esecuzione. Le applicazioni ottengono l'accesso al PID tramite la gestione del grafo dei filtri.

Quando viene eseguita una query di Gestione gragrafi di filtro per un'interfaccia che non supporta, cerca una chiave nel Registro di sistema con il formato seguente:

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID è una stringa contenente l'identificatore dell'interfaccia. Se la voce del Registro di sistema esiste, il valore della voce definisce l'identificatore di classe (CLSID) di un PID che supporta l'interfaccia . Il gestore di grafici di filtro aggrega il PID e restituisce un puntatore all'interfaccia, fungendo quindi da IUnknown esterno per il PID. Quando l'applicazione chiama metodi sull'interfaccia, viene effettivamente chiamata sul PID. Tuttavia, l'esistenza del PID è trasparente per l'applicazione.

Il termine distributore deriva dal fatto che un PID può eseguire una query sul relativo esterno IUnknown puntatore per le interfacce nella gestione del grafo dei filtri. Chiamando il metodo IFilterGraph::EnumFilters, il PID può enumerare i filtri nel grafico e distribuire le chiamate al metodo a tali filtri. In questo modo, un PID può fungere da singolo punto di controllo per consentire all'applicazione di chiamare i metodi sui filtri.

Quando il gestore dei grafici di filtro aggrega un PID, esegue una query sul PID per l'interfaccia IDistributorNotify. Se il PID supporta questa interfaccia, il gestore del grafico dei filtri lo usa per notificare al PID le modifiche nel grafico:

Per implementare un PID personalizzato, creare un oggetto COM che supporti l'aggregazione. Deve supportare un'interfaccia non supportata dal gestore del grafo dei filtri. Facoltativamente, può supportare l'interfaccia IDistributorNotify.

Se il PID ottiene i puntatori di interfaccia dal gestore del grafico dei filtri, deve rilasciarli immediatamente. In caso contrario, potrebbe creare un conteggio di riferimenti circolari, che potrebbe impedire l'eliminazione definitiva del gestore del grafico dei filtri. Tenere un conteggio dei riferimenti nella gestione del grafo dei filtri non è necessario in ogni caso, perché il gestore del grafico dei filtri controlla la durata del PID.

Poiché un PID è progettato in modo specifico per l'aggregazione da parte del gestore del grafo dei filtri, potrebbe essere necessario applicarlo nel metodo del costruttore del PID. Controllare se il puntatore IUnknown esterno è nulle, in tal caso, restituire il codice di errore VFW_E_NEED_OWNER. Vedere codici di errore e di esito positivo. Inoltre, per impedire ad altri oggetti di aggregare il PID, è possibile eseguire una query sul puntatore esterno IUnknown per l'interfacciaIGraphBuilder. Restituisce un codice di errore se l'oggetto non espone IGraphBuilder.