《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于DirectShow的視頻廣播系統設計與實現
基于DirectShow的視頻廣播系統設計與實現
邵 林 曹漢強
摘要: 分析了DirectShow技術的結構和原理,采用DirectShow開發了視頻廣播系統,并介紹了其軟件設計方案和實現方法。
關鍵詞: DirectShow 視頻廣播
Abstract:
Key words :

  摘  要: 分析了DirectShow技術的結構和原理,采用DirectShow開發了視頻廣播系統,并介紹了其軟件設計方案和實現方法。

  關鍵詞: DirectShow  視頻廣播

 

1 視頻廣播系統的結構

  視頻廣播系統為用戶提供實時語音和視頻數據,服務方式類似于傳統的有線電視網。視頻廣播系統由三部分組成:廣播服務器、轉發服務器和客戶端。廣播服務器負責音視頻數據的采集、壓縮和發送。轉發服務器負責轉發音視頻數據。客戶端負責音視頻數據的接收、解碼和回放。典型的視頻廣播系統結構如圖1所示。

 

 

2 DirectShow程序設計原理

  微軟的DirectShow技術是在Windows平臺下開發流媒體程序的有效方法。DirectShow將流媒體處理劃分為若干個連續的步驟。這些步驟包括音視頻數據的采集、傳輸、分離、合并、編碼、解碼和回放等。一個具體的流媒體處理過程可以由其中的幾個步驟組成。濾波器(Filter)是DirectShow中最基本的單元,不同的濾波器實現不同的功能,可以處理一個或多個步驟。DirectShow定義了一系列的濾波器,每個濾波器需要實現若干個接口。開發人員可以創建自己的濾波器,也可以使用微軟或第三方提供的濾波器。應用程序連接若干個濾波器進行指定的流媒體處理。數據可以在不同的濾波器間傳輸,傳輸方向一般是單向的。如果數據從濾波器A傳向濾波器B,則稱濾波器A為上游濾波器,濾波器B為下游濾波器。傳輸的數據加有時間戳,用來同步音視頻數據的回放。在DirectShow中,濾波器可以分為3類。

  (1)源濾波器(Source Filter):從數據源獲取原始數據。不同的源濾波器可以處理一類或多類數據源,包括本地文件、網絡和數據采集卡等。

  (2)變換濾波器(Transform Filter):從上游濾波器接收數據,處理后提交給下游濾波器。變換濾波器可以進行數據的壓縮解壓、復合分離或者其他處理。

  (3)終端濾波器(Render Filter):對數據進行最后的處理,可以顯示視頻、回放音頻、保存數據或者將數據發送到網絡等。

  利用DirectShow開發流媒體程序的框架如圖2所示。

 

 

3 系統設計

  視頻廣播系統的軟件設計有2種方案可供選擇:(1)不使用DirectShow,在服務器端采用VFW或設備廠商提供的二次開發包采集數據,在客戶端采用GDI或DirectDraw顯示。(2)采用DirectShow的設計方案。服務器軟件設計中包括源濾波器以采集視頻,變換濾波器用于壓縮視頻,終端濾波器用于發送壓縮數據;客戶端軟件設計也相應地包括源濾波器以接收網絡數據,變換濾波器用于解壓視頻數據,終端濾波器用于顯示視頻。

  采用VFW進行視頻捕獲效率較低,捕獲幀率只能達到15幀/秒。而采用設備廠商提供的二次開發包雖然可以獲取較高的效率,但不同廠商提供的開發包風格各異,使用不同設備時需要重復編寫代碼。DirectShow方法可以達到較高的效率,同時在DirectShow中對硬件設備進行了封裝,開發人員不需要重復編寫代碼。由于DirectShow已經在流媒體程序設計中得到普及,網絡上有大量第三方提供的編解碼濾波器,因此基于DirectShow設計的系統能夠直接使用這些濾波器,從而縮短開發時間。同時因為有較多的編碼方式可以選擇,所以系統能夠適應更多的應用環境。此外,DirectShow在處理視頻數據回放時,盡可能采用DirectDraw技術,可有效地利用用戶的顯卡設備??梢?采用DirectShow設計的系統容易升級和維護,程序具有較好的性能。

4 系統實現中的關鍵技術

  (1)視頻捕獲

  視頻廣播的數據可能來自視頻采集卡、USB攝像頭或者TV卡等輸入設備,因此服務器軟件需要在不同的硬件平臺上工作。DirectShow使用一類特殊的源濾波器對硬件設備進行封裝。這類濾波器工作在用戶模式下,使用方法與普通的濾波器相同,在內部完成與硬件驅動程序的交互,實現內核模式和用戶模式間的數據交換。DirectShow支持多類設備,如VFW Capture Filter封裝早期的VFW視頻采集設備,KsProxy Filter封裝WDM驅動硬件等。服務器軟件啟動時通過DirectShow提供的設備枚舉功能(Enumerating Devices)查詢已安裝的所有視頻采集設備,不同的設備選擇不同的捕獲濾波器進行數據采集。如果采集設備使用WDM驅動模式,在捕捉濾波器上游還需要尋找是否存在其他特定的濾波器,支持硬件提供的附加功能。如使用PV143四路采集卡時,在捕獲濾波器的上游需要一個流十字濾波器(Crossbar Filter),對視頻輸入端口進行選擇。

  (2)圖標的實現

  某些場合需要在客戶端的解碼圖像中加入圖標(如公司或學校的標志)和文本(如重要通知)。這時可以在解碼濾波器和顯示濾波器間添加一個變換濾波器處理圖標和文本。DirectShow中的變換濾波器有2種工作方式:Copy模式和InPlace模式。在Copy模式下,濾波器接收上游濾波器提供的數據,處理后拷貝到自己的緩沖區,然后將新緩沖區發送到下游濾波器。在InPlace模式下,濾波器處理完所接收數據后直接發送到下游的濾波器。由于多媒體數據量較大,數據拷貝會消耗較多時間,因此在設計變換濾波器時應首先考慮InPlace模式。但在某些場合,如設計編解碼濾波器,只能采用Copy模式。

  圖標文本濾波器放置在解碼濾波器和顯示濾波器之間,輸入數據是RGB或YUV格式的未壓縮圖像,直接修改其中部分數據就可在圖像中顯示圖標或文本,因此采用InPlace模式設計濾波器即可。DirectShow自帶一個InPalce的變換濾波器Sample Grabber Filter。Sample Grabber Filter提供一個ISampleGrabber的接口。ISampleGrabber需要自定義一個ISampleGrabberCB接口,實現其中的BufferCB或SampleCB函數,然后通過ISampleGrabber接口的SetCallback函數選取ISampleGrabberCB接口設置回調函數。SetCallback的調用方法為:HRESULT SetCallback(ISampleGrabberCB*pCallback,long WhichMethodToCallback)。參數WhichMethodToCallback的值設為0時,SampleCB為回調函數;為1時,BufferCB為回調函數。在SampleCB和BufferCB中可以獲取待顯示數據,添加圖標和文本。SampleCB還可以提供顯示數據的額外信息(如數據格式),因此使用SampleCB更加靈活。

  (3)數據接收

  在DirectShow中,數據傳輸有拉(Pull)和推(Push)二種模式。在推模式下,上游濾波器決定數據傳輸,它將數據主動發送到下游濾波器中;在拉模式下,下游濾波器決定數據傳輸,它在需要數據時向上游濾波器索取,而上游濾波器不主動向下游濾波器發送數據。

  客戶端軟件中的源濾波器設計基于微軟DirectX SDK中Memfile的例子。Memfile是一個拉模式的濾波器,解碼濾波器采用循環方式向Memfile索取數據。即使Memfile中沒有有效數據,解碼濾波器依然會持續讀取。由于客戶端數據來自網絡,數據總是間斷到達,所以這種循環索取數據的程序執行效率低下,測試時CPU的占用率持續在100%,丟包的現象較為嚴重,解碼畫面不連續,有大量馬賽克。因此需要優化解碼濾波器和Memfile之間的數據傳輸。

  DirectShow的設計采用多線程機制,這里可以借鑒非阻塞套接字函數的方法進行優化。解碼濾波器在讀取數據時傳入1個CEvent變量作為信號燈使用,Memfile發現無數據可讀時鎖住CEvent,通知解碼濾波器正在等待數據,此時解碼濾波器在Cevent上等待。當Memfile中有新數據到來時釋放CEvent,解碼濾波器再次讀取數據。改進后的流程如下。

  ①解碼濾波器向Memfile索取數據。

 ?、谌绻鸐emfile有數據則跳至⑤,無數據則掛起線程。

 ?、跰emfile收到數據則喚醒線程,跳至①。

 ?、芫€程掛起超時,跳至①。

 ?、萁獯a濾波器處理數據。

  在Pentium IV、256M的機器上測試客戶端軟件,解碼濾波器采用MPEG2解碼器。測試結果顯示更新后的程序CPU占用率降至40%。

5  結束語

  在Windows平臺下,微軟的DirectShow技術是開發流媒體應用程序的有效方法。本文介紹了DirectShow程序設計的原理,采用DirectShow技術實現了一個視頻廣播系統。測試結果表明,該系統在運行時能夠達到良好效果。

 

參考文獻

1  DirectX Documentation for C++.Microsoft Corporation,2002

2  Regerson D.Inside COM.Microsoft Press,1997

3  廖義奎,王志文,韋衛星.基于視頻組播的網絡教學系統研究.廣西科學院學報,2003;19(2)

4  何頂新,周永鵬,萬淑蕓.實時網絡視頻廣播系統的設計與實現.華中科技大學學報,2001;29(3)

5  張振偉,李志淮.網絡視頻直播緩存系統設計.計算機工程,2002;28(8)

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品99久久久久久久久久久久 | 亚洲免费影视第一页| 亚洲一区二区成人| 亚洲第一免费播放区| 国产视频在线观看一区二区| 欧美日韩亚洲视频| 欧美成人按摩| 久久亚洲欧美| 欧美亚洲一区二区三区| 日韩视频一区二区三区在线播放免费观看| 午夜视频久久久久久| 一区二区免费在线播放| 在线日韩av永久免费观看| 国产区日韩欧美| 国产精品激情av在线播放| 欧美激情亚洲自拍| 久久精品一区中文字幕| 午夜在线视频观看日韩17c| 亚洲精品黄网在线观看| 亚洲国产黄色片| 欧美一区二粉嫩精品国产一线天| 亚洲深夜激情| 一本大道久久精品懂色aⅴ| 亚洲精品日产精品乱码不卡| 亚洲国产经典视频| 在线观看欧美| 国产欧美综合一区二区三区| 欧美日韩高清在线观看| 欧美精品一区二区三区四区| 欧美a级片网站| 美女精品视频一区| 美女爽到呻吟久久久久| 久久蜜桃精品| 久久久精品一区| 久久噜噜噜精品国产亚洲综合| 久久久av水蜜桃| 久久精品国语| 久久五月激情| 久久在线免费观看| 久久综合久久美利坚合众国| 久久夜色精品一区| 女人色偷偷aa久久天堂| 嫩草伊人久久精品少妇av杨幂| 久久一区二区三区av| 久久性天堂网| 欧美成人嫩草网站| 欧美激情一区二区三区蜜桃视频| 免费一级欧美片在线观看| 欧美激情精品久久久六区热门 | 亚洲黄色视屏| 日韩视频免费在线观看| 一区二区黄色| 亚洲一区欧美激情| 欧美一区二区视频观看视频| 欧美中文字幕视频在线观看| 久久久91精品国产| 欧美jjzz| 欧美视频在线视频| 国产精自产拍久久久久久蜜| 国产一区二区三区久久久久久久久| 好看的av在线不卡观看| 亚洲国产成人久久| 一区二区三区欧美日韩| 一区二区三区波多野结衣在线观看| 亚洲一区二区三区涩| 香蕉久久国产| 91久久精品久久国产性色也91| 一本色道久久综合亚洲精品不 | 国产亚洲欧美中文| 亚洲电影免费观看高清完整版在线观看| 亚洲国产精品久久久久秋霞不卡| 日韩写真在线| 午夜亚洲影视| 亚洲精品五月天| 一本久道久久综合狠狠爱| 亚洲视频在线视频| 亚洲你懂的在线视频| 久久婷婷人人澡人人喊人人爽| 欧美激情亚洲| 欧美精品1区| 国产免费观看久久| 极品尤物av久久免费看| 亚洲国产视频a| 国产视频在线观看一区二区| 韩国精品一区二区三区| 激情综合色综合久久| 日韩视频国产视频| 欧美一级视频免费在线观看| 亚洲精品日韩在线观看| 香蕉av777xxx色综合一区| 老司机凹凸av亚洲导航| 国产精品劲爆视频| 精品成人在线视频| 在线亚洲国产精品网站| 亚洲高清不卡一区| 午夜精彩国产免费不卡不顿大片| 久久亚洲一区二区| 国产精品久久91| 在线欧美电影| 欧美亚洲三区| 亚洲午夜伦理| 美女免费视频一区| 国产精品系列在线播放| 最新高清无码专区| 欧美一区二区视频在线观看2020| 99天天综合性| 老司机aⅴ在线精品导航| 国产精品嫩草99av在线| 在线看成人片| 久久精彩视频| 午夜精彩国产免费不卡不顿大片| 欧美精品18+| 亚洲成人自拍视频| 欧美一区二区成人| 午夜欧美大尺度福利影院在线看| 免费不卡中文字幕视频| 国产日本欧美视频| 91久久精品网| 久久成人在线| 亚洲欧美日韩国产另类专区| 欧美激情乱人伦| 国产精品久久一区主播| 影音先锋日韩精品| 欧美有码视频| 午夜欧美不卡精品aaaaa| 欧美日韩1区2区| 亚洲人成啪啪网站| 久久精品九九| 久久久国产成人精品| 国产精品婷婷午夜在线观看| 亚洲精品视频二区| 亚洲三级毛片| 欧美jizzhd精品欧美喷水| 一区在线观看| 亚洲第一成人在线| 久久久久久夜精品精品免费| 国产欧美 在线欧美| 亚洲欧美电影院| 亚洲欧美日韩视频一区| 欧美日韩一区二区三区四区在线观看| 亚洲国产欧美久久| 亚洲激情婷婷| 欧美大胆人体视频| 亚洲国产精品99久久久久久久久| 亚洲国产成人一区| 老司机久久99久久精品播放免费 | 免费中文字幕日韩欧美| 激情亚洲网站| 亚洲第一视频网站| 久久夜色撩人精品| 国产视频在线一区二区 | 久久精品国产96久久久香蕉 | 一本不卡影院| 国产精品va在线播放| 中日韩美女免费视频网站在线观看| 一区二区三区免费网站| 欧美日韩免费观看一区二区三区| 亚洲伦理一区| 亚洲午夜视频| 国产精品性做久久久久久| 午夜日韩激情| 久久综合九色欧美综合狠狠| **欧美日韩vr在线| 亚洲麻豆视频| 国产精品a级| 亚洲自拍偷拍麻豆| 久久久久久久网站| 国产亚洲第一区| 久久精品三级| 欧美精品aa| 一区二区三区高清不卡| 羞羞视频在线观看欧美| 国内偷自视频区视频综合| 亚洲高清一区二| 欧美日韩国产系列| 亚洲午夜高清视频| 久久www免费人成看片高清| 精品91在线| 一区二区高清| 国产欧美日韩| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美不卡在线| 99精品热6080yy久久| 欧美伊人影院| 在线播放豆国产99亚洲| 一区二区三区色| 国产亚洲欧美激情| 夜夜嗨av色一区二区不卡| 国产精品三级久久久久久电影| 亚洲国产另类久久久精品极度| 国产精品国产三级国产专播精品人| 亚洲国产精品成人久久综合一区| 国产精品第2页| 亚洲三级电影全部在线观看高清| 国产精品一区二区久久| 一区二区国产精品| 在线日韩中文字幕| 久久精品亚洲精品| 亚洲最新视频在线| 免费在线亚洲|