硬體裝置如何參與篩選圖表
[與此頁面相關聯的功能,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 匯總的 COM 物件 Ksproxy 外掛程式,來擴充 KsProxy 以支援自定義功能。
包裝函式篩選會公開代表裝置功能的 COM 介面。 應用程式會使用這些介面,在篩選中來回傳遞資訊。 篩選會將 COM 方法呼叫轉譯為裝置驅動程式呼叫、將該資訊傳遞至核心模式中的驅動程式,然後將結果轉譯回應用程式。 TV Tuner、TV Audio、Analog Video Crossbar 和 KsProxy 篩選器可透過 IKsPropertySet 介面支援自定義驅動程序屬性。 VFW 擷取篩選器和音訊擷取篩選器無法以這種方式擴充。
對於應用程式開發人員,包裝函式篩選可讓應用程式控制裝置,就像控制任何其他 DirectShow 篩選一樣。 不需要特殊程序設計;與內核模式裝置通訊的詳細數據會封裝在篩選內。
適用於 Windows 裝置的 視訊
VFW 擷取篩選器支援較早期的 Video for Windows (VfW) 擷取卡。 當目標系統上有 VfW 記憶卡時,可以使用 DirectShow 系統裝置列舉值探索並新增至篩選圖表。 如需詳細資訊,請參閱 列舉裝置和篩選。
音訊擷取和混合裝置 (聲卡)
較新的聲卡具有麥克風和其他類型裝置的輸入插孔。 這些卡片通常也有內建混合功能,可控制每個個別輸入的音量、高音和低音。 在 DirectShow 中,聲卡的輸入和混音器會由音訊擷取篩選器包裝。 您可以使用系統裝置列舉器來探索每個聲卡。 若要檢視系統中的聲卡,請執行 GraphEdit,然後從 [音訊擷取來源] 類別中選取 。 該類別中的每個濾器都是音訊擷取濾器的個別實例。 (請參閱 使用 GraphEdit。)
WDM 串流裝置
較新的硬體譯碼器和擷取卡符合 Windows 驅動程式模型 (WDM) 規格。 這些裝置的功能大於 VfW 裝置。 WDM 視訊擷取卡可以支援 VfW 下無法使用的功能,包括擷取格式的列舉、視訊參數的程式設計控制,例如色調和亮度、程式設計輸入選取和電視微調器支援。
為了支援 WDM 串流裝置,DirectShow 提供 KsProxy 篩選條件(ksproxy.ax)。 KsProxy 被稱為「瑞士軍刀篩選器」,因為它做了很多不同的事情。 篩選上的針腳數目,以及篩選所公開的 COM 介面數目,取決於基礎驅動程式的功能。 KsProxy 不會以 “KsProxy”的名稱出現在濾鏡圖形中。它總是採用在登錄中找到的裝置「易記名稱」。 若要檢視系統上的 WDM 裝置,請執行 GraphEdit,然後從 WDM 串流類別中選取 。 即使您系統上只有一個 WDM 記憶卡,該卡片可能包含一個以上的裝置。 每個裝置都會以個別的篩選來表示,而每個篩選實際上都是 KsProxy。
應用程式會使用系統裝置列舉器來尋找系統上的 WDM 裝置 Moniker。 KsProxy 會藉由呼叫 moniker 上的 bindToObject 來具現化。 因為 KsProxy 可以代表各種 WDM 裝置,所以它必須查詢驅動程式,以判斷驅動程式所支援的屬性。 屬性集是供 WDM 驅動程式和某些使用者模式篩選器(例如 MPEG-2 軟體解碼器)使用的資料結構集合。 KsProxy 會自行設定,以公開對應至這些屬性集的 COM 介面。 KsProxy 會將 COM 方法呼叫轉譯為屬性集,並將這些呼叫傳送至驅動程式。 硬體廠商可以藉由提供外掛程式來擴充 KsProxy,這些外掛程式是公開裝置特殊功能的廠商特定介面。 所有這些詳細數據都會從應用程式隱藏。 應用程式會以 KsProxy 的方式控制裝置,就像任何其他 DirectShow 篩選一樣。
核心串流
WDM 裝置支援核心串流,其中數據會在核心模式中完全串流,而不需要切換至使用者模式。 在核心模式與使用者模式之間切換是計算成本高昂的;核心串流允許高比特率,而不需要負擔主機 CPU。 WDM 型篩選器可以使用核心串流,將多媒體數據直接從一個硬體裝置傳遞至另一個硬體裝置,無論是在同一張卡片上,還是在不同的卡片上,而不需要將數據複製到系統的主要記憶體中。
從應用程式的觀點來看,數據似乎會從一個使用者模式篩選移至下一個。 事實上,數據可能一律不會傳入使用者模式,但可能會從一個內核模式裝置直接串流到另一個核心模式裝置,直到它在視訊圖形卡上轉譯為止。 某些案例,例如擷取至檔案,要求數據從核心模式傳遞至使用者模式在某些時間點。 不過,這個切換不一定需要將資料複製到記憶體中的新位置。
應用程式開發人員通常不需要關注核心串流的詳細數據,但背景資訊除外。 如需 WDM、核心串流、KsProxy 和相關主題的詳細資訊,請參閱 Microsoft DDK。
相關主題