基于DirectShow的視頻監控系統設計分析_第1頁
基于DirectShow的視頻監控系統設計分析_第2頁
基于DirectShow的視頻監控系統設計分析_第3頁
基于DirectShow的視頻監控系統設計分析_第4頁
基于DirectShow的視頻監控系統設計分析_第5頁
已閱讀5頁,還剩53頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、PAGE PAGE 51更多相關參考論文設計文檔資源請訪問/lzj781219本參考設計材料,包含項目源代碼,設計說明書、任務書、報告書以及文獻參考翻譯等,完整的設計文件及源代碼,資料請聯系68661508。索要或訪問本參考設計材料,包含項目源代碼,設計說明書、任務書、報告書以及文獻參考翻譯等,完整的設計文件及源代碼,資料請聯系68661508。索要或訪問 農業工程學院畢 業 設 計基于DirectShow的視頻監控系統設計分析姓 名 院(系) 信息學院專業班級 信息管理與信息系統042班學 號 指導教師 職 稱 (碩士)論文答辯日期 2004年4月19日 農業工程學院教務處制學生承諾書本人承

2、諾所呈交的畢業論文是嚴格按照學校和學院有關規定完成的;論文的內容都是自己的勞動成果,沒有請人代筆;本人在畢業論文中引用他人的觀點和參考資料均加以注釋和說明。 承諾人: 摘要近年來,隨著計算機網絡,多媒體技術的快速發展,傳統的視頻監控系統正在向著網絡視頻監控系統的方向發展。本文闡述了基于DirectShow視頻監控系統的分析、設計與實現,重點討論了以DirectShow技術來實現的,在C/S(Client/Server)模式下實時傳輸并播放視頻的局域網視頻監控系統。本文從以下方面進行論述:(1)簡單介紹了視頻監控技術發展的概況與目前的形勢。 (2)就系統的開發環境和涉及的關鍵技術進行了探討并提出

3、了解決方案。(3)詳細闡述了系統的設計與實現。首先闡述了基于C/S模式的服務端、客戶端的設計構架;通過講述COM組件技術作為應用DirectShow視頻技術開發應用程序的基礎,最后引出DirectShow視頻技術的工作原理和編程實現。關鍵詞:COM組件DirectShow多線程技術TCP/UDP協議目錄 TOC o 1-3 h z u HYPERLINK l _Toc195606825 1緒論 PAGEREF _Toc195606825 h 1 HYPERLINK l _Toc195606826 1.1視頻監控系統的國內外現狀 PAGEREF _Toc195606826 h 1 HYPERLI

4、NK l _Toc195606827 1.2本論文的研究背景與實際意義 PAGEREF _Toc195606827 h 1 HYPERLINK l _Toc195606828 1.3視頻監控的發展歷程 PAGEREF _Toc195606828 h 2 HYPERLINK l _Toc195606829 1.4視頻監控系統的應用 PAGEREF _Toc195606829 h 4 HYPERLINK l _Toc195606830 1.5論文主要研究內容 PAGEREF _Toc195606830 h 5 HYPERLINK l _Toc195606831 2開發環境簡介 PAGEREF _T

5、oc195606831 h 5 HYPERLINK l _Toc195606832 2.1開發平臺及工具的選擇 PAGEREF _Toc195606832 h 5 HYPERLINK l _Toc195606833 2.2面向對象的編程思想 PAGEREF _Toc195606833 h 6 HYPERLINK l _Toc195606834 2.3多線程技術 PAGEREF _Toc195606834 h 7 HYPERLINK l _Toc195606835 3開發實現系統的技術 PAGEREF _Toc195606835 h 7 HYPERLINK l _Toc195606836 3.1

6、WinSock編程機制 PAGEREF _Toc195606836 h 7 HYPERLINK l _Toc195606837 3.1.1基于TCP協議的WinSock編程 PAGEREF _Toc195606837 h 8 HYPERLINK l _Toc195606838 3.1.2基于UDP協議的WinSock編程 PAGEREF _Toc195606838 h 10 HYPERLINK l _Toc195606839 3.2COM成組件技術與DirectShow視頻技術 PAGEREF _Toc195606839 h 11 HYPERLINK l _Toc195606840 3.2.1

7、COM組件技術 PAGEREF _Toc195606840 h 11 HYPERLINK l _Toc195606841 3.2.2DirectShow視頻技術 PAGEREF _Toc195606841 h 14 HYPERLINK l _Toc195606842 4系統構成與功能模塊設計 PAGEREF _Toc195606842 h 17 HYPERLINK l _Toc195606843 4.1系統架構與功能設計 PAGEREF _Toc195606843 h 17 HYPERLINK l _Toc195606844 4.1.1服務端架構與功能設計 PAGEREF _Toc195606

8、844 h 18 HYPERLINK l _Toc195606845 4.1.2客戶端架構與功能設計 PAGEREF _Toc195606845 h 19 HYPERLINK l _Toc195606846 4.2網絡傳輸架構 PAGEREF _Toc195606846 h 19 HYPERLINK l _Toc195606847 4.3系統通信模塊設計原理 PAGEREF _Toc195606847 h 20 HYPERLINK l _Toc195606848 4.3.1 控制信道設計原理 PAGEREF _Toc195606848 h 20 HYPERLINK l _Toc19560684

9、9 4.3.2數據信道設計原理 PAGEREF _Toc195606849 h 21 HYPERLINK l _Toc195606850 5系統終端軟件設計與實現 PAGEREF _Toc195606850 h 22 HYPERLINK l _Toc195606851 5.1系統的類層次結構 PAGEREF _Toc195606851 h 22 HYPERLINK l _Toc195606852 5.2系統的實現原理 PAGEREF _Toc195606852 h 26 HYPERLINK l _Toc195606853 5.3服務端軟件的設計與實現 PAGEREF _Toc195606853

10、 h 28 HYPERLINK l _Toc195606854 5.3.1基于DirectShow視頻采集模塊設計與實現 PAGEREF _Toc195606854 h 28 HYPERLINK l _Toc195606855 5.3.2角色控制的實現 PAGEREF _Toc195606855 h 32 HYPERLINK l _Toc195606856 5.3.3服務端與客戶端之間通訊模塊的實現 PAGEREF _Toc195606856 h 33 HYPERLINK l _Toc195606857 5.3.4開發網絡發送Filter PAGEREF _Toc195606857 h 35

11、HYPERLINK l _Toc195606858 5.3.5開發網絡接收Filter PAGEREF _Toc195606858 h 36 HYPERLINK l _Toc195606859 5.4客戶端軟件的設計與實現 PAGEREF _Toc195606859 h 36 HYPERLINK l _Toc195606860 6系統實驗測試與總結 PAGEREF _Toc195606860 h 38 HYPERLINK l _Toc195606861 6.1系統實驗測試 PAGEREF _Toc195606861 h 38 HYPERLINK l _Toc195606862 6.2總結與展望

12、 PAGEREF _Toc195606862 h 45 HYPERLINK l _Toc195606863 7結束語 PAGEREF _Toc195606863 h 46 HYPERLINK l _Toc195606864 參考文獻 PAGEREF _Toc195606864 h 47 HYPERLINK l _Toc195606865 英文摘要 PAGEREF _Toc195606865 h 48 HYPERLINK l _Toc195606866 致謝 PAGEREF _Toc195606866 h 49 HYPERLINK l _Toc195606867 仲愷農業工程學院畢業設計成績評定

13、表 PAGEREF _Toc195606867 h 50圖 目 錄 TOC h z t 標題4 c HYPERLINK l _Toc196022384 圖1DVR系統結構圖 PAGEREF _Toc196022384 h 3 HYPERLINK l _Toc196022385 圖2應用程序和WinSock的關系圖 PAGEREF _Toc196022385 h 8 HYPERLINK l _Toc196022386 圖3TCP客戶端與TCP服務端進行連接的步驟 PAGEREF _Toc196022386 h 9 HYPERLINK l _Toc196022387 圖4數據報套接字應用程序時序圖

14、 PAGEREF _Toc196022387 h 11 HYPERLINK l _Toc196022388 圖5接口、對象和類廠的圖例 PAGEREF _Toc196022388 h 11 HYPERLINK l _Toc196022389 圖6C+代碼表示COM組件 PAGEREF _Toc196022389 h 12 HYPERLINK l _Toc196022390 圖7MyObject組件對象示意圖 PAGEREF _Toc196022390 h 12 HYPERLINK l _Toc196022391 圖8接口IUnknow的3個函數 PAGEREF _Toc196022391 h

15、13 HYPERLINK l _Toc196022392 圖9類廠與COM組件對象的關系 PAGEREF _Toc196022392 h 13 HYPERLINK l _Toc196022393 圖10COM對象創建過程示意圖 PAGEREF _Toc196022393 h 14 HYPERLINK l _Toc196022394 圖113種Filter類型 PAGEREF _Toc196022394 h 15 HYPERLINK l _Toc196022395 圖12DirectShow系統(源自DirectX SDK9.0) PAGEREF _Toc196022395 h 16 HYPER

16、LINK l _Toc196022396 圖13開發DirectShow應用程序過程(源自DirectX SDK9.0) PAGEREF _Toc196022396 h 17 HYPERLINK l _Toc196022397 圖14系統總體架構 PAGEREF _Toc196022397 h 17 HYPERLINK l _Toc196022398 圖15系統服務端軟件結構 PAGEREF _Toc196022398 h 18 HYPERLINK l _Toc196022399 圖16服務端功能模塊 PAGEREF _Toc196022399 h 19 HYPERLINK l _Toc196

17、022400 圖17客戶端功能模塊 PAGEREF _Toc196022400 h 19 HYPERLINK l _Toc196022401 圖18控制信道設計原理 PAGEREF _Toc196022401 h 21 HYPERLINK l _Toc196022402 圖19數據信道設計原理 PAGEREF _Toc196022402 h 21 HYPERLINK l _Toc196022403 圖20系統的類層次結構 PAGEREF _Toc196022403 h 23 HYPERLINK l _Toc196022404 圖21系統的類繼承結構 PAGEREF _Toc196022404

18、h 24 HYPERLINK l _Toc196022405 圖22構建發送和接收視頻數據的FilterGraph PAGEREF _Toc196022405 h 26 HYPERLINK l _Toc196022406 圖23AVMontitor程序的交互流程 PAGEREF _Toc196022406 h 27 HYPERLINK l _Toc196022407 圖24視頻采集卡在GraphEdit下的示意圖 PAGEREF _Toc196022407 h 28 HYPERLINK l _Toc196022408 圖25視頻采集模塊軟件流程圖 PAGEREF _Toc196022408 h

19、 29 HYPERLINK l _Toc196022409 圖26設備枚舉流程圖(源自DirectX SDK幫助文檔 PAGEREF _Toc196022409 h 29 HYPERLINK l _Toc196022410 圖27視頻采集預覽的數據流向圖 PAGEREF _Toc196022410 h 31 HYPERLINK l _Toc196022411 圖28視頻采集預覽圖 PAGEREF _Toc196022411 h 32 HYPERLINK l _Toc196022412 圖28服務端通信模塊結構圖 PAGEREF _Toc196022412 h 34 HYPERLINK l _T

20、oc196022413 圖29選擇作為客戶端的情況 PAGEREF _Toc196022413 h 37 HYPERLINK l _Toc196022414 圖30向服務端發出連接請 PAGEREF _Toc196022414 h 38 HYPERLINK l _Toc196022415 圖31服務端選擇角色窗口 PAGEREF _Toc196022415 h 39 HYPERLINK l _Toc196022416 圖32服務端預覽視頻窗口 PAGEREF _Toc196022416 h 40 HYPERLINK l _Toc196022417 圖33服務端等待接收來自客戶端的視頻數據 PA

21、GEREF _Toc196022417 h 41 HYPERLINK l _Toc196022418 圖34服務端接收并實時播放視頻數據 PAGEREF _Toc196022418 h 42 HYPERLINK l _Toc196022419 圖35客戶端選擇角色窗口 PAGEREF _Toc196022419 h 43 HYPERLINK l _Toc196022420 圖36客戶端預覽視頻窗口 PAGEREF _Toc196022420 h 43 HYPERLINK l _Toc196022421 圖37客戶端向服務端發出連接請求 PAGEREF _Toc196022421 h 44 HY

22、PERLINK l _Toc196022422 圖38客戶端等待接收來自服務端的視頻數據 PAGEREF _Toc196022422 h 44 HYPERLINK l _Toc196022423 圖39客戶端接收并實時播放來自服務端的視頻數據 PAGEREF _Toc196022423 h 451緒論1.1視頻監控系統的國內外現狀 由于歷史及觀念上的原因,我國大陸的安防產業較發達國家晚二三十年。但是近年來,隨著我國經濟的快速發展、人民物質生活水平的提高和消費觀念的改變,安防從過去提倡人防發展為以技防為主、人防為輔,并成為現代管理的重要手段。在2000年11月的安防產品展示會上,來自國內外的上百

23、家廠商展出了各種產品和系統。據權威部門統計,1998年全國監控系統的市場總額為650億元,近年來一直以每年15%至30%的速度快速增長,我國的監控行業正面臨著良好的發展機遇。 監控系統的市場可以劃分為兩部分:一部分是前端采集用的通用產品,有鏡頭、CCD攝像機、云臺及防護罩、報警開關等;另一部分是后端的控制系統,主要包括主機控制設備、視頻采集卡、視頻壓縮卡、解碼器、總控設備等。前端的產品大部分都是通用產品,以美國、日本和臺灣產品居多,占據了市場的大部分份額。相對而言,后端的控制系統是互相封閉的,各廠家之間的設備和系統不能互聯,也沒有通用的工業標準,這部分市場正是視頻監控系統要開拓的主要目標。視頻

24、監控系統不僅符合信息產業的未來發展趨勢,而且代表了監控行業的未來發展方向,蘊藏著巨大的商機和經濟效益,成為目前信息產業中頗受關注的數字化產品。特別是近年來,隨著技術的進步和社會經濟的不斷發展,客觀上對監控系統的準確性、有效性和方便性提出了更高要求。具體地講,主要體現在以下兩個方面:一是需要實施視頻監控的范圍更加廣闊,由傳統的安防監控向管理監控和生產經營監控發展,而且對同一套系統的覆蓋面和實施距離也提出了更高的要求,通俗地說就是要達到點多面廣。二是要求監控系統與管理信息系統、網絡系統結合,實現對大量視頻數據的壓縮存儲、傳輸和自動處理,從而達到資源共享,為各級管理人員和決策者提供方便、快捷、有效的

25、服務。由于視頻監控產品潛在的巨大市場和可觀經濟效益,我國有數百家公司以及部分科研機構參與了該行業的開發和銷售。但總的來講,由于起步晚,技術較落后,使該行業中的我國企業既有廣闊的發展空間,又面臨著來自國外大企業的強大挑戰。就目前先進的數字視頻監控系統而言,在視頻壓縮、分析、傳輸、存儲和分級控制等方面仍有待提高和完善1。1.2本論文的研究背景與實際意義伴隨電子集成技術、計算機技術、通信網絡技術及圖像視頻壓縮技術的迅速發展和相互結合應用,數字化、網絡化的視頻監控系統已逐漸成為了市場的主流。網絡視頻監控系統是在成熟的數字視頻監控技術基礎上,結合實際可行的網絡通信方式,滿足本地及異地遠程視頻監控的需求。

26、然而網絡視頻監控系統的成本較高,現大多在高端市場里應用,對于中小企業及個人來說,購建網絡視頻監控系統是一種高額負擔。為滿足中小企業及個人對網絡視頻監控的需求,可考慮開發一種軟件化的基于Windows平臺的通用型的網絡視頻監控系統。本論文出于研究探討的目的,開發實現Windows平臺下通用型的C/S模式局域網視頻監控系統,在局域網內可實現點對點的視頻監控。該系統可實現對視頻的實時接收和播放,為未來實現局域網中的多人視頻監控和遠程網絡視頻監控打下了技術基礎,具有實用推廣的價值。1.3視頻監控的發展歷程視頻監控系統因其直觀、信息內容豐富、操作控制簡單方便等優點而廣泛應用于眾多領域2,比如交通治安、教

27、育、醫院、公共場所、物業管理、酒店等等。現今互聯網的迅猛發展,網絡帶寬的不斷提高,通信技術的長足進步,使視頻監控系統通過不同網絡進行實時視頻信息的有效地交互成為可能。視頻監控雖是三十年左右發展歷史的行業技術,但與移動通信技術一樣正經歷著第三代應用發展階段。當前視頻監控技術獲得良好發展的機遇,不少科研院校和企業正對無線通信視頻監控技術的進行應用研究開發工作并取得不錯效果3,相信隨著IPv6技術的應用發展,真正的普及化的全數字化視頻監控不再是期待。(1)第一代視頻監控系統- CCTV系統90年代以前,傳統的本地閉路電視監控系統(CCTV: Closed Circuit TV)稱為第一代視頻監控系統

28、,主要由模擬設備如攝像機、監視器、錄像機等組成。CCTV系統的工作原理是:前端圖像采集部分的模擬攝像機將視頻模擬信號通過同軸電纜直接傳給系統中心部分的監視器,并使用錄像機進行長時間的磁帶錄制。CCTV系統的主要缺點是: 視頻模擬信號在同軸電纜傳輸時受其傳輸距離限制影響,組網不靈活不方便;需進行聯網和遠程傳輸時,可以采用光端機加光纖進行點對點傳輸,但成本可觀。采用磁帶方式進行錄制圖像必然損耗大量的磁帶,查詢讀取過程十分煩瑣。擴展功能差,對已建好的系統進行添加采集點或者新設備時,往往需要整體修改方案。 (2)第二代視頻監控系統-數字化本地DVR系統 CCTV系統技術現今已經非常成熟,應用非常廣泛,

29、第二代視頻監控系統是CCTV系統原有基礎技術與計算機技術相結合的產物。90年代中期,計算機處理能力的提高和視頻壓縮技術的發展,人們利用計算機高速的數據處理能力進行視頻采集和處理,利用顯示器的高分辨率實現圖像的多畫面顯示,從而大大提高了圖像質量,這種基于PC的多媒體主控臺系統稱為第二代數字化本地視頻監控系統。因系統是視頻信號模擬輸入與數字壓縮、顯示和控制相結合,核心設備是數字設備,故第二代視頻監控系統屬于數字視頻監控系統范疇。圖1DVR系統結構圖目前中低端的數字視頻監控系統主要由DVR( Digital Video Recorder )構成,系統結構主要是工控機+視頻采集卡+系統軟件+應用軟件。

30、其優點突出4:采用視頻數字壓縮技術,將采集到的視頻模擬信號經數字化后存儲在硬盤、光盤等存儲媒介上,存儲方便,省去經常更換磁帶的麻煩。因對視頻圖像進行了數字化,所以可充分利用計算機的快速數據處理能力,對其進行壓縮、分析、存儲和顯示。通過視頻分析,可及時發現異常情況并進行聯動報警,從而實現無人值守。CCTV系統中,當出現問題時需要花大量時間觀看錄像帶才能找到現場記錄;而在數字視頻監控系統中,利用計算機建立的索引,數分鐘內就能找到相應的現場記錄,大大提高工作效率。(3)第三代視頻監控系統-網絡視頻監控系統( NVS )99年以來,接入網技術的迅速發展,促使視頻監控有了網絡遠程監控的新需求。而隨著電子

31、集成技術及嵌入式計算機技術水平的不斷提高,出現了數字網絡攝像機、網絡視頻服務等數字化采集前端,真正的數字化從此實。第三代視頻監控系統網絡視頻監控系統NVS( Network Video System )進入人們的視線。網絡視頻監控系統以網絡為依托,以數字視頻的壓縮、存儲、傳輸以及播放為核心,以智能實用的圖像分析為特色,引發了視頻監控行業的技術革命。網絡視頻監控系統與其它視頻監控系統比較具有以下特點:最簡單的整個系統可由服務端、客戶端兩部份組成。服務端由網絡視頻服務端+攝像機,或是網絡攝像機等組成,只要確保好服務端和客戶端之間的通訊,系統便能迅速投入工作。布控區域廣闊。服務端的網絡視頻服務端或網

32、絡攝像機直接連入網絡,沒有線纜長度和信號衰減的限制。因網絡解決了地域的限制,故而擴展了布控區域。性能穩定可靠,無需專人管理。服務端的網絡視頻服務端或網絡攝像機采用嵌入式實時多任務操作系統,可直接接入局域網或廣域網,遇到問題只需更換即可,免去維護DVR煩瑣,也非常適用于無人值守的環境。擴充簡便。當需要添加監控點時,只需增加電源和網絡接口的點數就能輕易實現原有視頻監控系統的擴展,不需重新施工布線。1.4視頻監控系統的應用 近年來,視頻監控在各行各業得到了廣泛的應用,生活中有小區安全監控,電訊行業有機站監控,銀行系統有柜員機監控,林業部門有火情監控,交通方面有違章和流量監控等等。從功能上講,視頻監控

33、可用于安全防范、信息獲取和指揮調度等方面。 隨著我國信息化進程的推進和人民物質生活水平的提高,傳統鐵柵欄式的安全防盜系統的缺陷越來越明顯,既不美觀,在發生事故時也不便于有效處理。目前在建造智能大廈和選購住房時,安全防范系統越來越受到人們的重視。現在,只需在現有的家庭微機上增加USB攝像頭和相應的軟件系統,就可實現功能強、價格低、性能可靠的數字化家庭監控系統。系統自動檢測在家中采集到的圖像,當發現異常時,通過Internet和短消息中心向用戶指定的電話號碼發送短消息,并將現場圖像以E-mail方式發送給用戶。用戶收到短消息后通過檢查E-mail就可對家中情況有清楚的了解。此外,用戶出差在外時,也

34、可以遠程登錄到家中計算機,觀看家中安全情況或家人的生活健康狀況。 我國有上萬公里的海岸線和邊境線,與多個國家毗鄰。準確及時地掌握邊防區域的軍事情況,對于有效保衛祖國的領海和領土,在未來戰爭中作出快速反應、掌握戰爭主動權有著極其重要的意義。建立邊防遠程視頻監控系統,對關鍵口岸、哨所和敏感地區實施監控,就能使我軍情報部門直觀、及時地監視邊防前線的當面情況,提高情報獲取的實時性和綜合處理能力,也能有效防止偷渡、出逃、走私、販毒等非法行為。 毋庸置疑,在2008年的北京奧運會中,數字視頻監控系統也將大放異彩,它將廣泛用于智能化的交通調度、現代化的體育場館和優雅舒適的奧運村,為參加奧運會的各國朋友在北京

35、的比賽、游覽提供安全舒適的服務。1.5論文主要研究內容本文的研究開發思路是:縱觀Windows平臺下的通用型C/S模式的局域網視頻監控系統實現的關鍵點以及實際的實驗條件情況,將上述系統的開發實現重點放在服務端與客戶端之間的實時視頻通信模塊上。要開發實現軟件化的Windows平臺下的通用型的C/S模式局域網視頻監控系統需熟悉了解和掌握的基礎理論及開發應用技術比較多,就系統的核心模塊須掌握的綜合應用技術有:COM組件技術、DirectShow視頻技術、TCP/UDP網絡協議,Socket編程,多線程技術等等。本文對該系統核心部分的實際開發過程是:(1)查閱視頻監控技術的發展歷程的資料。(2)結合視

36、頻監控實際應用的需求進行可行性分析,研究學習COM組件技術。(3)結合視頻傳輸的特點,研究TCP/UDP這兩種網絡協議,實現服務端與客戶端以UDP為基礎的控制信息交互,以及視頻數據的TCP傳接。(4)深入研究微軟的DirectShow視頻技術,以Socket編程,多線程技術來實現服務端與客戶端之間的視頻的實時接收和播放。2開發環境簡介2.1開發平臺及工具的選擇 對于整個局域網視頻監控系統來說,軟件設計的工作是主要的。它要完成的功能多而復雜。面對如此龐大的一個軟件工程,采用正確而又有效的軟件設計方法,對整個軟件結構進行規劃是系統成功實現的關鍵。 對于監控系統軟件的開發來說選擇一種友好的圖形用戶界

37、面,且操作簡單,穩定、可靠,安全性較高的操作系統是很重要的。Windows2000操作系統具有好的圖形用戶界面,操作簡單易用,可利用的資源也極其豐富,這些優勢決定了如果選擇Windows2000的操作系統將會為監控系統軟件的開發提供一個相對堅實、穩定的平臺。軟件開發工具選擇的原則是:能為我們提供一個健壯、高速、高效、兼容性好的開發環境。考慮到開發的效率和通用性等因素,經過仔細衡量考慮,我們選擇了Visual C+ 6.0作為系統的開發工具。首先C+語言比其他語言功能更豐富,應用也更廣泛。其次Visual C+使用很靈活,實現的功能也更強大,利用它可以最方便的調用Windows底層功能。最后,V

38、isual C+是真正面向對象的開發工具,且具有強大的MFC類庫5。2.2面向對象的編程思想 目前Windows 2000應用程序的設計大多采用面向對象的設計方法。面向對象技術的優點是:符合人類的思維習慣,能自然表現現實世界的實體和問題;易于開發復雜軟件,提高生產效率;易于實現代碼的重用和維護:容易與他人共享代碼;可以進一步細化己有代碼。 面向對象技術6涉及的概念有以下幾個: (1)對象。對象是一個由屬性和方法組成的集合體。屬性反映對象的狀態特征,屬性用數據結構來描述;對象的方法反映對象的行為特征,用屬性的操作來描述。 (2)消息。消息是對某種對象處理的說明。消息用來請求對象執行某一種處理或回

39、答某些信息的要求,消息統一了數據流和控制流,使數據流和控制流采用同一種方法來實現,消息用消息模式刻畫。對象的方法描述的是對消息如何響應的方法。面向對象的設計方法把一切控制結構的功能都通過對象及其相互間傳遞消息來實現。 (3)類和類層次。類是對一組對象的抽象,它將該組對象所具有的共同特征(包括操作特征和存儲特征,即方法和屬性)集中起來,由該組對象共享。在系統構成上則形成一個具有特定功能的模塊和提供一種代碼共享的手段。具體來講,類是由方法和數據組成。它是關于對象性質的描述,包括外部特性和內部實現兩個方面。類通過描述消息模式及其相應的處理能力來定義對象的外部特性,通過描述內部狀態的表現形式及固有處理

40、能力的實現來定義對象的內部實現。一個類的上層可以有父類,下層可以有子類,形成一種層次結構。這種層次結構的一個重要特征是繼承。繼承具有傳遞性,一個類可繼承層次結構中在其上面的所有類的全部描述。 (4)實例。實例是被某一個特定的類所描述的一個對象。每個對象都是某一個類的一個實例,而類是對各個實例的相似性的描述。 面向對象的軟件開發技術綜合了功能抽象與數據抽象,它的消息傳遞機制與分布式并行程序、多機系統和網絡通訊模型相一致。不同對象間的消息傳遞體現了不同軟件實體之間的交互與協作。與傳統的軟件設計方法不同,面向對象軟件設計中的軟件實體之間是藕合的。此外,面向對象軟件設計中引入的繼承等機制,實現了軟件的

41、可擴充性、多態性,并易于修改,因而這種設計是我們實現本系統軟件模塊化,并使其具有重構能力的有效方法。2.3多線程技術 由于視頻在網絡中傳輸時有著較大的數據吞吐量,因此接收時常常會出現阻塞現象。為了在實際的視頻傳輸應用中避免出現這種情形,提高傳輸的效率,在本論文設計中,我們采用了多線程技術7來進行網絡編程。線程是進程內部一個獨立的執行單元(可以是一個函數、一個活躍的類對象)。每個進程至少有一線程就是主線程,它是由系統啟動應用程序后自動創建的,用戶根據需要可以在應用程序中創建其他線程。 Windows 2000通過引入線程和進程來實現占先任務。處理器根據其優先級別的不同不斷地切換執行系統中的各個線

42、程,這種處理的高速度使人產生多個線程在同時執行的錯覺,操作系統不必等待某一個線程結束,可主動將處理器讓給其他線程。線程轉讓CPU處理時間是被迫的,對于多線程的調度程序而言,可防止某一個線程過多地占用CPU時間導致系統效率降低。這些特點正好可以解決視頻監控系統實時性方面要求較高的問題。MFC應用程序都有一個CWinApp派生類,而CWinApp則是線程基類CWmThread的派生類,它的對象就是啟動應用程序系統創建進程的主執行線程。MFC類庫支持兩種線程類型:用戶界面線程(user-interface thread)和工作線程(worker thread)。前者有一個消息泵,一般用于處理用戶的輸

43、入和對用戶生成的事件和消息的響應,它由類CWinThread派生而來。而后者一般用于完成不需要用戶輸入的后臺任務。如計算、調度等工作,它和用戶界面線程不同,它不是從類中派生來創建,而是一個實現工作線程任務的運行控制函數。在本軟件開發中,根據需要創建了多個工作線程,它們各自完成不同的后臺任務。3開發實現系統的技術本章介紹本論文完成的重點任務所應用的關鍵技術。首節介紹Socket的背景與特點,接著介紹COM組件技術的基本原理和編程思想,引出簡述DirectShow視頻技術的工作原理和應用編程實現。3.1WinSock編程機制Socket簡介: Socket是一種基于TCP/IP的網絡編程接口,它采

44、用客戶/服務端通信模式,客戶端和服務端通過Socket接口在網絡上實現連接和數據交換。它提供了一系列系統調用,使用戶可以方便的使用TCP和UDP等網絡協議8實現通信。 Socket最先是集成在UNIX系統中的,隨著Windows操作系統的廣泛使用,就制定了一套Windows下的TCP/IP網絡編程接口標準,這就是WinSock。它給應用程序開發者提供了一套簡單的API函數,通過調用這些API函數,程序員就能充分的利用Windows消息驅動機制進行網絡編程。目前,WinSock已被集成到Windows95,Widows98,Windows2000,WindowsNT,WindowsXP中,它已成

45、為Windows操作系統網絡編程的標準。Windows下的Internet軟件大都是基于WinSock開發的。WinSock定義并記錄了如何使用API函數與TCP/IP連接。應用程序通過調用WinSock的API函數實現相互之間的通信,WinSock又利用下層的網絡通信協議和操作系統調用實現實際的通信工作。應用程序和WinSock之間的關系如下圖2所示。應用程序二應用程序一網絡通訊協議服務介面,例如TCP/IP網絡編程介面,例如WinScok操作系統,例如Windows X物質傳輸介質圖2應用程序和WinSock的關系圖WinSock支持兩種編程模式,一種是基于TCP協議的數據流模式,另一種是

46、基于UDP協議的數據報模式。3.1.1基于TCP協議的WinSock編程使用TCP協議實現的通信是面向連接的通信。這種通信方式要求通信雙方在通信前必須先建立連接。類似于電話服務系統,每一次完整的通信過程都要經過建立連接、使用連接、終止連接三個過程。它具有確認、流量控制和擁塞控制等機制,可以為用戶在不可靠的通信線路上提供可靠的、端到端的、全雙工的數據流通信服務。當數據在傳輸過程中出錯或丟失時,發送方就重發出錯數據,以保證接收方能夠按序接收到正確數據。WinSock基于TCP協議的編程步驟如下圖3所示9。Create()創建一個套接字Bind()綁定到一個端口Listen()在該端口監聽Accep

47、t()等待接受一個連接Receive()接受數據或Send()發送數據Close()關閉套接字并斷開連接Send()發送數據或Receive()接受數據Connect()向服務器一個端口發出連接請求Create()創建一個套接字阻塞式等待接受連接請求建立連接數據傳輸數據傳輸Close()關閉套接字并斷開連接服務端程序客戶端程序圖3TCP客戶端與TCP服務端進行連接的步驟在VC6的MFC(Microsoft基礎類庫)中提供了支持WinSock編程的類,主要有CAsyncSocket類和CSocket類。CAsyncSocket類封裝了Windows Socket API函數,和Csocket類相

48、比,它既有類庫編程的方便性,又有Socket API函數編程的靈活性。而Csocket類是CAsyncSocket類的繼承類,它相對來說具有較高的抽象性。在用流套接字進行網絡編程時,服務端進程首先調用CAsyncSocket類的成員函數Create()建立一個套接字,并用Bind()把它綁定到一個未使用的端口上,然后調用listen()函數在該端口監聽連接請求。當沒有連接請求時,服務端進程處于休眠狀態。客戶進程創建一個套接字并把它綁定到一個未使用的端口上后,就可以調用Connect()函數向服務端進程發出連接請求。當服務端進程監聽到有客戶端進程套接字向該端口發出連接請求時,服務端進程就被喚醒,

49、生成一個新的字節流套接字,并用新套接字調用Accept()函數同客戶進程的套接字建立連接,而服務端進程最早生成的那個套接字則繼續用于監聽網絡上的其他連接請求。連接建立成功后,雙方就可以調用Send()或Receive()函數進行全雙工的數據傳輸。通信結束后,通信雙方分別調用Close()函數撤消套接字并斷開連接。這樣就完成了一次數據通信。3.1.2基于UDP協議的WinSock編程使用UDP協議實現的通信是面向無連接的通信。這種通信方式也叫做數據報通信方式。在通信前,雙方無需建立連接,可直接收發數據。發送的每個分組都攜帶有完整的目的地址,各分組在網絡中都獨立傳送。發送方不管對方是否收到或正確接

50、收,只要有數據就發送,而接收方僅負責接收數據,不管數據正確與否,且不向發送方發送應答信息。因此,在接收方不能保證收到分組的正確性和到達的先后順序,分組在傳輸途中可能丟失或出錯,而后發的分組也可能先到達。由于該通信方式取消了端到端的確認和重傳機制,因此,在通信線路質量有保證的情況下,能夠達到較高的通信速率。WinSock基于UDP協議的編程模型如圖4所示。Create()創建一個套接字Bind()綁定到一個端口Close()關閉套接字Receive From()接受數據或SendTo()發送數據Create()創建一個套接字Bind()綁定到一個端口Close()關閉套接字SendTo()發送數

51、據或Receive From()接受數據圖4數據報套接字應用程序時序圖3.2COM成組件技術與DirectShow視頻技術3.2.1COM組件技術COM的英文全稱是Component Object Model,也就是組件對象模型。COM的發布形式是以win32動態鏈接庫(DLL)或者可執行文件(EXE)的形式發布的可執行代碼組成。COM組件是動態連接的,是完全與語言無關的。同時,COM組件可以以二進制的形式發布。COM組件10還可以在不妨礙老客戶的情況下被升級成新的版本。COM的基礎包括三樣:接口、對象和類廠。在COM編程中,接口包括一系列相關的方法,對象實現一系列接口,而類廠是一個特殊的CO

52、M對象,它創建或實例化其余的COM對象。接口、對象和類廠的圖例符號如下表示:圖5接口、對象和類廠的圖例COM本身只是一種規范,而不是實現。如果使用C+來實現時,COM組件就是一個C+類,而接口都是純虛類。按照約定俗成,接口都會帶一個大寫的前綴I,每一個接口都由一個128位的全局唯一標志符( GUID )來標識。可以用如下C+代碼來簡單描述一個COM組件。Class IfunctionPublic:Virtual Method1()=0;Virtual Method2()=0; /;Class MyObject:public IfunctionPublic:Virtual Method1();V

53、irtual Method2(); /;圖6C+代碼表示COM組件其中,Ifunction 就是常說的接口,而 MyObject 就是 COM 組件對象。圖7MyObject組件對象示意圖COM 規范要求所有兼容 COM 的接口必須由 IUnknown 派生出來。IUnknown定義了 3 個重要方法,分別是:HRESULT QueryInterface( const IID& iid,void *ppv );ULONG AddRef(void);ULONG Release(void);圖8接口IUnknow的3個函數其中,QeryInterface 負責組件對象上的接口查詢,以獲取該對象上提

54、供的其余服務;AddRef 用于增加引用計數,Release用于減少引用計數。每當COM組件對象被引用一次就應調用一次方法AddRef,而當釋放COM組件對象的某一接口時就應調用相應的 Release方法。引用計數是COM中的一個非常重要的概念,它很好地解決了組件對象什么時候被銷毀,以及由誰來銷毀的生命周期問題。除了 IUnknown 接口外,還有一個重要的接口:IClassFactory。COM規范規定,每個組件都必須實現一個與之相對應的類廠( Class Factory )。類廠也是一個COM組件,它實現了IClassFactory。圖9類廠與COM組件對象的關系COM組件有2種基本類型:

55、進程內服務端組件、進程外服務端組件。本論文主要采用進程內服務端組件類型進行開發,因而后面談及的是以進程內服務端組件為為基礎的。在 COM 庫中,有三個 API 函數可用來創建對象:CoGetClassObject、CoCreateInstance、CoCreateInstanceEx 。進程內服務端組件對象的創建流程大概如下:COM 客戶程序調用 CoGetClassObject,而 CoGetClassObject 調用DLL 模塊的 DllGetClassObject 引出函數,將參數 clsid、iid、ppv 傳給DllGetClassObject 函數,并返回類廠對象的接口指針。然后

56、調用類工廠的接口方法 IClassFactory:CreateInstance 即可真正創建 CLSID_Object 標識的組件對象。圖10COM對象創建過程示意圖對于 CoCreateInstance 來說,它其實是一個封裝了類廠對象創建過程的輔助函數,其內部實際調用了 CoGetClassObject 函數。客戶程序只需指明對象類的 CLSID、接口 IID 和輸出的接口指針,不需與類廠打交道即可創建 COM 組件對象。對于 CoCreateInstanceEx 來說,其主要用于創建進程外服務端組件對象。3.2.2DirectShow視頻技術DirectX 軟件開發包是微軟公司提供的一套

57、在 Windows 操作平臺上開發高性能圖形、聲音、輸入、輸出和網絡游戲的編程接口。因DirectX采用了組件對象模型(COM)標準技術,故使用DirectX SDK開發多媒體應用程序前,應對COM組件技術有基本的理解。DirectShow 作為 DirectX 大家族的一員,為 Windows 平臺上處理各種格式的媒體文件的回放、音視頻采集等高性能要求的多媒體應用,提供了完整的解決方案。Filter是DirectShow中最基本的概念。DirectShow使用Filter Graph來管理Filter, Filter Graph是Filter的容器,而Filter是Filter Graph中

58、的最小功能模塊。Filter一般由一個或多個Pin組成,Filter之間通過Pin相互連接, 構成一條順序的鏈路。僅含有輸出Pin,沒有輸入Pin的Filter為Source Filter;既有輸入Pin也有輸出Pin的Filter為Transform Filter;只有輸入Pin,沒有輸出Pin的Filter為Rendering Filter。3 種Filter在GraphEdit11下顯示如下圖:圖113種Filter類型Filter 是一種 COM 組件,實現 Filter 的文件一般是一個 DLL,使用前必須先注 冊 。 Filter 的 創 建 與 普 通 的 COM 組 件 一 樣

59、 , 通 過 API 函 數CoCreateInstance()來完成。DirectShow系統概述:DirectShow系統位于應用層中,它使用一種叫Filter Graph過濾圖的模型來管理整個數據流的處理過程;參與數據處理的各個功能模塊叫做Filter過濾器;各個Filter在Filter Graph中按一定的順序連接成一條“流水線”協同工作。圖12DirectShow系統(源自DirectX SDK9.0)按功能分,如上圖所列,Filter 大致分為:Source Filters、Transform Filters 和 Rendering Filters。Source Filters

60、主要負責獲取數據,數據源可以是文件、因特網、計算機里的采集卡(WDM 驅動的或 VFW 驅動的)數字攝像機等等,然后將數據往下傳輸;Transform Filters 主要負責數據的格式轉換,例如數據流的分離合成、解碼編碼等,然后將數據繼續往下傳輸;Rendering Filters 主要負責數據的最終去向將數據送給顯卡、聲卡進行多媒體的演示,或者輸出到文件進行存儲。開發DirectShow應用程序的一般過程:3個階段。第1階段:具體調用 CoCreateInstance()創建一個 Filter Graph Manger組件。第2階段:根據實際的應用,創建一條完整的 Filter 鏈路。具體

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論