共用方式為


DirectShow 應用程式程式設計簡介

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

本文介紹 DirectShow 中使用的基本術語和概念。 閱讀本節之後,您就可以開始撰寫您的第一個 DirectShow 應用程式。

篩選和篩選圖形

DirectShow 的建置組塊是稱為 篩選的軟體元件。 篩選準則是在多媒體串流上執行某些作業的軟體元件。 例如,DirectShow 篩選準則可以

  • 讀取檔案
  • 從影片擷取裝置取得視訊
  • 解碼各種資料流程格式,例如 MPEG-1 視訊
  • 將資料傳遞至圖形或聲音卡

篩選會接收輸入並產生輸出。 例如,如果篩選解碼 MPEG-1 視訊,則輸入為 MPEG 編碼資料流程,而輸出則是一系列未壓縮的視訊畫面。

在 DirectShow 中,應用程式會藉由將篩選鏈結連接在一起來執行任何工作,讓一個篩選的輸出成為另一個篩選的輸入。 一組連接的篩選稱為 篩選圖形。 例如,下圖顯示用來播放 AVI 檔案的篩選準則圖表。

篩選圖形以播放 avi 檔案

[檔案來源] 篩選器會從硬碟讀取 AVI 檔案。 AVI 分割器篩選器會將檔案剖析成兩個數據流:壓縮的視訊資料流程和音訊資料流程。 AVI 解壓縮器篩選準則會解碼視訊畫面。 影片轉譯器篩選會使用 DirectDraw 或 GDI 將畫面繪製到顯示器。 預設 DirectSound 裝置篩選器會使用 DirectSound 播放音訊串流。

應用程式不需要管理此所有資料流程。 相反地,篩選是由稱為 Filter Graph Manager 的高階元件所控制。 應用程式會進行高階 API 呼叫,例如「執行」 (,以透過圖形) 或「停止」 (移動資料,以停止資料流程) 。 如果您需要進一步控制串流作業,您可以透過 COM 介面直接存取篩選。 Filter Graph 管理員也會將事件通知傳遞給應用程式。

Filter Graph 管理員也提供另一個用途:它提供方法讓應用程式藉由將篩選準則連接在一起來建置篩選圖形。 (DirectShow 也提供各種協助程式物件,以簡化此程式。這些內容會在 documentation.) 中徹底說明

撰寫 DirectShow 應用程式

大致來說,任何 DirectShow 應用程式都必須執行三項工作。 下圖說明這些專案。

一般 directshow 應用程式

  1. 應用程式會建立 Filter Graph Manager 的實例。
  2. 應用程式會使用 Filter Graph 管理員來建置篩選圖形。 圖形中的確切篩選集將取決於應用程式。
  3. 應用程式會使用 Filter Graph 管理員來控制篩選圖形,並透過篩選串流資料。 在此程式中,應用程式也會回應來自 Filter Graph 管理員的事件。

處理完成時,應用程式會釋放 Filter Graph Manager 和所有篩選。

DirectShow 是以 COM 為基礎;Filter Graph 管理員和篩選準則都是 COM 物件。 開始程式設計 DirectShow 之前,您應該先大致瞭解 COM 用戶端程式設計。 有許多關於 COM 程式設計的書籍可供使用。

若要開始使用 DirectShow,請閱讀 如何播放檔案一文,其中提供簡單的主控台應用程式來播放視訊檔案。 關於 DirectShow一節會更詳細地說明 DirectShow 架構,而使用 DirectShow一節會檢查 DirectShow 支援的主要案例,例如擷取、視訊編輯、DVD 播放和電視。