來源:http://blog.csdn.net/happydeer/archive/2003/01/04/8769.aspx
流媒體的處理,以其復(fù)雜性和技術(shù)性,一向廣受工業(yè)界的關(guān)注。特別伴隨著因特網(wǎng)的普及,流媒體在網(wǎng)絡(luò)上的廣泛應(yīng)用,怎樣使流媒體的處理變得簡單而富有成效逐漸成為了焦點問題。選擇一種合適的應(yīng)用方案,事半功倍。此時,微軟的DirectShow,給了我們一個不錯的選擇。
DirectShow是微軟公司提供的一套在Windows平臺上進行流媒體處理的開發(fā)包,與DirectX開發(fā)包一起發(fā)布。目前,DirectX最新版本為9.0。
那么,DirectShow能夠做些什么呢?且看,DirectShow為多媒體流的捕捉和回放提供了強有力的支持。運用DirectShow,我們可以很方便地從支持WDM驅(qū)動模型的采集卡上捕獲數(shù)據(jù),并且進行相應(yīng)的后期處理乃至存儲到文件中。它廣泛地支持各種媒體格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒體數(shù)據(jù)的回放變得輕而易舉。另外,DirectShow還集成了DirectX其它部分(比如DirectDraw、DirectSound)的技術(shù),直接支持DVD的播放,視頻的非線性編輯,以及與數(shù)字攝像機的數(shù)據(jù)交換。更值得一提的是,DirectShow提供的是一種開放式的開發(fā)環(huán)境,我們可以根據(jù)自己的需要定制自己的組件。
接下去,我們需要對DirectShow系統(tǒng)有個整體的印象。參見以下DirectShow的系統(tǒng)示意圖:

圖中央最大的一塊即是DirectShow系統(tǒng)。DirectShow使用一種叫Filter Graph的模型來管理整個數(shù)據(jù)流的處理過程;參與數(shù)據(jù)處理的各個功能模塊叫做Filter;各個Filter在Filter Graph中按一定的順序連接成一條“流水線”協(xié)同工作。大家可以看到,按照功能來分,F(xiàn)ilter大致分為三類:Source Filters、Transform Filters和Rendering Filters。Source Filters主要負責(zé)取得數(shù)據(jù),數(shù)據(jù)源可以是文件、因特網(wǎng)、或者計算機里的采集卡、數(shù)字攝像機等,然后將數(shù)據(jù)往下傳輸;Transform Fitlers主要負責(zé)數(shù)據(jù)的格式轉(zhuǎn)換、傳輸;Rendering Filtes主要負責(zé)數(shù)據(jù)的最終去向,我們可以將數(shù)據(jù)送給聲卡、顯卡進行多媒體的演示,也可以輸出到文件進行存儲。值得注意的是,三個部分并不是都只有一個Filter去完成功能。恰恰相反,每個部分往往是有幾個Fitler協(xié)同工作的。比如,Transform Filters可能包含了一個Mpeg的解碼Filter、以及視頻色彩空間的轉(zhuǎn)換Filter、音頻采樣頻率轉(zhuǎn)換Filter等等。除了系統(tǒng)提供的大量Filter外,我們可以定制自己的Filter,以完成我們需要的功能。下圖是一條典型的Avi文件回放Filter Graph鏈路:

在DirectShow系統(tǒng)之上,我們看到的,即是我們的應(yīng)用程序(Application)。應(yīng)用程序要按照一定的意圖建立起相應(yīng)的Filter Graph,然后通過Filter Graph Manager來控制整個的數(shù)據(jù)處理過程。DirectShow能在Filter Graph運行的時候接收到各種事件,并通過消息的方式發(fā)送到我們的應(yīng)用程序。這樣,就實現(xiàn)了應(yīng)用程序與DirectShow系統(tǒng)之間的交互。下圖給出了DirectShow應(yīng)用程序開發(fā)的一般過程:

以上簡單介紹了DirectShow的系統(tǒng)結(jié)構(gòu),希望大家對這個強勁的應(yīng)用框架已經(jīng)有了大概的認識。如果你有興趣,可以詳細研究DirectX的幫助文檔。DirectShow是一個強大的開發(fā)包;另外,它是基于COM的,因此要求程序員具有COM編程的一些基本知識。關(guān)于如何深入學(xué)習(xí)DirectShow應(yīng)用結(jié)構(gòu)以及開發(fā)自己的Filter,請參閱筆者的后續(xù)文章。筆者將從編程的角度,詳細講述來源于實際工作中的經(jīng)驗之談。