硬體裝置如何參與篩選圖表
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
本文說明 DirectShow 如何與音訊和視訊硬體互動。
包裝函式篩選
所有 DirectShow 篩選都是使用者模式軟體元件。 若要讓核心模式硬體裝置例如視訊擷取卡加入 DirectShow 篩選圖表,裝置必須以使用者模式篩選來表示。 此函式是由 DirectShow 提供的特製化「包裝函式」篩選來執行。 這些篩選包括 音訊擷取 篩選、 VFW 擷取 篩選、 電視微調器 篩選、 電視音訊 篩選和 類比視訊交叉資料行 篩選。 DirectShow 也提供稱為 KsProxy 的篩選,可代表任何類型的 Windows 驅動程式模型 (WDM) 串流裝置。 硬體廠商可以提供 Ksproxy 外掛程式,這是 KsProxy匯總的 COM 物件,藉此擴充 KsProxy 以支援自訂功能。
包裝函式篩選會公開代表裝置功能的 COM 介面。 應用程式會使用這些介面,在篩選準則中傳遞資訊。 篩選會將 COM 方法呼叫轉譯為設備磁碟機呼叫、將該資訊傳遞至核心模式中的驅動程式,然後將結果轉譯回應用程式。 電視微調器、電視音訊、類比視訊交叉列和 KsProxy 篩選可透過 IKsPropertySet 介面支援自訂驅動程式屬性。 VFW 擷取篩選準則和音訊擷取篩選器無法透過這種方式延伸。
對於應用程式開發人員,包裝函式篩選可讓應用程式控制裝置,就像控制任何其他 DirectShow 篩選一樣。 不需要特殊程式設計;與核心模式裝置通訊的詳細資料會封裝在篩選內。
Windows 裝置的視訊
VFW 擷取篩選器支援舊版 Windows (VfW) 擷取卡的影片。 當目標系統上有 VfW 記憶卡時,可以使用 DirectShow 系統裝置列舉值來探索並新增至篩選圖形。 如需詳細資訊,請參閱 列舉裝置和篩選。
音訊擷取和混合裝置 (音效卡)
較新的音效卡具有麥克風和其他類型裝置的輸入插接器。 這些卡片通常也有內建混合功能,可控制每個個別輸入的音量、Treble 和 Bass。 在 DirectShow 中,音效卡的輸入和混音器會由音訊擷取篩選準則包裝。 您可以使用系統裝置列舉值來探索每個聲音卡。 若要檢視系統中的音效卡,請執行 GraphEdit 並從 [音訊擷取來源] 類別中選取。 該類別中的每個篩選都是音訊擷取篩選準則的個別實例。 (請參閱 使用 GraphEdit.)
WDM 串流裝置
較新的硬體解碼器和擷取卡符合 Windows 驅動程式模型 (WDM) 規格。 這些裝置的功能大於 VfW 裝置。 WDM 視訊擷取卡可以支援 VfW 下無法使用的功能,包括擷取格式的列舉、視訊參數的程式設計控制,例如色調和亮度、程式設計輸入選取,以及電視微調器支援。
為了支援 WDM 串流裝置,DirectShow 提供 KsProxy 篩選 (ksproxy.ax) 。 KsProxy 已稱為「瑞士大刀篩選器」,因為它會執行許多不同的動作。 篩選準則上的針腳數目,以及篩選準則所公開的 COM 介面數目,取決於基礎驅動程式的功能。 KsProxy 不會出現在名稱 「KsProxy」 的篩選圖形中。它一律會採用在登錄中找到的易記裝置名稱。 若要檢視系統上的 WDM 裝置,請執行 GraphEdit 並從 WDM 串流類別中選取。 即使您系統上只有一個 WDM 記憶卡,該卡片可能包含一個以上的裝置。 每個裝置都會以個別的篩選來表示,而且每個篩選準則實際上是 KsProxy。
應用程式會使用系統裝置列舉值來尋找系統上的 WDM 裝置 Monikers。 KsProxy 會在 Moniker 上呼叫 BindToObject 來具現化。 因為 KsProxy 可以代表所有類型的 WDM 裝置,所以必須查詢驅動程式,以判斷驅動程式所支援的屬性集。 屬性集是 WDM 驅動程式所使用的資料結構集合,以及某些使用者模式篩選,例如 MPEG-2 軟體解碼器。 KsProxy 會自行設定,以公開對應至這些屬性集的 COM 介面。 KsProxy 會將 COM 方法呼叫轉譯為屬性集,並將這些呼叫傳送至驅動程式。 硬體廠商可以藉由提供外掛程式來擴充 KsProxy,這是公開裝置特殊功能的廠商特定介面。 所有這些詳細資料都會從應用程式隱藏。 應用程式會以 KsProxy 的方式控制裝置,方式與任何其他 DirectShow 篩選準則相同。
核心串流
WDM 裝置支援核心串流,其中資料會完全以核心模式串流,而不需要切換至使用者模式。 在核心模式與使用者模式之間切換的成本很高;核心串流允許高位元速率,而不需要負擔主機 CPU。 WDM 型篩選準則可以使用核心串流,直接從一部硬體裝置將多媒體資料傳遞至另一個硬體裝置,不論是在相同的卡片上,還是在不同的卡片上,而不需要將資料複製到系統的主要記憶體中。
從應用程式的觀點來看,它看起來就像資料從一個使用者模式篩選移至下一個使用者模式篩選。 事實上,資料可能完全不會傳入使用者模式,但可能會直接從一個核心模式裝置串流至另一個核心模式裝置,直到在視訊圖形卡上轉譯為止。 某些案例,例如擷取至檔案,要求資料在某個時間點從核心模式傳遞至使用者模式。 不過,這個參數不一定需要將資料複製到記憶體中的新位置。
應用程式開發人員通常不需要擔心核心串流的詳細資料,但背景資訊除外。 如需 WDM、核心串流、KsProxy 和相關主題的詳細資訊,請參閱 Microsoft DDK。
相關主題