DirectShow系統概述

       流媒體的處理,以其複雜性和技術性,一向廣受工業界的關注。特別伴隨着因特網的普及,流媒體在網絡上的廣泛應用,怎樣使流媒體的處理變得簡單而富有成效逐漸成爲了焦點問題。選擇一種合適的應用方案,事半功倍。此時,微軟的DirectShow,給了我們一個不錯的選擇。
  DirectShow是微軟公司提供的一套在Windows平臺上進行流媒體處理的開發包,與DirectX開發包一起發佈。目前,DirectX最新版本爲8.1。
  那麼,DirectShow能夠做些什麼呢?且看,DirectShow爲多媒體流的捕捉和回放提供了強有力的支持。運用DirectShow,我們可以很方便地從支持WDM驅動模型的採集卡上捕獲數據,並且進行相應的後期處理乃至存儲到文件中。它廣泛地支持各種媒體格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒體數據的回放變得輕而易舉。另外,DirectShow還集成了DirectX其它部分(比如DirectDraw、DirectSound)的技術,直接支持DVD的播放,視頻的非線性編輯,以及與數字攝像機的數據交換。更值得一提的是,DirectShow提供的是一種開放式的開發環境,我們可以根據自己的需要定製自己的組件。
  接下去,我們需要對DirectShow系統有個整體的印象。參見以下DirectShow的系統示意圖:
        圖中央最大的一塊即是DirectShow系統。DirectShow使用一種叫Filter Graph的模型來管理整個數據流的處理過程;參與數據處理的各個功能模塊叫做Filter;各個Filter在Filter Graph中按一定的順序連接成一條“流水線”協同工作。大家可以看到,按照功能來分,Filter大致分爲三類:Source Filters、Transform Filters和Rendering Filters。Source Filters主要負責取得數據,數據源可以是文件、因特網、或者計算機裏的採集卡、數字攝像機等,然後將數據往下傳輸;Transform Fitlers主要負責數據的格式轉換、傳輸;Rendering Filtes主要負責數據的最終去向,我們可以將數據送給聲卡、顯卡進行多媒體的演示,也可以輸出到文件進行存儲。值得注意的是,三個部分並不是都只有一個Filter去完成功能。恰恰相反,每個部分往往是有幾個Fitler協同工作的。比如,Transform Filters可能包含了一個Mpeg的解碼Filter、以及視頻色彩空間的轉換Filter、音頻採樣頻率轉換Filter等等。除了系統提供的大量Filter外,我們可以定製自己的Filter,以完成我們需要的功能。下圖是一條典型的Avi文件回放Filter Graph鏈路:
    在DirectShow系統之上,我們看到的,即是我們的應用程序(Application)。應用程序要按照一定的意圖建立起相應的Filter Graph,然後通過Filter Graph Manager來控制整個的數據處理過程。DirectShow能在Filter Graph運行的時候接收到各種事件,並通過消息的方式發送到我們的應用程序。這樣,就實現了應用程序與DirectShow系統之間的交互。下圖給出了DirectShow應用程序開發的一般過程:
    以上簡單介紹了DirectShow的系統結構,希望大家對這個強勁的應用框架已經有了大概的認識。如果你有興趣,可以詳細研究DirectX的幫助文檔。DirectShow是一個強大的開發包;另外,它是基於COM的,因此要求程序員具有COM編程的一些基本知識。關於如何深入學習DirectShow應用結構以及開發自己的Filter,請參閱筆者的後續文章。筆者將從編程的角度,詳細講述來源於實際工作中的經驗之談。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章