Share via


DirectShow 視訊擷取篩選器

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對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) 裝置可能需要從擷取篩選器上游進行一些額外的篩選。 這些篩選包括下列各項:

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

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

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

關於 DirectShow 中的影片擷取