共用方式為


DirectShow 影片擷取篩選

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

DirectShow 中的擷取篩選有一些功能,可區別於其他類型的篩選。 雖然 擷取圖形產生器 隱藏許多詳細數據,但最好閱讀本節,以便大致瞭解 DirectShow 擷取圖表。

釘選類別

擷取篩選通常有兩個以上的輸出針腳,可提供相同種類的數據,例如預覽釘選和擷取釘選。 因此,媒體類型不是區分針腳的好方法。 相反地,針腳會以使用 GUID 識別的功能來區別,稱為 針腳類別

如需如何查詢其類別釘選的討論,請參閱使用釘選類別 。 不過,對於大部分的應用程式,您不需要直接查詢釘選。 相反地,各種 ICaptureGraphBuilder2 方法會採用參數,以指定要作的針腳類別。 擷取圖形產生器會自動找出正確的釘選。

預覽釘選和擷取釘選

某些影片擷取裝置有個別的輸出釘選,可供預覽和擷取。 預覽釘選可用來將視訊轉譯到畫面,而擷取釘選則用來將視訊寫入檔案。

預覽釘選和擷取釘選有下列差異:

  • 預覽釘選會視需要卸除畫面格,以維護擷取釘選的輸送量。
  • 擷取針腳中的每個畫面都會以擷取畫面時的數據流時間加上時間戳。 預覽釘選不會為所傳遞的範例加上時間戳。

預覽框架沒有時間戳的原因是篩選圖表會在數據流中引入少量延遲。 如果使用擷取時間做為簡報時間,影片轉譯器會將每個樣本視為稍微遲到。 這可能會導致影片轉譯器在嘗試趕上時卸除畫面。 拿掉時間戳可確保轉譯器在到達時呈現每個樣本,而不會卸除畫面格。

預覽釘選的釘選類別PIN_CATEGORY_PREVIEW。 擷取針腳的類別PIN_CATEGORY_CAPTURE。

視訊埠釘選

視訊埠是視訊裝置(例如模擬電視微調器)與視頻卡之間的硬體連線。 視訊埠可讓裝置將視訊數據直接傳送至圖形卡。 影片會使用硬體重疊在螢幕上顯示。 視訊埠可能是連接不同卡片上兩部裝置的實際纜線;或可能是同一張卡片上的硬式有線連線。

視訊埠的優點是,視訊會直接進入視訊記憶體,而不需要 CPU 的任何工作。 不過,視訊埠有一些缺點:

  • 視訊埠一律會在擷取期間使用覆疊表面,不論您是否要預覽影片。
  • 畫面之間的翻轉會自動發生,因此很難與其他視訊作業同步處理翻轉。

如果擷取裝置使用視訊埠,擷取篩選條件就會有視訊埠釘選,而不是預覽釘選。 視訊埠釘選的釘選類別PIN_CATEGORY_VIDEOPORT。

每個擷取篩選器至少有一個擷取釘選。 此外,它可能有預覽釘選或視訊埠釘選,但絕不兩者。 篩選可以有多個擷取釘選和預覽針腳,每個都會提供個別的媒體類型。 因此,單一篩選條件可能會有視訊擷取釘選、視訊預覽釘選、音訊擷取釘選和音訊預覽釘選。 (不過,沒有相當於音訊的視訊埠。

上游 WDM 篩選

Windows 驅動程式模型 (WDM) 裝置可能需要從擷取篩選器上游進行一些額外的篩選。 這些篩選包括下列各項:

  • TV Tuner Filter。 控制模擬電視微調器的微調。
  • 電視音訊篩選。 控制模擬電視微調器的音訊設定。
  • 類比視訊橫條篩選。 透過硬體裝置路由傳送視訊和音訊號。 例如,裝置可能會有多個輸入,例如S-Video和復合視訊。 橫條篩選可讓應用程式選取輸入。

雖然這些是 DirectShow 中的個別篩選,但它們通常代表相同的硬體裝置。 每個篩選都會控制裝置的不同功能。 篩選會透過接點連接,但沒有媒體數據在針腳連接之間移動。 因此,這些篩選上的針腳不會藉由建立媒體類型來連接。 相反地,它們會使用稱為 媒體的 GUID 值,。 中型 GUID 是針對指定的裝置迷你驅動程式唯一定義的。 例如,相同電視卡片的TV Tuner篩選和視訊擷取篩選器都支援相同的媒體,這可讓應用程式正確建置圖形。

實際上,只要您使用 ICaptureGraphBuilder2 來建置擷取圖形,這些篩選就會自動新增至圖形。 如需更詳細的討論,請參閱 WDM 類別驅動程式篩選器

DirectShow 中的影片擷取