《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于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亚洲国产精品_日韩亚洲一区二区
国产精品久久久久免费a∨大胸| 狠狠干综合网| 巨乳诱惑日韩免费av| 午夜精品福利电影| 日韩午夜av在线| 亚洲激情一区| 亚洲电影有码| 欧美在线视频观看| 欧美一区二区三区四区在线观看地址 | 欧美久久在线| 欧美激情按摩| 欧美精品videossex性护士| 你懂的成人av| 欧美国产日韩二区| 欧美激情精品久久久久久蜜臀| 欧美电影免费观看网站| 欧美成人午夜激情| 欧美国产精品一区| 欧美日本国产| 国产精品久久久久久久久免费桃花 | 久久久久久九九九九| 久久米奇亚洲| 免费亚洲电影在线观看| 欧美成人a视频| 欧美精品一区二| 欧美日韩理论| 国产精品乱子久久久久| 国产亚洲精品一区二555| 国语自产精品视频在线看一大j8| 很黄很黄激情成人| 亚洲国产精品成人综合| 亚洲精品乱码久久久久久按摩观| 亚洲精品九九| 国产精品99久久久久久人| 亚洲午夜精品一区二区| 午夜精品婷婷| 亚洲国产成人久久| 99国产欧美久久久精品| 亚洲欧美日韩精品在线| 久久久亚洲人| 欧美精品成人91久久久久久久| 欧美视频你懂的| 国产麻豆视频精品| 亚洲国产高清一区| 一区二区免费看| 欧美亚洲一区二区在线| 亚洲欧洲综合另类| 亚洲自拍偷拍麻豆| 久久影视三级福利片| 欧美精品二区三区四区免费看视频| 欧美日韩在线第一页| 国产亚洲福利社区一区| 影音先锋另类| 中文av字幕一区| 久久成人18免费观看| 亚洲最新中文字幕| 久久精品国产v日韩v亚洲| 欧美极品色图| 国产欧美日韩在线播放| 亚洲激情自拍| 篠田优中文在线播放第一区| 亚洲精选大片| 欧美在线啊v| 欧美精品乱人伦久久久久久| 国产日韩精品视频一区二区三区| 亚洲国产日韩欧美在线图片| 亚洲一级二级| 亚洲青色在线| 久久国产免费看| 欧美日韩成人一区| 黄色成人av网站| 在线亚洲一区二区| 亚洲黄色影院| 性欧美video另类hd性玩具| 欧美.www| 国产深夜精品| 中文国产成人精品久久一| 亚洲激情在线视频| 欧美一区影院| 欧美日韩四区| 在线国产日韩| 欧美伊久线香蕉线新在线| 亚洲天堂成人在线视频| 欧美成人免费网站| 国产性猛交xxxx免费看久久| 一本色道久久综合精品竹菊| 亚洲欧洲久久| 久久精品国产一区二区电影 | 欧美性色综合| 亚洲激情中文1区| 久久精品一二三| 亚洲欧美中日韩| 欧美日韩成人综合| 亚洲第一区在线观看| 欧美一区二区视频在线| 亚洲影院免费| 欧美日韩p片| 亚洲福利视频网| 欧美一区影院| 欧美在线免费视频| 欧美丝袜第一区| 亚洲人成在线播放网站岛国| 亚洲国产精品日韩| 久久久久免费| 国产热re99久久6国产精品| 在线视频欧美一区| 一区二区日韩伦理片| 欧美成人一区二区在线| 在线欧美日韩精品| 亚洲国产精品激情在线观看| 久久久久高清| 国产日韩欧美在线一区| 午夜精品久久久久久久白皮肤| 亚洲欧美日韩精品久久久| 国产精品久99| 一区二区不卡在线视频 午夜欧美不卡' | 亚洲精品在线观看视频| 欧美国产1区2区| 亚洲春色另类小说| 亚洲国产另类久久精品| 玖玖在线精品| 一区二区三区在线免费视频| 欧美一区二区视频97| 久久久精品999| 国产自产2019最新不卡| 久久精品青青大伊人av| 久久久噜噜噜久久中文字幕色伊伊| 国产欧美一二三区| 欧美伊人久久久久久午夜久久久久| 久久久久久久国产| 一区二区视频免费在线观看| 亚洲国产mv| 欧美国产激情二区三区| 亚洲人成网站在线观看播放| 国产精品99久久不卡二区| 欧美日韩一区二区三区四区五区 | 欧美日韩裸体免费视频| 一区二区三区免费网站| 小黄鸭精品aⅴ导航网站入口| 国产精品综合视频| 久久国产精品久久国产精品| 美女网站久久| 亚洲精品视频免费| 亚洲在线一区二区| 国产日韩在线视频| 亚洲国产精品电影在线观看| 欧美激情按摩| 亚洲一区二区网站| 久久久久久亚洲精品杨幂换脸| 极品裸体白嫩激情啪啪国产精品| 91久久黄色| 欧美日韩综合网| 亚洲欧美精品一区| 久久最新视频| 亚洲精品永久免费精品| 亚洲欧美日本日韩| 国产在线精品一区二区中文| 亚洲精品乱码久久久久久日本蜜臀 | 欧美另类videos死尸| 亚洲一二三区在线观看| 久久久久久久久久久久久女国产乱 | 亚洲国产欧美一区二区三区久久| 一区二区久久久久久| 国产精品日韩二区| 久久精品一本久久99精品| 欧美精品一区在线| 亚洲一区二区三区欧美| 久久久噜噜噜久久人人看| 亚洲欧洲精品一区二区| 午夜精品一区二区三区在线视| 黑人操亚洲美女惩罚| 中文av一区特黄| 国产亚洲免费的视频看| 99国产精品久久| 国产视频一区二区三区在线观看| 亚洲精选久久| 国产农村妇女毛片精品久久莱园子| 亚洲二区在线视频| 欧美日在线观看| 久久精品一二三| 国产精品久久网站| 亚洲精品久久久久久久久久久久久 | 亚洲日韩欧美一区二区在线| 欧美性大战xxxxx久久久| 欧美专区18| 欧美日韩在线大尺度| 亚洲丶国产丶欧美一区二区三区| 欧美日韩亚洲在线| 久久精品导航| 国产精品久久久久久久午夜| 亚洲黄色尤物视频| 国产伦精品一区二区三区照片91| 亚洲日本电影| 国产日韩综合| 亚洲天天影视| 亚洲高清不卡一区| 久久久久久婷| 亚洲一区免费视频| 欧美日韩亚洲高清一区二区| 亚洲国产专区校园欧美|