DirectShow系列講座之一——DirectShow系統概述 (轉)

worldblog發表於2008-01-06
DirectShow系列講座之一——DirectShow系統概述 (轉)[@more@]流的處理,以其複雜性和技術性,一向廣受工業界的關注。特別伴隨著因特網的普及,流媒體在上的廣泛應用,怎樣使流媒體的處理變得簡單而富有成效逐漸成為了焦點問題。選擇一種合適的應用方案,事半功倍。此時,的DirectShow,給了我們一個不錯的選擇。
DirectShow是微軟公司提供的一套在平臺上進行流媒體處理的開發包,與開發包一起釋出。目前,DirectX最新版本為8.1。
那麼,DirectShow能夠做些什麼呢?且看,DirectShow為多媒體流的捕捉和回放提供了強有力的支援。運用DirectShow,我們可以很方便地從支援WDM模型的採集卡上捕獲資料,並且進行相應的後期處理乃至到中。它廣泛地支援各種媒體格式,包括A、Mpeg、Avi、Dv、、Wave等等,使得多媒體資料的回放變得輕而易舉。另外,DirectShow還整合了DirectX其它部分(比如DirectDraw、DirectSound)的技術,直接支援的,影片的非線性編輯,以及與數字攝像機的資料。更值得一提的是,DirectShow提供的是一種開放式的開發環境,我們可以根據自己的需要定製自己的。
接下去,我們需要對DirectShow有個整體的印象。參見以下DirectShow的系統示意圖:
圖中央最大的一塊即是DirectShow系統。DirectShow使用一種叫Filter Graph的模型來管理整個資料流的處理過程;參與資料處理的各個功能模組叫做Filter;各個Filter在Filter Graph中按一定的順序連線成一條“流水線”協同工作。大家可以看到,按照功能來分,Filter大致分為三類: Filters、TransfoFilters和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,請參閱筆者的後續文章。筆者將從程式設計的角度,詳細講述來源於實際工作中的之談。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996730/,如需轉載,請註明出處,否則將追究法律責任。

相關文章