DirectShow 應用程式程式設計簡介
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、IMFMediaEngine和媒體基金會中的 音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
本文介紹 DirectShow 中使用的基本術語和概念。 閱讀本節之後,您就可以撰寫第一個 DirectShow 應用程式。
過濾器和過濾器圖表
DirectShow 的建置組塊是稱為 篩選器的軟體元件。 過濾器是軟體元件,可以對多媒體串流進行操作。 例如,DirectShow 濾鏡可以
- 讀取檔案
- 從影片擷取裝置取得影片
- 譯碼各種數據流格式,例如 MPEG-1 視訊
- 將數據傳遞至圖形或聲卡
篩選會接收輸入並產生輸出。 例如,如果篩選譯碼 MPEG-1 視訊,則輸入是 MPEG 編碼的數據流,而輸出則是一系列未壓縮的視訊畫面。
在 DirectShow 中,應用程式會藉由將篩選鏈結連接在一起來執行任何工作,讓一個篩選的輸出成為另一個篩選的輸入。 一組連接的篩選器稱為 篩選圖。 例如,下圖顯示播放 AVI 檔案的篩選圖表。
[檔案來源] 篩選器會從硬碟讀取 AVI 檔案。 AVI 分隔器篩選器會將檔案剖析成兩個數據流:壓縮的視訊串流和音訊數據流。 AVI 解壓縮器篩選器會譯碼視訊畫面。 影片渲染篩選器會使用 DirectDraw 或 GDI 將畫面繪製到顯示器上。 默認 DirectSound 裝置篩選器會使用 DirectSound 播放音訊數據流。
應用程式不需要管理這所有數據流。 相反地,篩選是由稱為 Filter Graph Manager 的高階元件所控制。 應用程式會進行高階 API 呼叫,例如「執行」(透過圖形移動資料)或「停止」(停止資料流)。 如果您需要進一步控制串流作業,您可以直接透過 COM 介面存取篩選。 Filter Graph 管理員也會將事件通知傳遞至應用程式。
Filter Graph Manager 也提供另一個用途:它提供方法讓應用程式藉由將篩選條件連接在一起來建置篩選圖形。 (DirectShow 也提供各種輔助物件,可簡化此過程。文件中會詳細說明這些內容。)
撰寫 DirectShow 應用程式
概括而言,任何 DirectShow 應用程式都必須執行三項工作。 下圖說明這些。
- 應用程式會建立 Filter Graph Manager 的實例。
- 應用程式會使用 Filter Graph Manager 來建置篩選圖形。 圖形中的確切篩選集將取決於應用程式。
- 應用程式會使用 Filter Graph Manager 來控制篩選圖形,並透過篩選串流數據。 在此過程中,應用程式也會回應 Filter Graph Manager 的事件。
處理完成時,應用程式會釋放 Filter Graph Manager 和所有篩選。
DirectShow 是以 COM 為基礎;Filter Graph Manager 和篩選條件都是 COM 物件。 開始進行 DirectShow 程式設計之前,您應該先大致瞭解 COM 用戶端程序設計。 有許多關於 COM 程式設計的書籍可供使用。
若要開始使用 DirectShow,請閱讀 如何播放檔案一文,其中提供簡單的控制台應用程式來播放視訊檔案。 本節 關於 DirectShow 會更詳細地說明 DirectShow 架構,而本節 使用 DirectShow 會檢查 DirectShow 支援的主要案例,例如擷取、視訊編輯、DVD 播放和電視。