DirectShow 應用程式程式設計簡介
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對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 管理員也提供另一個用途:它提供方法讓應用程式藉由將篩選準則連接在一起來建置篩選圖形。 (DirectShow 也提供各種協助程式物件,以簡化此程式。這些內容會在 documentation.) 中徹底說明
撰寫 DirectShow 應用程式
大致來說,任何 DirectShow 應用程式都必須執行三項工作。 下圖說明這些專案。
- 應用程式會建立 Filter Graph Manager 的實例。
- 應用程式會使用 Filter Graph 管理員來建置篩選圖形。 圖形中的確切篩選集將取決於應用程式。
- 應用程式會使用 Filter Graph 管理員來控制篩選圖形,並透過篩選串流資料。 在此程式中,應用程式也會回應來自 Filter Graph 管理員的事件。
處理完成時,應用程式會釋放 Filter Graph Manager 和所有篩選。
DirectShow 是以 COM 為基礎;Filter Graph 管理員和篩選準則都是 COM 物件。 開始程式設計 DirectShow 之前,您應該先大致瞭解 COM 用戶端程式設計。 有許多關於 COM 程式設計的書籍可供使用。
若要開始使用 DirectShow,請閱讀 如何播放檔案一文,其中提供簡單的主控台應用程式來播放視訊檔案。 關於 DirectShow一節會更詳細地說明 DirectShow 架構,而使用 DirectShow一節會檢查 DirectShow 支援的主要案例,例如擷取、視訊編輯、DVD 播放和電視。