共用方式為


DirectShow 應用程式程式設計簡介

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngine和媒體基金會中的 音訊/視訊擷取取代。 這些功能已針對 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 Manager 也提供另一個用途:它提供方法讓應用程式藉由將篩選條件連接在一起來建置篩選圖形。 (DirectShow 也提供各種輔助物件,可簡化此過程。文件中會詳細說明這些內容。)

撰寫 DirectShow 應用程式

概括而言,任何 DirectShow 應用程式都必須執行三項工作。 下圖說明這些。

一般 DirectShow 應用程式

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

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

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

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