外掛程式散發者
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 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 圖形中的變更:
- 當篩選圖表在執行、暫停和停止狀態之間切換時,它會呼叫 IDistributorNotify::Run、 IDistributorNotify::P ause或 IDistributorNotify::Stop。
- 設定參考時鐘時,篩選圖形管理員會呼叫 IDistributorNotify::SetSyncSource。
- 新增或移除篩選,或釘選連接變更時,篩選圖形管理員會呼叫 IDistributorNotify::NotifyGraphChange。
若要實作自訂 PID,請建立支援匯總的 COM 物件。 它必須支援篩選圖形管理員尚未支援的介面。 您可以選擇性地支援 IDistributorNotify 介面。
如果 PID 從篩選圖形管理員取得任何介面指標,則應該立即釋放它們。 否則,它可能會建立迴圈參考計數,以防止篩選圖形管理員被終結。 在任何情況下,都不需要在篩選圖表管理員上保留參考計數,因為篩選圖形管理員會控制 PID 的存留期。
因為 PID 是特別針對篩選圖形管理員的匯總所設計,所以您可能會想要在 PID 的建構函式方法中強制執行這個方法。 檢查外部 IUnknown 指標是否為 Null,如果是,則傳回錯誤碼VFW_E_NEED_OWNER。 (請參閱錯誤和成功碼。) 此外,若要防止其他物件匯總 PID,您可以查詢IGraphBuilder介面的外部IUnknown指標。 如果物件未公開 IGraphBuilder,則傳回錯誤碼。