基于Directshow的H.264流媒體播放器設(shè)計
利用ffmpeg庫進行H.264解碼時,需要自定義兩個關(guān)鍵函數(shù):open_net_file()和read_buffer_frame()。其中,open_net_file()函數(shù)完成與流媒體服務(wù)器的連接,接收指定流媒體文件的流相關(guān)信息,并返回類型為AVFormatContext結(jié)構(gòu)體的值。read_buffer_frame()函數(shù)從bu-ffer緩沖中讀取一幀數(shù)據(jù),并交由庫函數(shù)avcodec_decode_video()解碼。
(4)自定義接口的實現(xiàn)
將Filter類從自定義接口類派生,并聲明自定義接口的所有接口方法;然后在Filter類的實現(xiàn)文件中實現(xiàn)這些接口法,其實大都是調(diào)用應(yīng)用邏輯控制類的相應(yīng)函數(shù);最后在函數(shù)NonDelegatingQueryInteRFace中暴露我們的自定義接口。
3.4播放器的設(shè)計
播放器采用DirectsHow應(yīng)用框架,采取界面、控制邏輯和數(shù)據(jù)分離的三層程序設(shè)計方法。界面類直接從標(biāo)準(zhǔn)的對話框類CDialog派生,在界面類中定義兩個自定義類:數(shù)據(jù)封裝類和邏輯控制類。界面類表達一種用戶操作邏輯;數(shù)據(jù)封裝類集中管理各種參數(shù);邏輯控制類具體實現(xiàn)業(yè)務(wù)應(yīng)用邏輯。采取Directshow應(yīng)用框架,不必關(guān)心數(shù)據(jù)如何輸入和輸出,這些問題都由Filter框架負責(zé),只需更多的關(guān)注數(shù)據(jù)處理的算法實現(xiàn)、效率優(yōu)化等問題。采取界面、控制邏輯和數(shù)據(jù)分離的設(shè)計結(jié)構(gòu),不僅使程序框架清晰、容易被人理解,而且具有良好的移植性和擴展性。
播放器基于FilterGraphManager構(gòu)建包含網(wǎng)絡(luò)源Filter和H.264解碼Filter的FilterGraph,即可實現(xiàn)網(wǎng)絡(luò)流媒體的播放。界面類實現(xiàn)視頻顯示界面與用戶的操作交互,控制邏輯可以控制視頻的播放、暫停、停止、解碼參數(shù)設(shè)置等,數(shù)據(jù)類實現(xiàn)對數(shù)據(jù)的操作管理。
4結(jié)束語
本流媒體播放器系統(tǒng)采用了Directshow應(yīng)用框架和H.264視頻編解碼標(biāo)準(zhǔn),能很好的實現(xiàn)網(wǎng)絡(luò)流媒體視頻的播放,具有結(jié)構(gòu)清晰、良好的可擴展性與可移植性。由于WINCE系統(tǒng)是微軟提供的嵌入式實時操作系統(tǒng),提供了對Directshow的應(yīng)用支持,故本系統(tǒng)也可以很好的移植到win-ce的嵌入式應(yīng)用平臺,實現(xiàn)嵌入式端的流媒體視頻播放。同時,本流媒體播放系統(tǒng)也可很好地移植到視頻點播系統(tǒng)中,因其采用高壓縮比、低碼率的H.264視頻編解碼標(biāo)準(zhǔn)。能有效減少網(wǎng)絡(luò)負載、減小帶寬,從而減輕網(wǎng)絡(luò)對流媒體傳輸中所存在的丟包、抖動、延時等影響。
c++相關(guān)文章:c++教程
p2p機相關(guān)文章:p2p原理
評論