共用方式為


外掛程式散發者

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayerIMFMediaEngine 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

外掛程式散發者 (PID) 是擴充篩選圖表管理員功能的方法。 外掛程式散發者是篩選圖表管理員在運行時間匯總的 COM 物件。 應用程式可透過篩選圖表管理員取得 PID 的存取權。

當篩選圖形管理員查詢不支援的介面時,它會以下列格式搜尋登錄中的機碼:

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID 是包含介面識別碼的字串。 如果登錄專案存在,專案的值會定義支援 介面之 PID 的類別識別碼 (CLSID)。 篩選圖表管理員會匯總 PID 並傳回介面指標,從而做為 PID 的外部 IUnknown。 當應用程式在介面上呼叫方法時,它實際上是在 PID 上呼叫它們。 不過,PID 的存在對應用程式而言是透明的。

散發者 一詞源於 PID 可以查詢其外部 IUnknown 指標,以取得篩選圖表管理員上的介面。 藉由呼叫 IFilterGraph::EnumFilters 方法,PID 可以列舉圖形中的篩選,並將方法呼叫散發至這些篩選。 如此一來,PID 就可以做為應用程式在篩選上呼叫方法的單一控制點。

當篩選圖表管理員匯總 PID 時,它會查詢 IDistributorNotify 介面的 PID。 如果 PID 支援這個介面,篩選圖表管理員會使用它來通知 PID 圖形中的變更:

若要實作自定義 PID,請建立支持匯總的 COM 物件。 它必須支持篩選圖表管理員尚未支持的介面。 您可以選擇性地支援 IDistributorNotify 介面。

如果 PID 從篩選圖表管理員取得任何介面指標,則應該立即釋放它們。 否則,它可能會建立迴圈參考計數,以防止篩選圖表管理員被終結。 在任何情況下,都不需要在篩選圖表管理員上保存參考計數,因為篩選圖表管理員會控制 PID 的存留期。

由於 PID 是專為篩選圖表管理員的匯總所設計,因此您可能會想要在 PID 的建構函式方法中強制執行此設定。 檢查外部 IUnknown 指標是否 NULL,如果是,則傳回錯誤碼VFW_E_NEED_OWNER。 (請參閱 錯誤和成功碼。此外,若要防止其他對象匯總 PID,您可以查詢 IGraphBuilder 介面的外部 IUnknown 指標。 如果物件未公開 IGraphBuilder,則傳回錯誤碼。