DirectShow 的幾個(gè)接口說(shuō)明
(1) IGraphBuilder接口
用于構(gòu)造Filter Graph的接口,建立和管理一系列的Filter,過(guò)濾和處理源媒體流。
(2) IMediaControl接口
用于控制多媒體流在Filter Graph中的流動(dòng),如流的啟動(dòng)和停止。
(3) IMediaEvent接口
用于捕獲播放過(guò)程中發(fā)生的事件,并通知應(yīng)用程序,如EC_COMPLETE等。
(4) IVideoWindow接口
用于控制視頻窗口的屬性。
(5) IMeadiaSeeking接口
用于查找媒體的接口,定位流媒體,控制多媒體數(shù)據(jù)播放提供精確控制。
(6) IBaseFilter接口
從ImediaFilter接口繼承,用來(lái)定義一個(gè)具體的過(guò)濾器指針,并對(duì)多媒體數(shù)據(jù)進(jìn)行處理。
(7) IPin接口
用于管理兩個(gè)過(guò)濾器之間的Pin,從而連接過(guò)濾器。
(8) IsampleGrabberCB接口
是Sample Grabber過(guò)濾器的一個(gè)接口,用于當(dāng)流媒體數(shù)據(jù)通過(guò)過(guò)濾器時(shí)進(jìn)行采樣以獲得幀圖象。
Filter必須加入到Filter Graph并接入到工作鏈路中才能發(fā)揮作用。
如想繞過(guò)Filter Graph而直接使用Filter實(shí)現(xiàn)的功能模塊,那就要將Filter功能
移植成DirectX媒體對(duì)象(DMO)。
Filter有3種狀態(tài):停止、暫停和運(yùn)行。
Filter Chain是相互連接著的一條Filter鏈路,并且鏈路中的每個(gè)Filter全都有一個(gè)處于“已連接”狀態(tài)的
輸入Pin,至多有一個(gè)處于“已連接”狀態(tài)的輸出Pin,這條Filter鏈路中的數(shù)據(jù)流不依賴鏈路外的其他Filter。
Filter Chain通過(guò)IFilterChain接口來(lái)進(jìn)行相關(guān)操作。
當(dāng)Filter Graph處于運(yùn)行狀態(tài)下,F(xiàn)ilter Chain可以在運(yùn)行和停止?fàn)顟B(tài)之間切換;
當(dāng)Filter Graph處于暫停狀態(tài)下,F(xiàn)ilter Chain可以在暫停和停止?fàn)顟B(tài)之間切換。
Filter Chain只有兩種狀態(tài)轉(zhuǎn)換。
Filter的數(shù)據(jù)傳送
Filter之間以Sample的形式傳送數(shù)據(jù)。
Sample是一個(gè)封裝了一定大小數(shù)據(jù)內(nèi)存的COM組件。
用于數(shù)據(jù)傳輸?shù)囊话闶禽斎雙in上實(shí)現(xiàn)的IMemInputPin接口。