<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 基于Directshow的H.264流媒體播放器設(shè)計(jì)

          基于Directshow的H.264流媒體播放器設(shè)計(jì)

          作者: 時(shí)間:2011-03-04 來(lái)源:網(wǎng)絡(luò) 收藏

          本Filter設(shè)計(jì)主要流程如下:
          (1)Filter注冊(cè)信息
          定義類(lèi)工廠模板,填寫(xiě)Filter的注冊(cè)信息;同時(shí)實(shí)現(xiàn)DLL文件所必須實(shí)現(xiàn)的注冊(cè)和反注冊(cè)函數(shù):DLLRegisterServer和DLLUnregisterSe-rver。
          (2)框架函數(shù)的實(shí)現(xiàn)
          實(shí)現(xiàn)函數(shù)CreateInstanee,用于創(chuàng)建Filter對(duì)象實(shí)例;實(shí)現(xiàn)函數(shù)CheeklnputType,用于對(duì)輸入Pin上的媒體類(lèi)型檢查;實(shí)現(xiàn)函數(shù)Transfo-rm,用于H.264的解碼操作;實(shí)現(xiàn)函數(shù)NonDelegafingQueryIntefface,用于暴露Filter支持的自定義接口,使應(yīng)用程序可以設(shè)置解碼器的參數(shù);實(shí)現(xiàn)函數(shù)CompleteConnect,可以在輸入Pin成功連接后取得媒體類(lèi)型描述,并將輸入數(shù)據(jù)的格式設(shè)置給應(yīng)用邏輯控制對(duì)象;實(shí)現(xiàn)函數(shù)St-artStreaming和StopStreaming,可以分別調(diào)用應(yīng)用控制邏輯對(duì)象的相應(yīng)函數(shù),進(jìn)行流處理的初始化和反初始化操作。
          (3)邏輯控制類(lèi)的實(shí)現(xiàn)
          邏輯控制類(lèi)是本Filter設(shè)計(jì)的核心,框架函數(shù)和自定義接口函數(shù)的相關(guān)操作都是委托給邏輯控制類(lèi)來(lái)實(shí)現(xiàn)的。該類(lèi)實(shí)現(xiàn)了H.264.的解碼參數(shù)的設(shè)置與解碼操作,主要調(diào)用封裝了H.264解碼的C++類(lèi)來(lái)實(shí)現(xiàn)。
          利用ffmpeg庫(kù)進(jìn)行H.264解碼時(shí),需要自定義兩個(gè)關(guān)鍵函數(shù):open_net_file()和read_buffer_frame()。其中,open_net_file()函數(shù)完成與流媒體服務(wù)器的連接,接收指定流媒體文件的流相關(guān)信息,并返回類(lèi)型為AVFormatContext結(jié)構(gòu)體的值。read_buffer_frame()函數(shù)從bu-ffer緩沖中讀取一幀數(shù)據(jù),并交由庫(kù)函數(shù)avcodec_decode_video()解碼。
          (4)自定義接口的實(shí)現(xiàn)
          將Filter類(lèi)從自定義接口類(lèi)派生,并聲明自定義接口的所有接口方法;然后在Filter類(lèi)的實(shí)現(xiàn)文件中實(shí)現(xiàn)這些接口法,其實(shí)大都是調(diào)用應(yīng)用邏輯控制類(lèi)的相應(yīng)函數(shù);最后在函數(shù)NonDelegatingQueryInterface中暴露我們的自定義接口。
          3.4 的設(shè)計(jì)
          采用Directshow應(yīng)用框架,采取界面、控制邏輯和數(shù)據(jù)分離的三層程序設(shè)計(jì)方法。界面類(lèi)直接從標(biāo)準(zhǔn)的對(duì)話(huà)框類(lèi)CDialog派生,在界面類(lèi)中定義兩個(gè)自定義類(lèi):數(shù)據(jù)封裝類(lèi)和邏輯控制類(lèi)。界面類(lèi)表達(dá)一種用戶(hù)操作邏輯;數(shù)據(jù)封裝類(lèi)集中管理各種參數(shù);邏輯控制類(lèi)具體實(shí)現(xiàn)業(yè)務(wù)應(yīng)用邏輯。采取Directshow應(yīng)用框架,不必關(guān)心數(shù)據(jù)如何輸入和輸出,這些問(wèn)題都由Filter框架負(fù)責(zé),只需更多的關(guān)注數(shù)據(jù)處理的算法實(shí)現(xiàn)、效率優(yōu)化等問(wèn)題。采取界面、控制邏輯和數(shù)據(jù)分離的設(shè)計(jì)結(jié)構(gòu),不僅使程序框架清晰、容易被人理解,而且具有良好的移植性和擴(kuò)展性。
          基于Filter Graph Manager構(gòu)建包含網(wǎng)絡(luò)源Filter和H.264解碼Filter的Filter Graph,即可實(shí)現(xiàn)網(wǎng)絡(luò)流媒體的播放。界面類(lèi)實(shí)現(xiàn)視頻顯示界面與用戶(hù)的操作交互,控制邏輯可以控制視頻的播放、暫停、停止、解碼參數(shù)設(shè)置等,數(shù)據(jù)類(lèi)實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作管理。

          本文引用地址:http://www.ex-cimer.com/article/166218.htm

          4 結(jié)束語(yǔ)
          本流媒體播放器系統(tǒng)采用了Directshow應(yīng)用框架和H.264視頻編解碼標(biāo)準(zhǔn),能很好的實(shí)現(xiàn)網(wǎng)絡(luò)流媒體視頻的播放,具有結(jié)構(gòu)清晰、良好的可擴(kuò)展性與可移植性。由于WINCE系統(tǒng)是微軟提供的嵌入式實(shí)時(shí)操作系統(tǒng),提供了對(duì)Directshow的應(yīng)用支持,故本系統(tǒng)也可以很好的移植到win-ce的嵌入式應(yīng)用平臺(tái),實(shí)現(xiàn)嵌入式端的流媒體視頻播放。同時(shí),本流媒體播放系統(tǒng)也可很好地移植到視頻點(diǎn)播系統(tǒng)中,因其采用高壓縮比、低碼率的H.264視頻編解碼標(biāo)準(zhǔn)。能有效減少網(wǎng)絡(luò)負(fù)載、減小帶寬,從而減輕網(wǎng)絡(luò)對(duì)流媒體傳輸中所存在的丟包、抖動(dòng)、延時(shí)等影響。


          上一頁(yè) 1 2 3 4 下一頁(yè)

          關(guān)鍵詞: 播放器

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();