論文:局域網(wǎng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)_第1頁(yè)
論文:局域網(wǎng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)_第2頁(yè)
論文:局域網(wǎng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)_第3頁(yè)
論文:局域網(wǎng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)_第4頁(yè)
論文:局域網(wǎng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

局域網(wǎng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)摘要:視頻監(jiān)控融合了信息技術(shù)、計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)以及流媒體技術(shù),一直是人們關(guān)注的應(yīng)用技術(shù)熱點(diǎn)之一,它以其直觀方便、信息內(nèi)容豐富而被廣泛應(yīng)用于許多場(chǎng)合。本文針對(duì)視頻捕獲和傳輸回放的功能要求,討論了其軟件系統(tǒng)的主要任務(wù)及解決方案。視頻采集部分使用VFW函數(shù)進(jìn)行。數(shù)據(jù)傳輸部分采用UDP協(xié)議,它提供面向無(wú)連接,不可靠的通信,相較于TCP有傳輸速率高,延遲小的優(yōu)點(diǎn)。本文的視頻采集、傳輸和顯示是基于MicrosoftVisualC++6.0環(huán)境,利用MFC開發(fā)的。VisualC++作為一個(gè)可視的集成開發(fā)工具,提供了軟件代碼自動(dòng)生成和可視化的資源編輯功能。與傳統(tǒng)的一些編程平臺(tái)相比,它能夠使系統(tǒng)具有較高的效率和可用性。初步的實(shí)驗(yàn)結(jié)果表明,該軟件系統(tǒng)在主要的功能上已接近實(shí)用化,并且操作簡(jiǎn)便、工作可靠。關(guān)鍵詞:VFW;UDP;WinSockTheDesignofLAN-VideoMonitoringSystemAbstract:VideoMonitoringhasamalgamatedtechnologyofinformation,computer,networkandmediastream.Sopeoplegivemuchattentiontovideomonitoringeverytime.Ithasbeenahotspotbecauseofitsconvenienceandabundanceinformation.Thisarticlediscussedthetaskandsolutionaboutvideocapture,transmissionanddisplay.VideodatahasbeencapturedsuccessfullybyVFWanduseprotocolofUDPwhentransport.UDPprovideconnectionlessanduncertaintycommunication.ComparedwithTCP,UDPhashighspeedandshorttimemeasurement.Videocapture,transmissionanddisplayarebasedonthedevelopmentenvironmentofMicrosoftVisualC++6.0andprogrammedbyMFC.VisualC++6.0isavisualizedintegrateddevelopmenttool,whichcanproducesoftwarecodeautomaticallyandsuppliedintegratededitor.Ithashigherefficiencyandmoreusabilitythantraditionalprogrammingterrace.Experimentresultshowsthatthissoftwaresystemisnotonlypractical,butalsohassimplyoperationandreliablework.Keywords:VFW,UDP,WinSock目錄第1章緒論...................................................................................................................11.1課題背景..............................................................................................................11.2課題的發(fā)展現(xiàn)狀..................................................................................................11.3課題目的和意義..................................................................................................31.4論文的主要內(nèi)容..................................................................................................3第2章基本概念介紹.......................................................................................................42.1VC++介紹............................................................................................................42.2MFC簡(jiǎn)介.............................................................................................................52.3VFW的體系結(jié)構(gòu)................................................................................................52.4TCP/IP協(xié)議簡(jiǎn)介.................................................................................................62.5SOCKET套接字..................................................................................................82.6本章小節(jié)..............................................................................................................9第3章局域網(wǎng)視頻監(jiān)控系統(tǒng)方案設(shè)計(jì).........................................................................103.1系統(tǒng)總體方案設(shè)計(jì)............................................................................................103.2視頻捕獲方案的設(shè)計(jì)........................................................................................113.3視頻傳輸方案設(shè)計(jì)............................................................................................143.4視頻回放方案設(shè)計(jì)............................................................................................183.5開發(fā)平臺(tái)和工具的選擇....................................................................................203.6本章小節(jié)............................................................................................................20第4章局域網(wǎng)視頻監(jiān)控系統(tǒng)實(shí)現(xiàn).................................................................................214.1視頻采集實(shí)現(xiàn)....................................................................................................214.2視頻傳輸?shù)膶?shí)現(xiàn)................................................................................................234.3視頻接收還原的實(shí)現(xiàn)........................................................................................284.4局域網(wǎng)視頻監(jiān)控系統(tǒng)的測(cè)試與分析................................................................294.5本章小結(jié)............................................................................................................33結(jié)論.............................................................................................................................34致謝.............................................................................................................................35參考文獻(xiàn).............................................................................................................................361第1章緒論本章主要根據(jù)當(dāng)今社會(huì)的發(fā)展?fàn)顩r,介紹了該課題的背景,發(fā)展以及意義。同時(shí)也簡(jiǎn)述了本文所寫的主要內(nèi)容。讓我們對(duì)本課題的研究有一個(gè)初步的認(rèn)識(shí)。該課題隨著計(jì)算機(jī)通訊的發(fā)展也逐步成為了熱門的話題1.1課題背景21世紀(jì)是信息時(shí)代,出于對(duì)安全的考慮,怎樣將自己希望掌握的信息以最快最準(zhǔn)確的方式傳輸一直是人們關(guān)注的熱點(diǎn)。近年來(lái),隨著經(jīng)濟(jì)和科技的發(fā)展,在工業(yè),商貿(mào)和金融等領(lǐng)域的企事業(yè)單位中都已經(jīng)基本實(shí)現(xiàn)基于局域網(wǎng)的計(jì)算機(jī)網(wǎng)絡(luò)化管理。與此同時(shí)出于安全的考慮,這些企事業(yè)單位又迫切希望能以圖象等多煤體信息對(duì)重要目標(biāo)進(jìn)行不間斷的安全監(jiān)視,并及時(shí)將有關(guān)信息傳送給監(jiān)視中心。傳統(tǒng)的網(wǎng)絡(luò)主要提供數(shù)據(jù)業(yè)務(wù),而在多媒體技術(shù)日新月異使得文本,語(yǔ)音,圖形,圖象和視頻綜合進(jìn)入網(wǎng)絡(luò)的需求日益增長(zhǎng)。其中視頻應(yīng)用已經(jīng)以其高數(shù)據(jù)量,連續(xù)性,實(shí)時(shí)性強(qiáng),需要精確的時(shí)間控制,占用較大的網(wǎng)絡(luò)帶寬等特點(diǎn),給學(xué)術(shù)界和工業(yè)界提出了巨大的挑戰(zhàn),也成為研究的熱點(diǎn)和難點(diǎn)。無(wú)論對(duì)圖象和視頻的壓縮技術(shù),網(wǎng)絡(luò)的傳輸控制技術(shù)還是視頻傳輸相關(guān)網(wǎng)絡(luò)協(xié)議方面都提出了新的要求。視頻圖象傳輸與傳統(tǒng)的文件傳輸有明顯的區(qū)別,傳統(tǒng)文件傳輸對(duì)于傳輸?shù)难舆t,抖動(dòng)沒有過多的要求,但是要求有嚴(yán)格的差錯(cuò)控制和重傳機(jī)制,視頻圖象傳輸在傳輸?shù)膶?shí)時(shí)性和同步性上要求很高,并且要求傳輸延遲小,視頻圖象傳輸能夠忍受分組,丟失造成的差錯(cuò)或反常,也可以忍受由于沒有重傳或者糾錯(cuò)機(jī)制引起的顯示不連續(xù)或顯示混亂[1]。一直以來(lái)由于視頻數(shù)據(jù)量大和網(wǎng)絡(luò)帶寬有限的矛盾,使得視頻傳輸技術(shù)的應(yīng)用受到很大的制約,必須根據(jù)視頻傳輸?shù)奶攸c(diǎn)采用合適的網(wǎng)絡(luò)協(xié)議和傳輸算法,才能達(dá)到較好的傳輸效果。因此研究遠(yuǎn)程有限帶寬的多媒體通信具有很大的現(xiàn)實(shí)意義。所以利用現(xiàn)有的局域網(wǎng)資源實(shí)現(xiàn)基于視頻圖象的安全監(jiān)控已經(jīng)成為了一個(gè)很有發(fā)展前景的研究方向。1.2課題的發(fā)展現(xiàn)狀視頻監(jiān)控技術(shù)發(fā)展經(jīng)歷了模擬監(jiān)控、數(shù)字監(jiān)控正在向大規(guī)模網(wǎng)絡(luò)監(jiān)控發(fā)展,視頻監(jiān)控系統(tǒng)的各組成部分――前端視頻采集、視頻傳輸、視頻記錄、控制、顯示部分技術(shù)發(fā)展很快。為了和電腦對(duì)應(yīng),傳統(tǒng)的模擬設(shè)備已經(jīng)開始向數(shù)字設(shè)備轉(zhuǎn)換;數(shù)字資料已經(jīng)開始方便地傳送和管理;可以借助安防網(wǎng)絡(luò)設(shè)備連接其他的數(shù)字產(chǎn)品來(lái)擴(kuò)大應(yīng)用范圍;遠(yuǎn)程傳送的需求也越來(lái)越大,這表明視頻監(jiān)控技術(shù)已全面進(jìn)入數(shù)字時(shí)代。網(wǎng)絡(luò)信息的發(fā)展;許多建筑物已經(jīng)具備局域網(wǎng)和廣域網(wǎng);有許多要求是在PC控制下的升級(jí)系統(tǒng);圖象處理用PC有許多的彈性;多種的數(shù)據(jù)保存硬件(硬盤、備份光盤等)發(fā)展很快,基礎(chǔ)設(shè)施的發(fā)展為視頻監(jiān)控技術(shù)的發(fā)展創(chuàng)造了條件。監(jiān)控技術(shù)的發(fā)展呈現(xiàn)出了他的許多新特點(diǎn):監(jiān)控點(diǎn)數(shù)量多且分散;網(wǎng)絡(luò)化建設(shè)使網(wǎng)絡(luò)視頻傳輸變得經(jīng)濟(jì)、可行;海量數(shù)據(jù)傳輸和存儲(chǔ)的需求;設(shè)備管理重要性增強(qiáng)甚至超過圖象監(jiān)控本身;管理者流動(dòng)性增強(qiáng);施工、布線成本昂貴,要求簡(jiǎn)化布線降低投資;同時(shí)信息安全受到普遍關(guān)注。所有這些市場(chǎng)的需求不斷的呼喚著視頻監(jiān)控技術(shù)變革。視頻監(jiān)控的關(guān)鍵技術(shù)主要有視頻采集壓縮、視頻信號(hào)可靠地傳輸、信息存儲(chǔ)調(diào)用的智能化與系統(tǒng)的集中管理。視頻監(jiān)控系統(tǒng)的發(fā)展趨勢(shì)包括:1)前端一體化;2)視頻數(shù)字化,數(shù)字化是21世紀(jì)的特征,是以信息技術(shù)為核心的電子技術(shù)發(fā)展的必然,數(shù)字化是邁向成功的通行證,隨著時(shí)代的發(fā)展,我們的生存環(huán)境將變得越來(lái)越數(shù)字化[2]。視頻監(jiān)控系統(tǒng)的數(shù)字化首先應(yīng)該是系統(tǒng)中信息流(包括視頻、音頻、控制等從模擬狀態(tài)轉(zhuǎn)為數(shù)字狀態(tài),這將徹底打破“經(jīng)典閉路電視系統(tǒng)是以攝像機(jī)成像技術(shù)為中心”的結(jié)構(gòu),根本上改變視頻監(jiān)控系統(tǒng)從信息采集、數(shù)據(jù)處理、傳輸、系統(tǒng)控制等的方式和結(jié)構(gòu)形式。信息流的數(shù)字化、編碼壓縮、開放式的協(xié)議,使視頻監(jiān)控系統(tǒng)與安防系統(tǒng)中其它各子系統(tǒng)間實(shí)現(xiàn)無(wú)縫連接,并在統(tǒng)一的操作平臺(tái)上實(shí)現(xiàn)管理和控制,這也是系統(tǒng)集成化的含義。3)監(jiān)控網(wǎng)絡(luò)化,視頻監(jiān)控系統(tǒng)的網(wǎng)絡(luò)化將意味著系統(tǒng)的結(jié)構(gòu)將由集總式向集散式系統(tǒng)過渡。集散式系統(tǒng)采用多層分級(jí)的結(jié)構(gòu)形式,具有微內(nèi)核技術(shù)的實(shí)時(shí)多任務(wù)、多用戶、分布式操作系統(tǒng)以實(shí)現(xiàn)搶先任務(wù)調(diào)度算法的快速響應(yīng)。組成集散式監(jiān)控系統(tǒng)的硬件和軟件采用標(biāo)準(zhǔn)化、模塊化和系列化的設(shè)計(jì),系統(tǒng)設(shè)備的配置具有通用性強(qiáng)、開放性好、系統(tǒng)組態(tài)靈活、控制功能完善、數(shù)據(jù)處理方便、人機(jī)界面友好以及系統(tǒng)安裝、調(diào)試和維修簡(jiǎn)單化,系統(tǒng)運(yùn)行互為熱備份,容錯(cuò)可靠等優(yōu)點(diǎn)。系統(tǒng)的網(wǎng)絡(luò)化在某種程度上打破了布控區(qū)域和設(shè)備擴(kuò)展的地域和數(shù)量界限。系統(tǒng)網(wǎng)絡(luò)化將使整個(gè)網(wǎng)絡(luò)系統(tǒng)硬件和軟件資源的共享以及任務(wù)和負(fù)載的共享,這也是系統(tǒng)集成的一個(gè)重要概念。4)系統(tǒng)集成化也是視頻監(jiān)控系統(tǒng)公認(rèn)的發(fā)展方向,而數(shù)字化是網(wǎng)絡(luò)化的前提,網(wǎng)絡(luò)化又是系統(tǒng)集成化的基礎(chǔ),所以,視頻監(jiān)控發(fā)展的最大兩個(gè)特點(diǎn)就是數(shù)字化和網(wǎng)絡(luò)化。1.3課題目的和意義通過做畢業(yè)設(shè)計(jì)題目“局域網(wǎng)視頻監(jiān)控設(shè)計(jì)”,可以從中學(xué)習(xí)VC++編程,這是課堂之外學(xué)的編程知識(shí),通過對(duì)它的學(xué)習(xí),可以比其他很多同學(xué)多掌握一種非常有用的編程工具。還可以從此次設(shè)計(jì)中學(xué)習(xí)視頻捕獲和顯示技術(shù)和視頻傳輸技術(shù),視頻傳輸技術(shù)是Internet發(fā)展的必然產(chǎn)物,學(xué)習(xí)它很有必要;而視頻的捕獲和顯示也是視頻處理的最基礎(chǔ)的技術(shù),學(xué)習(xí)他可以讓我們?cè)谝院髮?duì)視頻圖象處理的研究中更快的掌握其實(shí)質(zhì)。本課題可以方便的構(gòu)建局域網(wǎng)中的兩臺(tái)計(jì)算機(jī)之間的監(jiān)視系統(tǒng),達(dá)到實(shí)時(shí)監(jiān)控的目的??捎糜趯W(xué)??紙?chǎng)、幼兒園教室、工廠車間、小區(qū)別墅、賓館酒店、辦公樓、實(shí)驗(yàn)室、高速公路收費(fèi)站等地方,以達(dá)到視頻監(jiān)視的目的。它能夠?qū)崟r(shí)的將被監(jiān)視地點(diǎn)的情況傳輸?shù)奖O(jiān)視端,使監(jiān)控人員能夠及時(shí)的掌握情況并采取措施。1.4論文的主要內(nèi)容本論文是針對(duì)視頻監(jiān)視系統(tǒng)當(dāng)前的研究現(xiàn)狀,主要研究視頻捕獲,傳輸及在接收端顯示。本論文根據(jù)網(wǎng)絡(luò)應(yīng)用的具體情況,在VC++平臺(tái)上,設(shè)計(jì)并實(shí)現(xiàn)了兩臺(tái)計(jì)算機(jī)之間的實(shí)時(shí)視頻傳輸,達(dá)到了遠(yuǎn)程監(jiān)視的目的。第2章基本概念介紹本章介紹了與本次課題研究有關(guān)的一些基本概念,這是在參與本次課題研究之前必須要了解和熟悉的內(nèi)容。其中位圖的概念在進(jìn)行圖象處理的時(shí)候尤為關(guān)鍵。2.1VC++介紹C++是BarneyStrousrtup博士在貝爾實(shí)驗(yàn)室開發(fā)出來(lái)的一種編程語(yǔ)言[3],它在C語(yǔ)言的基礎(chǔ)上融入面向?qū)ο竽芰捌渌鰪?qiáng)性能。與C相比它有許多優(yōu)點(diǎn),主要體現(xiàn)在封裝性、繼承性和多態(tài)性,這也是C++作為面向?qū)ο缶幊陶Z(yǔ)言(OOP的主要特性。封裝性把數(shù)據(jù)與操作數(shù)據(jù)的函數(shù)組織在一起不僅使程序結(jié)構(gòu)更加緊湊,并且提高了內(nèi)部數(shù)據(jù)的安全性;繼承性增加了軟件的可擴(kuò)充性及代碼重用性;多態(tài)性使設(shè)計(jì)人員在設(shè)計(jì)程序時(shí)可以對(duì)問題進(jìn)行更好的抽象,有利于代碼的維護(hù)和可重用。VisualC++不僅是一個(gè)C++編譯器,而且是一個(gè)基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE。它由許多組件組成,包括編輯器、編譯器、調(diào)試器以及程序向?qū)ppwizard類、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個(gè)名為DeveloperStudio的組件集成和諧的開發(fā)環(huán)境。其特點(diǎn)如下:1)利用Appwizard可以簡(jiǎn)單快速地生成一個(gè)應(yīng)用程序框架,而不需程序員加入一句程序代碼;2)利用AppStudio資源編輯器可以使用戶界面的創(chuàng)建簡(jiǎn)單直觀,所見即所得;3)利用ClassWizard可以使消息或命令自動(dòng)與消息處理函數(shù)或控制函數(shù)相聯(lián)系,程序員只需考慮函數(shù)核心代碼的實(shí)現(xiàn);4)利用VisualC++的ComponentsGallery和ControlsGallery可以加入現(xiàn)成的組件和控制。諸如ActiveX控制、閃爍窗口、定制狀態(tài)條等組件。VisualC++貫穿了面向?qū)ο蟮某绦蛩枷?,其核心是Microsoft基本類庫(kù)(MicrosoftFoundationClass,MFC?,F(xiàn)在的我們普遍用的是VisualC++6.0版本。2.2MFC簡(jiǎn)介Microsoft提供的MFC是放置WindowsAPI的面向?qū)ο蟮陌bC++類庫(kù)[4]。封裝了大約200個(gè)類,其中的一些可以直接使用,而另一些則主要作為您自己的類的基礎(chǔ)類。MFC也是一個(gè)應(yīng)用程序的框架結(jié)構(gòu)。它不僅僅是一個(gè)類的集合,它還幫助定義了應(yīng)用程序的結(jié)構(gòu)并為應(yīng)用程序處理許多雜務(wù)。使用MFC編寫Windows應(yīng)用程序簡(jiǎn)單方便,代碼量小,是VC編程環(huán)境最重要的組成部分,它為用戶提供了一大批預(yù)先定義的類和成員函數(shù),封裝了大量的WindowsAPI。同時(shí)VC環(huán)境還提供了與MFC對(duì)象和代碼一起工作的專用工具:AppStudio源程序編輯器、AppWizard和ClassWizard。應(yīng)用MFC,可以使Windows程序員用較少的時(shí)間和精力開發(fā)出復(fù)雜的通訊應(yīng)用程序。MFC包含了兩個(gè)設(shè)計(jì)目標(biāo):1)給Windows操作系統(tǒng)提供一個(gè)面向?qū)ο蟮慕涌?,支持可重用性,自包含性以及其他OOP原則。2)實(shí)現(xiàn)上述目標(biāo)的前提是不需要強(qiáng)加給系統(tǒng)過多的工作,或不增加應(yīng)用程序?qū)?nèi)存的不必要開銷。MFC的優(yōu)點(diǎn)也正體現(xiàn)了上述的設(shè)計(jì)思想。MFC是一個(gè)非常優(yōu)秀的類庫(kù),使OOP減少了程序員編寫代碼的數(shù)量。這正是它成功的地方。MFC提供了我們所需要的大量的代碼,從而簡(jiǎn)化了開發(fā)。應(yīng)用MFC,可以使Windows程序員用較少的時(shí)間和精力開發(fā)出復(fù)雜的通訊應(yīng)用程序。比如在MFC中使用COM、OLE、和ActiveX時(shí)很少有人知道如何從頭開始編寫這些代碼。使用MFC的另一個(gè)優(yōu)點(diǎn)是框架結(jié)構(gòu)使用了很多技巧是Windows對(duì)象,如窗口、對(duì)話框變得如同C++中的對(duì)象了。2.3VFW的體系結(jié)構(gòu)VFW,稱為vedioforwindows,是微軟為Windows操作系統(tǒng)增設(shè)的多媒體服務(wù)庫(kù),包含在VC++6.0中。VFW是Microsoft公司為開發(fā)Windows平臺(tái)下的視頻應(yīng)用程序提供的軟件工具包,提供了一系列應(yīng)用程序編程接口(API),它以消息驅(qū)動(dòng)方式對(duì)視頻設(shè)備進(jìn)行存取,可以很方便地控制設(shè)備數(shù)據(jù)流的工作過程。目前,大多數(shù)的視頻采集卡驅(qū)動(dòng)程序都支持VFW接口,它主要包括多個(gè)動(dòng)態(tài)連接庫(kù),通過這些組件間的協(xié)調(diào)合作,來(lái)完成視頻的捕獲、視頻壓縮及播放功能。VFW所包含的動(dòng)態(tài)連接庫(kù)如下所示[5]:1)AVICAP.DLL:主要實(shí)現(xiàn)視頻捕獲功能,包含了用于視頻捕獲的函數(shù),為音像交錯(cuò)AVI(Audiovideointerleaved格式文件和視頻、音頻設(shè)備程序提供一個(gè)高級(jí)接口。2)MSVIDEO.DLL:能夠?qū)⒁曨l捕獲窗口與獲驅(qū)動(dòng)設(shè)備連接起來(lái),支持ICM視頻編碼服務(wù)。3)MCIAVI.DRV:包含MCI(Mediacontrolinterface)命令解釋器,實(shí)現(xiàn)回放功能。4)AVIFILE.DLL:提供對(duì)AVI文件的讀寫操作等文件管理功能。5)ICM(Installablecompressionmanager:即壓縮管理器,提供對(duì)存儲(chǔ)在AVI文件中視頻圖像數(shù)據(jù)的壓縮、解壓縮服務(wù)。6)ACM(AudioCompressionManager:即音頻壓縮管理器,提供實(shí)時(shí)音頻壓縮及解壓縮功能。2.4TCP/IP協(xié)議簡(jiǎn)介TCP/IP協(xié)議(TransmissionControlProtocol/InternetProtocol叫做傳輸控制/網(wǎng)際協(xié)議,又叫網(wǎng)絡(luò)通訊協(xié)議,這個(gè)協(xié)議是Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。TCP/IP是網(wǎng)絡(luò)中使用的基本的通信協(xié)議[6]。雖然從名字上看TCP/IP包括兩個(gè)協(xié)議,傳輸控制協(xié)議(TCP和網(wǎng)際協(xié)議(IP,但TCP/IP實(shí)際上是一組協(xié)議,它包括上百個(gè)各種功能的協(xié)議,如:遠(yuǎn)程登錄、文件傳輸和電子郵件等,而TCP協(xié)議和IP協(xié)議是保證數(shù)據(jù)完整傳輸?shù)膬蓚€(gè)基本的重要協(xié)議。通常說(shuō)TCP/IP是Internet協(xié)議族,而不單單是TCP和IP。TCP/IP是用于計(jì)算機(jī)通信的一組協(xié)議,我們通常稱它為TCP/IP協(xié)議族。它是70年代中期美國(guó)國(guó)防部為其ARPANET廣域網(wǎng)開發(fā)的網(wǎng)絡(luò)體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn),以它為基礎(chǔ)組建的INTERNET是目前國(guó)際上規(guī)模最大的計(jì)算機(jī)網(wǎng)絡(luò),正因?yàn)镮NTERNET的廣泛使用,使得TCP/IP成了事實(shí)上的標(biāo)準(zhǔn)。之所以說(shuō)TCP/IP是一個(gè)協(xié)議族,是因?yàn)門CP/IP協(xié)議包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等許多協(xié)議,這些協(xié)議一起稱為TCP/IP協(xié)議。以下是協(xié)議族中一些常用協(xié)議:TCP(TransmissionControlProtocol傳輸控制協(xié)議IP(InternetProtocol網(wǎng)際協(xié)議UDP(UserDatagramProtocol用戶數(shù)據(jù)報(bào)協(xié)議ICMP(InternetControlMessageProtocol互聯(lián)網(wǎng)控制信息協(xié)議SMTP(SimpleMailTransferProtocol簡(jiǎn)單郵件傳輸協(xié)議SNMP(SimpleNetworkmanageProtocol簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議FTP(FileTransferProtocol文件傳輸協(xié)議ARP(AddressResolationProtocol地址解析協(xié)議TCP/IP協(xié)議實(shí)際上就是在物理網(wǎng)上的一組完整的網(wǎng)絡(luò)協(xié)議。其中TCP是提供傳輸層服務(wù),而IP則是提供網(wǎng)絡(luò)層服務(wù)。TCP/IP包括以下協(xié)議:如圖所示圖2-1TCP/IP協(xié)議族從協(xié)議分層模型方面來(lái)講,TCP/IP由四個(gè)層次組成:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。如下圖所示:圖2-2協(xié)議族的四個(gè)層次1)網(wǎng)絡(luò)接口層:這是TCP/IP協(xié)議族的最低層,負(fù)責(zé)接收IP數(shù)據(jù)報(bào)并通過網(wǎng)絡(luò)發(fā)送,或者從網(wǎng)絡(luò)上接收物理幀,抽出IP數(shù)據(jù)報(bào),交給IP層。網(wǎng)絡(luò)接口層包括了硬件接口和協(xié)議ARP、RARP,這兩個(gè)協(xié)議主要是用來(lái)建立送到物理層上的信息和接收從物理層上傳來(lái)的信息。2)網(wǎng)際層:負(fù)責(zé)相鄰計(jì)算機(jī)之間的通信。其功能包括三方面。一、處理來(lái)自傳輸層的分組發(fā)送請(qǐng)求,收到請(qǐng)求后,將分組裝入IP數(shù)據(jù)報(bào),填充報(bào)頭,選擇去往信宿機(jī)的路徑,然后將數(shù)據(jù)報(bào)發(fā)往適當(dāng)?shù)木W(wǎng)絡(luò)接口。二、處理輸入數(shù)據(jù)報(bào)。首先檢查其合法性,然后進(jìn)行尋徑,假如該數(shù)據(jù)報(bào)已到達(dá)信宿機(jī),則去掉報(bào)頭,將剩下部分交給適當(dāng)?shù)膫鬏攨f(xié)議。假如該數(shù)據(jù)報(bào)尚未到達(dá)信宿,則轉(zhuǎn)發(fā)該數(shù)據(jù)報(bào)。三、處理路徑、流控、擁塞等問題。網(wǎng)絡(luò)層中的協(xié)議主要有IP,ICMP,IGMP等,由于它包含了IP協(xié)議模塊,所以它是所有機(jī)遇TCP/IP協(xié)議網(wǎng)絡(luò)的核心。在網(wǎng)絡(luò)層中,IP模塊完成大部分功能。ICMP和IGMP以及其他支持IP的協(xié)議幫助IP完成特定的任務(wù),如傳輸差錯(cuò)控制信息以及主機(jī)/路由器之間的控制電文等。網(wǎng)絡(luò)層掌管著網(wǎng)絡(luò)中主機(jī)間的信息傳輸。3)傳輸層:提供應(yīng)用程序間的通信。其功能包括:格式化信息流;提供可靠傳輸。為實(shí)現(xiàn)后者,傳輸層協(xié)議規(guī)定接收端必須發(fā)回確認(rèn),并且假如分組丟失,必須重新發(fā)送。傳輸層上的主要協(xié)議是TCP和UDP。正如網(wǎng)絡(luò)層控制著主機(jī)之間的數(shù)據(jù)傳遞,傳輸層控制著那些將要進(jìn)入網(wǎng)絡(luò)層的數(shù)據(jù)。這兩個(gè)協(xié)議就是它管理這些數(shù)據(jù)的兩種方式:面向連接的TCP協(xié)議和面向無(wú)連接服務(wù)的UDP協(xié)議。4)應(yīng)用層:位于協(xié)議棧的頂端,它向用戶提供一組常用的應(yīng)用程序,比如電子郵件、文件傳輸訪問、遠(yuǎn)程登錄等。遠(yuǎn)程登錄TELNET使用TELNET協(xié)議提供在網(wǎng)絡(luò)其它主機(jī)上注冊(cè)的接口,TELNET會(huì)話提供了基于字符的虛擬終端。文件傳輸訪問FTP使用FTP協(xié)議來(lái)提供網(wǎng)絡(luò)內(nèi)機(jī)器間的文件拷貝功能。2.5SOCKET套接字為了能夠方便的開發(fā)網(wǎng)絡(luò)應(yīng)用軟件,由美國(guó)克利大學(xué)在UNIX上推出了一種應(yīng)用程序訪問通信協(xié)議的操作系統(tǒng)調(diào)用套接字(Socket)[7]。Socket的出現(xiàn),是TCP/IP網(wǎng)絡(luò)環(huán)境下的編程接口,提供了不同主機(jī)間進(jìn)程的雙向通信端點(diǎn),開發(fā)Socket的目的是屏蔽網(wǎng)絡(luò)低層復(fù)雜的結(jié)構(gòu)與協(xié)議,使編程人員能夠簡(jiǎn)單的對(duì)網(wǎng)絡(luò)進(jìn)行操作,使程序員可以很方便的訪問TCP/IP,從而開發(fā)各種網(wǎng)絡(luò)應(yīng)用的程序。隨著UNIX的應(yīng)用推廣,套接字在編寫網(wǎng)絡(luò)軟件中得到了極大的普及。后來(lái),套接字又被引進(jìn)了Windows等操作系統(tǒng),成為開發(fā)網(wǎng)絡(luò)應(yīng)用程序非常有效快捷的工具。利用它可以構(gòu)造任意跨操作系統(tǒng)跨網(wǎng)絡(luò)協(xié)議的分布式處理系統(tǒng)。Socket面象客戶/服務(wù)器模型,客戶隨機(jī)申請(qǐng)一個(gè)Socket,系統(tǒng)為之分配一個(gè)隨機(jī)的Socket號(hào);服務(wù)器擁有全局公認(rèn)的Socket號(hào),任何客戶都可以向它發(fā)出連接請(qǐng)求。在進(jìn)行網(wǎng)絡(luò)編程時(shí),我們常常見到同步、異步、阻塞和非阻塞四種調(diào)用方式。這些方式彼此概念并不好理解。下面是我對(duì)這些術(shù)語(yǔ)的理解。異步的概念和同步相對(duì),異步方式就是當(dāng)發(fā)送方發(fā)送一個(gè)數(shù)據(jù)包以后,一直等到接受方響應(yīng)后,才接著發(fā)送下一個(gè)數(shù)據(jù)包。非阻塞和阻塞的概念相對(duì)應(yīng)。阻塞調(diào)用是指調(diào)用結(jié)果返回之前,當(dāng)前線程會(huì)被掛起。函數(shù)只有在得到結(jié)果之后才會(huì)返回。有人也許會(huì)把阻塞調(diào)用和同步調(diào)用等同起來(lái),實(shí)際上他是不同的。對(duì)于同步調(diào)用來(lái)說(shuō),很多時(shí)候當(dāng)前線程還是激活的,只是從邏輯上當(dāng)前函數(shù)沒有返回而已。以此推之,非阻塞指在不能立刻得到結(jié)果之前,該函數(shù)不會(huì)阻塞當(dāng)前線程,而會(huì)立刻返回。2.6本章小節(jié)通過對(duì)各種基本概念的介紹使我們更加的容易理解后續(xù)章節(jié)中系統(tǒng)的設(shè)計(jì)。MFC是可視化編程的最重要的工具。VFW是進(jìn)行視頻采集和處理的最普遍的手段之一?,F(xiàn)在局域網(wǎng)普遍采用的體系結(jié)構(gòu)是TCP/IP,通過對(duì)他各層協(xié)議的說(shuō)明讓我們?cè)诤竺娴膫鬏攲拥姆桨高x擇上顯得更加的清晰。這些概念有一個(gè)總體的認(rèn)識(shí)是閱讀本文的基礎(chǔ)。第3章局域網(wǎng)視頻監(jiān)控系統(tǒng)方案設(shè)計(jì)本章詳細(xì)說(shuō)明了此次研究要達(dá)到的目標(biāo)、所用的開發(fā)環(huán)境和工具的簡(jiǎn)單情況、整個(gè)系統(tǒng)的總體方案,也分模塊講解了針對(duì)每一個(gè)任務(wù)所采取的相應(yīng)措施以及具體的實(shí)現(xiàn)方案。針對(duì)本課題的研究?jī)?nèi)容一共分為三個(gè)模塊:視頻捕獲、傳輸和顯示。3.1系統(tǒng)總體方案設(shè)計(jì)本系統(tǒng)是利用現(xiàn)有的局域網(wǎng),在硬件上構(gòu)成簡(jiǎn)單且投入不大,只需使用市面上普通的USB攝象頭加在電腦上作為視頻采集設(shè)備,采集的圖象大小為320×240。整個(gè)系統(tǒng)如圖3-1。服務(wù)器(發(fā)送端)客戶機(jī)(接收端)圖3-1局域網(wǎng)視頻監(jiān)控系統(tǒng)本系統(tǒng)利用VC++6.0平臺(tái)開發(fā),實(shí)現(xiàn)視頻采集圖象在一個(gè)局域網(wǎng)中的兩臺(tái)計(jì)算機(jī)之間的實(shí)時(shí)傳輸,采用不壓縮的方式直接傳輸位圖。軟件系統(tǒng)是該系統(tǒng)的核心部分,分為圖象數(shù)據(jù)采集,圖象傳輸,圖象顯示三個(gè)部分[8]。在接收端和發(fā)送端的軟件流程分別如下圖3-2和圖3-3所示接收端的程序使用的是單線程。以上的圖只是處理一幀的流程。程序一直等待接收數(shù)據(jù),然后把每次接收到的數(shù)據(jù)移到另一個(gè)緩沖區(qū),但每次接收到的數(shù)據(jù)只是一幀中數(shù)據(jù)的一部分,所以將他們移到另一個(gè)緩沖區(qū)后必須判斷是否已接收完一幀,一旦確定緩沖區(qū)已有完整的一幀圖象數(shù)據(jù)以后就立刻調(diào)用顯示函數(shù)將圖象送到顯示器顯示,以達(dá)到實(shí)時(shí)的效果。顯示完畢后線程立刻返回繼續(xù)接收數(shù)據(jù)。發(fā)送端程序也是使用單線程。將捕獲到的每一幀圖象數(shù)據(jù)送顯示器顯示的同時(shí),也存儲(chǔ)在固定的緩沖區(qū)中等待發(fā)送。當(dāng)程序沒有執(zhí)行發(fā)送的命令時(shí),在固定的緩沖區(qū)中前一幀的數(shù)據(jù)將被下一幀數(shù)據(jù)覆蓋和刷新。當(dāng)程序執(zhí)行了發(fā)送的命令時(shí),捕獲到的每一幀數(shù)據(jù)將被立刻發(fā)送,如果一幀數(shù)據(jù)不被發(fā)送完,程序?qū)⒈蛔枞谀抢锊粫?huì)再次捕獲下一幀圖象。即程序會(huì)將捕獲到的每一幀圖象數(shù)據(jù)完整的發(fā)送出去以后才返回,繼續(xù)捕獲下一幀。這樣每一幀視頻數(shù)據(jù)都能保證被實(shí)時(shí)發(fā)送出去。3.2視頻捕獲方案的設(shè)計(jì)當(dāng)前,在Windows平臺(tái)下開發(fā)視頻應(yīng)用程序一般采用兩種方式:一種是基于軟件開發(fā)包DirectShowSDK(Softwaredevelopmentkit)進(jìn)行。DirectShow是一個(gè)windows平臺(tái)上的流媒體框架,提供了高質(zhì)量的多媒體流采集和回放功能。它支持多種多樣的媒體文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,DirectShow整合了其它的DirectX技術(shù),能自動(dòng)地偵測(cè)并使用可利用的音視頻硬件加速,也能支持沒有硬件加速的系統(tǒng)。DirectShow大大簡(jiǎn)化了媒體回放、格式轉(zhuǎn)換和采集工作。DirectShow是建立在組件對(duì)象模型(COM)上的,因此當(dāng)你編寫DirectShow應(yīng)用時(shí),你必須具備COM客戶端程序編寫的知識(shí)。對(duì)于大部分的應(yīng)用,你不需要實(shí)現(xiàn)自己的COM對(duì)象,DirectShow提供了大部分你需要的DirectShow組件,但是假如你需要編寫自己的DirectShow組件,你還需要具備編寫COM組件的知識(shí)。這個(gè)開發(fā)包通常都會(huì)包含所需要的API函數(shù)、幫助文檔、使用手冊(cè)、輔助工具等資源。也就是說(shuō)SDK實(shí)際上就是這些開發(fā)資源的一個(gè)集合。使用這種方式要求在電腦上安裝上相應(yīng)的組件。另一種方式是基于上一節(jié)中介紹的VFW(VideoforWindows進(jìn)行的。VFW做為Windows平臺(tái)下的視頻應(yīng)用程序提供的軟件工具包,用戶可以通過它們很方便地實(shí)現(xiàn)視頻捕獲、視頻編輯及視頻播放等通用功能,還可利用回調(diào)函數(shù)開發(fā)更復(fù)雜的視頻應(yīng)用程序。它將開發(fā)者從硬件的底層束縛中解放出來(lái),大大簡(jiǎn)化了數(shù)字視頻捕獲這一原本很復(fù)雜的工作,利用它可以很方便的將模擬視頻信號(hào)數(shù)字化,并支持進(jìn)一步處理和播放,為開發(fā)實(shí)時(shí)視頻應(yīng)用程序開辟了道路。它的特點(diǎn)是播放視頻時(shí)不需要專用的硬件設(shè)備,而且應(yīng)用靈活,可以滿足視頻應(yīng)用程序開發(fā)的需要。Windows操作系統(tǒng)自身就攜帶了VFW,系統(tǒng)安裝時(shí)會(huì)自動(dòng)安裝VFW的相關(guān)組件。VC++自4.0以來(lái)就支持VFW,大大簡(jiǎn)化了視頻應(yīng)用程序的開發(fā)。我經(jīng)過認(rèn)真仔細(xì)的從各個(gè)方面對(duì)兩個(gè)方案進(jìn)行了比較?;谙到y(tǒng)的開發(fā)環(huán)境,也為了開發(fā)的簡(jiǎn)單方便,最后決定采用VFWAPI進(jìn)行視頻捕獲。因?yàn)槿绻肈irectShow的話,系統(tǒng)需要安裝相應(yīng)的SDK,配置相應(yīng)的開發(fā)環(huán)境,還要具備COM組件的基礎(chǔ)知識(shí),將要比用VFW要花費(fèi)更多的時(shí)間;本系統(tǒng)只是利用USB攝相頭實(shí)現(xiàn)視頻捕獲的功能,所以從所要實(shí)現(xiàn)的功能來(lái)看,用VFW已經(jīng)足夠了。在第二章中的VFW介紹中有一個(gè)avicap.dll。這個(gè)庫(kù)中提供了功能強(qiáng)大、簡(jiǎn)單易行的窗口類AVICap[9]。它為應(yīng)用程序提供了一個(gè)簡(jiǎn)單的,基于消息的接口,使之能夠訪問視頻和波形音頻硬件,并能夠在視頻流捕獲到硬盤上的過程進(jìn)行控制。這些接口函數(shù)是高級(jí)的,經(jīng)過了優(yōu)化的,我們利用它們來(lái)創(chuàng)建自己的應(yīng)用程序具有較大的靈活性[11]。下面是視頻捕捉以及處理過程中涉及到的幾個(gè)很重要的結(jié)構(gòu):1)CAPSTATUS此結(jié)構(gòu)定義了捕獲窗口的當(dāng)前狀態(tài),如:以象素為單位表示圖象的高,寬,預(yù)覽和重疊方式的標(biāo)志量,尺寸縮放的標(biāo)志量等等。2)CAPDRIVERCAPS此結(jié)構(gòu)定義了捕獲驅(qū)動(dòng)器的能力,如有無(wú)視頻疊加能力,以及能否通過用戶直接操作捕獲窗口而查看視頻源,視頻格式,視頻顯示。3)CAPTRUEPARMS此結(jié)構(gòu)包含控制視頻流捕獲過程的一些參數(shù),如捕獲時(shí)間限制,指定鍵盤或者鼠標(biāo)鍵以終止捕獲,捕獲視頻幀等。以上3個(gè)結(jié)構(gòu)都專門有對(duì)應(yīng)的函數(shù)來(lái)設(shè)置和獲得相應(yīng)的信息。4)LPVIDEOHDR此結(jié)構(gòu)用于定義視頻數(shù)據(jù)塊的頭信息。在視頻數(shù)據(jù)回調(diào)處理是尤為重要。LPVIDEOHDR結(jié)構(gòu)一共有六個(gè)域如下lpVHdr->dwBufferLengthlpVHdr->dwBytesUsedlpVHdr->dwFlagslpVHdr->dwReservedlpVHdr->dwTimeCapturedlpVHdr->dwUserlpVHdr->lpData其數(shù)據(jù)成員lpData表示指向數(shù)據(jù)緩存的指針,dwBufferLength表示數(shù)據(jù)緩存的大小。這兩個(gè)數(shù)據(jù)成員很重要,在編寫回調(diào)函數(shù)時(shí)用到。通過AVIcap類實(shí)現(xiàn)視頻捕獲的流程圖如下:整個(gè)流程的每一步都是調(diào)用的AVIcap類函數(shù),詳細(xì)的實(shí)現(xiàn)方法將在第4章中的4.1節(jié)介紹。圖3-4視頻捕獲流程3.3視頻傳輸方案設(shè)計(jì)局域網(wǎng)[10]是基于TCP/IP體系結(jié)構(gòu)的,為了保證適用本系統(tǒng)也采用TCP/IP協(xié)議。實(shí)現(xiàn)局域網(wǎng)視頻圖象的傳輸,傳輸協(xié)議是最為關(guān)鍵的。本文傳輸層用了兩種方案,控制采用TCP協(xié)議,傳輸采用UDP協(xié)議,下面分別對(duì)這兩個(gè)方案做介紹。1)根據(jù)傳輸所使用的協(xié)議是TCP,稱之為TCP報(bào)文段。傳輸控制協(xié)議TCP中包含了專門的傳遞保證機(jī)制,提供可靠的全雙工通信。當(dāng)數(shù)據(jù)接收方收到發(fā)送方傳來(lái)的信息時(shí),會(huì)自動(dòng)向發(fā)送方發(fā)出確認(rèn)消息;發(fā)送方只有在接收到該確認(rèn)消息之后才繼續(xù)傳送其它信息,否則將一直等待直到收到確認(rèn)信息為止。數(shù)據(jù)傳輸結(jié)束后要釋放連接。因此,通常人們把TCP協(xié)議稱為可靠的傳輸協(xié)議。2)UDP和TCP協(xié)議的主要區(qū)別是兩者在如何實(shí)現(xiàn)信息的可靠傳遞方面不同。根據(jù)傳輸所使用的協(xié)議是UDP,稱之為UDP用戶數(shù)據(jù)報(bào)。UDP協(xié)議不提供數(shù)據(jù)傳送的保證機(jī)制。如果在從發(fā)送方到接收方的傳遞過程中出現(xiàn)數(shù)據(jù)報(bào)的丟失,協(xié)議本身并不能做出任何檢測(cè)或提示。因此,通常人們把UDP協(xié)議稱為不可靠的傳輸協(xié)議。在TCP協(xié)議中發(fā)送方和接收方必須交換額外的信息以保證接收方已經(jīng)接收到所發(fā)送的數(shù)據(jù)包并且所接收到的數(shù)據(jù)和發(fā)送方所發(fā)送的數(shù)據(jù)在內(nèi)容和順序上是完全一致的。我們?cè)谝曨l發(fā)送之前,要先確定兩端已經(jīng)建立了連接,如果有一端沒有打開,或者程序出錯(cuò),另一方必須確保能知道這個(gè)事件。所以確立連接和結(jié)束連接這部分只能是TCP協(xié)議。TCP為了保證可靠,所以有很多額外的信息交換,雖然提高了數(shù)據(jù)傳輸?shù)目煽慷葏s也給網(wǎng)絡(luò)帶來(lái)了額外的負(fù)擔(dān),導(dǎo)致數(shù)據(jù)交換的延遲,從而降低整個(gè)網(wǎng)絡(luò)數(shù)據(jù)交換能力。UDP協(xié)議省去了建立連接和拆除連接的過程,取消了重發(fā)檢驗(yàn)機(jī)制,所以能夠達(dá)到較高的通信速率,但是其代價(jià)是不能保證可靠性,在強(qiáng)調(diào)傳輸速率而不是傳輸?shù)耐暾缘臅r(shí)候就應(yīng)該選擇UDP協(xié)議。視頻傳輸系統(tǒng)強(qiáng)調(diào)的是圖象傳輸?shù)膶?shí)時(shí)性,在局域網(wǎng)內(nèi)數(shù)據(jù)傳輸?shù)目煽啃砸呀?jīng)很高了,圖象數(shù)據(jù)在傳輸中出錯(cuò)的機(jī)率是很小的。即使某一幀出現(xiàn)了錯(cuò)誤,它也能很快的被下一幀圖象刷新。綜合各方面的因素,進(jìn)行視頻傳輸時(shí),傳輸層協(xié)議選擇UDP。用戶數(shù)據(jù)報(bào)協(xié)議UDP只在IP的數(shù)據(jù)報(bào)服務(wù)之上增加了很少的一點(diǎn)功能,這就是端口的功能和差錯(cuò)校驗(yàn)的功能。在傳輸?shù)臅r(shí)候,UDP數(shù)據(jù)報(bào)的結(jié)構(gòu)如圖3-5:數(shù)據(jù)報(bào)之前增加了12個(gè)字節(jié)的偽首部,它并不是UDP用戶數(shù)據(jù)報(bào)真正的首部,只是在計(jì)算檢驗(yàn)和時(shí),臨時(shí)和UDP用戶數(shù)據(jù)報(bào)連接在一起,得到一個(gè)過渡的UDP用戶數(shù)據(jù)報(bào)。檢驗(yàn)和就是按照這個(gè)過渡的UDP用戶數(shù)據(jù)報(bào)來(lái)計(jì)算的。偽首部?jī)H僅是為了計(jì)算校驗(yàn)和[11]。UDP協(xié)議使用報(bào)頭中的校驗(yàn)和來(lái)保證數(shù)據(jù)的安全。校驗(yàn)和首先在數(shù)據(jù)發(fā)送方通過特殊的算法計(jì)算得出,在傳遞到接收方之后,還需要再重新計(jì)算。如果某個(gè)數(shù)據(jù)報(bào)在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗(yàn)計(jì)算值將不會(huì)相符,由此UDP協(xié)議可以檢測(cè)是否出錯(cuò)。這與TCP協(xié)議是不同的,后者要求必須具有校驗(yàn)和。整個(gè)UDP用戶數(shù)據(jù)報(bào)的結(jié)構(gòu)如圖3-5所示,可以看到在UDP用戶數(shù)據(jù)只是IP數(shù)據(jù)報(bào)里面的數(shù)據(jù)。下面我們來(lái)講解一下UDP的首部,即報(bào)頭。UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)報(bào)的形式。一個(gè)典型的數(shù)據(jù)報(bào)就是一個(gè)二進(jìn)制數(shù)據(jù)的傳輸單位。每一個(gè)數(shù)據(jù)報(bào)的前8個(gè)字節(jié)用來(lái)包含報(bào)頭信息。剩余字節(jié)則用來(lái)包含具體的傳輸數(shù)據(jù)。UDP報(bào)頭由4個(gè)域組成,其中每個(gè)域各占用2個(gè)字節(jié),具體如下:源端口號(hào),目標(biāo)端口號(hào),數(shù)據(jù)報(bào)長(zhǎng)度,校驗(yàn)值。UDP協(xié)議使用端口號(hào)為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。UDP和TCP協(xié)議正是采用這一機(jī)制實(shí)現(xiàn)對(duì)同一時(shí)刻內(nèi)多項(xiàng)應(yīng)用同時(shí)發(fā)送和接收數(shù)據(jù)的支持。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務(wù)器端)將UDP數(shù)據(jù)報(bào)通過源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過目標(biāo)端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或注冊(cè)的靜態(tài)端口;而另外一些網(wǎng)絡(luò)應(yīng)用則可以使用未被注冊(cè)的動(dòng)態(tài)端口。因?yàn)閁DP報(bào)頭使用兩個(gè)字節(jié)存放端口號(hào),所以端口號(hào)的有效范圍是從0到65535。一般來(lái)說(shuō),大于49151的端口號(hào)都代表動(dòng)態(tài)端口。數(shù)據(jù)報(bào)的長(zhǎng)度是指包括報(bào)頭和數(shù)據(jù)部分在內(nèi)的總的字節(jié)數(shù)。因?yàn)閳?bào)頭的長(zhǎng)度是固定的,所以該域主要被用來(lái)計(jì)算可變長(zhǎng)度的數(shù)據(jù)部分(又稱為數(shù)據(jù)負(fù)載)。數(shù)據(jù)報(bào)的最大長(zhǎng)度根據(jù)操作環(huán)境的不同而各異。從理論上說(shuō),包含報(bào)頭在內(nèi)的數(shù)據(jù)報(bào)的最大長(zhǎng)度為65535字節(jié)。不過,一些實(shí)際應(yīng)用往往會(huì)限制數(shù)據(jù)報(bào)的大小,有時(shí)會(huì)降低到8192字節(jié)。在MFC庫(kù)中提供了對(duì)Socket的封裝,有兩個(gè)類:1)異步類CAsyncSocket[12],它封裝了異步、非阻塞Socket的基本功能,用它做常用的網(wǎng)絡(luò)通信軟件很方便。但它屏蔽了Socket的異步、非阻塞等概念,開發(fā)人員無(wú)需了解異步、非阻塞Socket的原理和工作機(jī)制。服務(wù)器端和客戶端的應(yīng)用程序均是基于MFC的標(biāo)準(zhǔn)對(duì)話框,網(wǎng)絡(luò)通信部分基于CAsyncSocket實(shí)現(xiàn)。當(dāng)你獲得了一個(gè)異步連接后,實(shí)際上你掃除了發(fā)送動(dòng)作與接收動(dòng)作之間的依賴性。所以你隨時(shí)可以發(fā)包,也隨時(shí)可能收到包。發(fā)送、接收函數(shù)都是異步非阻塞的,頃刻就能完成,所以收發(fā)交錯(cuò)進(jìn)行著,你可以一直工作,保持很高的效率。2)CSocket類是CAsyncSocket導(dǎo)出的類,提供了更高層次的抽象,封裝了Socket實(shí)現(xiàn)中的許多細(xì)節(jié)。局域網(wǎng)實(shí)時(shí)視頻傳輸采用服務(wù)器/客戶機(jī)模式。我采用了異步非阻塞套接字來(lái)進(jìn)行此次網(wǎng)絡(luò)通信程序的開發(fā)。而CAsyncSocket正封裝了這個(gè)功能,它完全可以滿足該系統(tǒng)的需要。所以我們選用CAsyncSocket套接字。本文中文件傳輸采用的傳輸協(xié)議是TCP控制,UDP傳輸,在建立客戶/服務(wù)端連接是采用的TCP協(xié)議,建立連接后視頻傳輸開始就采用UDP協(xié)議了。根據(jù)傳輸層在不同的功能使用不同的協(xié)議,也分別使用了兩個(gè)套接字和兩個(gè)端口。傳輸部分的軟件流程圖3-6首先在客戶端和服務(wù)端運(yùn)行程序后,用基于TCP的套接字建立連接,接下來(lái)執(zhí)行視頻傳輸時(shí)再創(chuàng)建一個(gè)基于UDP的套接字,結(jié)束時(shí)斷開連接。3.4視頻回放方案設(shè)計(jì)通過網(wǎng)絡(luò)傳輸?shù)浇邮斩说氖且环忠环奈粓D[13],顯示位圖數(shù)據(jù)可以通過設(shè)備上下文CDC對(duì)象的成員函數(shù)CDC::Bitblt(或CDC::StretchBlt(來(lái)實(shí)現(xiàn),也可以通過API函數(shù)SetDIBBitsToDevice(或StretchDIBBits(來(lái)實(shí)現(xiàn),函數(shù)中具體所用到的各個(gè)參數(shù)的意義可以參考MSDN。其中StretchDIBBits(和CDC::StretchBlt(可以將圖像進(jìn)行放大和縮小顯示??梢栽谠摵瘮?shù)中實(shí)現(xiàn)對(duì)視圖尺寸的設(shè)置。因?yàn)橄到y(tǒng)不需要對(duì)所接收到的圖象進(jìn)行改動(dòng),直接送到顯示器顯示,所以我們采用SetDIBBitsToDevice(這個(gè)函數(shù)來(lái)實(shí)現(xiàn)位圖(DDB)的顯示。在對(duì)位圖進(jìn)行顯示的時(shí)候,涉及到了位圖信息頭BITMAPINFOHEADER結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體對(duì)視頻處理很重要?,F(xiàn)簡(jiǎn)單說(shuō)明如下:位圖信息頭BITMAPINFOHEADER,其定義如下:typedefstructtagBITMAPINFOHEADER{DWORDbiSize;LONGbiWidth;LONGbiHeight;WORDbiPlanes;WORDbiBitCountDWORDbiCompression;DWORDbiSizeImage;LONGbiXPelsPerMeter;LONGbiYPelsPerMeter;DWORDbiClrUsed;DWORDbiClrImportant;}BITMAPINFOHEADER;這個(gè)結(jié)構(gòu)的長(zhǎng)度是固定的,為40個(gè)字節(jié)(LONG為32位整數(shù),各個(gè)域的說(shuō)明如下:biSize指定這個(gè)結(jié)構(gòu)的長(zhǎng)度,為40。biWidth指定圖象的寬度,單位是象素。biHeight指定圖象的高度,單位是象素。biPlanes必須是1,不用考慮。biBitCount指定表示顏色時(shí)要用到的位數(shù),常用的值為1(黑白二色圖,4(16色圖,8(256色,24(真彩色圖(新的.bmp格式支持32位色,這里就不做討論了。BiCompression指定位圖是否壓縮,有效的值為BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定義好的常量。要說(shuō)明的是,Windows位圖可以采用RLE4,和RLE8的壓縮格式,但用的不多。我們今后所討論的只有第一種不壓縮的情況,即biCompression為BI_RGB的情況。biSizeImage指定實(shí)際的位圖數(shù)據(jù)占用的字節(jié)數(shù),其實(shí)也可以從以下的公式中計(jì)算出來(lái):biSizeImage=biWidth’×biHeight要注意的是:上述公式中的biWidth必須是4的整倍數(shù)(所以不是biWidth,而是biWidth’,表示大于或等于biWidth的,最接近4的整倍數(shù)。舉個(gè)例子,如果biWidth=240,則biWidth’=240;如果biWidth=241,則biWidth’=244。如果biCompression為BI_RGB,則該項(xiàng)可能為零biXPelsPerMeter指定目標(biāo)設(shè)備的水平分辨率,單位是每米的象素個(gè)數(shù)。biYPelsPerMeter指定目標(biāo)設(shè)備的垂直分辨率,單位同上。biClrUsed指定本圖象實(shí)際用到的顏色數(shù),如果該值為零,則用到的顏色數(shù)為2biBitCount。biClrImportant指定本圖象中重要的顏色數(shù),如果該值為零,則認(rèn)為所有的顏色都是重要的。3.5開發(fā)平臺(tái)和工具的選擇軟件開發(fā)平臺(tái)的選擇首先取決于程序?qū)⒁\(yùn)行的環(huán)境。用戶使用的計(jì)算機(jī)及操作系統(tǒng),以及用戶運(yùn)用計(jì)算機(jī)的專業(yè)化程度等,影響著軟件開發(fā)人員可選擇的范圍。就我們所要開發(fā)的系統(tǒng)而言,其用戶是對(duì)系統(tǒng)的先進(jìn)性、可靠性、經(jīng)濟(jì)性等要求較為苛刻的高新技術(shù)企業(yè),而具體操作者則主要是從未接受過計(jì)算機(jī)專業(yè)培訓(xùn)的普通技工,因而對(duì)系統(tǒng)的易操作性和易維護(hù)性等同樣有很高的要求。因此,選用運(yùn)行Windows操作系統(tǒng)的PC機(jī)作為該系統(tǒng)的基本開發(fā)平臺(tái)幾乎是目前唯一的選擇。同樣,為了保證系統(tǒng)的先進(jìn)性、易操作性、易維護(hù)性和易升級(jí)性,我們選擇Microsoft公司出品的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言VisualC++6.0作為開發(fā)工具,它是目前為止Windows環(huán)境下進(jìn)行大型軟件開發(fā)的首選。Windows操作系統(tǒng)和面向?qū)ο蟮腣isualC++6.0程序設(shè)計(jì)語(yǔ)言是非常適合于該系統(tǒng)研制的開發(fā)環(huán)境和編程工具。3.6本章小節(jié)本章主要從總體到局部詳細(xì)分析了整個(gè)課題的方案以及實(shí)現(xiàn)方法,分三個(gè)模塊來(lái)分別對(duì)局部設(shè)計(jì)進(jìn)行闡述,介紹了所要使用的概念,畫出了流程圖并明確且詳細(xì)的做出了分析。為后面第四章的方案實(shí)現(xiàn)奠定了基礎(chǔ)。第4章局域網(wǎng)視頻監(jiān)控系統(tǒng)實(shí)現(xiàn)在完成系統(tǒng)方案論證和軟件開發(fā)方法的介紹之后,這一章主要介紹視頻監(jiān)控軟件系統(tǒng)的實(shí)現(xiàn)。用VC++6.0來(lái)實(shí)現(xiàn)每一部分的軟件編程。對(duì)于視頻監(jiān)控軟件系統(tǒng)的程序設(shè)計(jì)主要分三部分,一部分是發(fā)送端利用USB攝象頭進(jìn)行視頻采集程序設(shè)計(jì),一部分是視頻傳輸從發(fā)送到接程序的設(shè)計(jì),還有一部分是在接收端對(duì)接收到的數(shù)據(jù)進(jìn)行處理后顯示的程序。下面將詳細(xì)介紹它們的實(shí)現(xiàn)過程。4.1視頻采集實(shí)現(xiàn)視頻數(shù)據(jù)的實(shí)時(shí)采集,主要通過AVICAP模塊中的消息、宏函數(shù)、結(jié)構(gòu)以及回調(diào)函數(shù)來(lái)完成。根據(jù)圖3-4視頻捕獲的流程圖來(lái)說(shuō)明視頻捕獲每一步的具體實(shí)現(xiàn)的具體:1)建立捕獲窗口利用AVICAP組件函數(shù)capCreateCaptureWindow(建立視頻捕獲窗口,它是所有捕獲工作及設(shè)置的基礎(chǔ),其主要功能包括:①動(dòng)態(tài)地同視頻和音頻輸入器連接或斷開;②設(shè)置視頻捕獲速率;③提供視頻源、視頻格式以及是否采用視頻壓縮的對(duì)話框;④設(shè)置視頻采集的顯示模式為Overlay或?yàn)镻review;⑤實(shí)時(shí)獲取每一幀視頻數(shù)據(jù);⑥將一視頻流和音頻流捕獲并保存到一個(gè)AVI文件中;⑦捕獲某一幀數(shù)字視頻數(shù)據(jù),并將單幀圖像以DIB格式保存;⑧指定捕獲數(shù)據(jù)的文件名,并能將捕獲的內(nèi)容拷貝到另一文件。2)連接捕獲窗口與視頻捕獲卡通過宏capDriveConnect(hWndc,0來(lái)完成。3)設(shè)置捕獲窗口的預(yù)覽速率視頻捕獲后會(huì)在捕獲窗口顯示捕獲到的圖象,這時(shí)我們需要對(duì)視頻捕獲和顯示的速率進(jìn)行設(shè)置,否則它就是默認(rèn)的。4)設(shè)置捕獲窗口顯示模式視頻顯示有Overlay(疊加和Preview(預(yù)覽兩種模式。在疊加模式下,捕獲視頻數(shù)據(jù)布展系統(tǒng)資源,顯示速度快,視頻采集格式為YUV格式,capOverlay(hWndc,TRUE來(lái)設(shè)置;預(yù)覽模式下要占用系統(tǒng)資源,視頻由系統(tǒng)調(diào)用GDI函數(shù)在捕獲窗顯示,顯示速度慢,它支持RGB視頻格式。此次程序我們選擇Preview(預(yù)覽模式[11]。5)登記回調(diào)函數(shù)登記回調(diào)函數(shù)用來(lái)實(shí)現(xiàn)用戶的一些特殊需要。在以一些實(shí)時(shí)監(jiān)控系統(tǒng)或視頻會(huì)議系統(tǒng)中,需要將數(shù)據(jù)流在寫入磁盤以前就必須加以處理,達(dá)到實(shí)時(shí)功效。應(yīng)用程序可用捕獲窗來(lái)登記回調(diào)函數(shù),以便及時(shí)處理以下情況。我們登記capSetCallbackOnFrame(hWndc,FrameCallbackProc)這個(gè)回調(diào)函數(shù)。6)捕獲圖像到緩存或文件并作相應(yīng)處理利用回調(diào)機(jī)制,由capSetCallbackOnFrame(hWndc,FrameCallbackProc)完成單幀視頻采集;獲取實(shí)時(shí)數(shù)據(jù)緩沖區(qū)的首址和長(zhǎng)度并對(duì)圖象數(shù)據(jù)進(jìn)行處理。VFW中的這條宏函數(shù)如用于設(shè)置在發(fā)生某件事情后能作出反應(yīng)的回調(diào)函數(shù)時(shí),和中斷服務(wù)機(jī)制很相似,條件一滿足,程序會(huì)自動(dòng)進(jìn)入相應(yīng)的回調(diào)函數(shù)替中,該函數(shù)究竟要做什么全由開發(fā)者借助其參數(shù)自行編制程序來(lái)確定。使用capSetCallbackOnFrame(hWndc,FrameCallbackProc)時(shí)只要一啟動(dòng)視頻捕獲,一幀結(jié)束就立刻產(chǎn)生回調(diào)動(dòng)作,怎樣響應(yīng)就由登記在函數(shù)capSetCallbackOnFrame()里面的FrameCallbackProc(HWNDhWnd,LPVIDEOHDRlpVHdr)來(lái)處理。值得注意的是回調(diào)函數(shù)要提前定義在程序的頭部。7)終止視頻捕獲,斷開與視頻采集設(shè)備的連接調(diào)用capCatureStop(hWndc停止采集,調(diào)用capDriverDisconnect(hWndc,斷開視頻窗口與捕獲驅(qū)動(dòng)程序的連接。實(shí)現(xiàn)視頻捕獲的主要代碼段如下:hWndc=capCreateCaptureWindow("李萍",WS_VISIBLE|WS_CHILD,3,0,320,240,this->m_hWnd,1;//創(chuàng)建捕獲窗口capDriverConnect(hWndc,0;//連接攝相頭驅(qū)動(dòng)capPreviewRate(hWndc,40;//設(shè)置捕獲速率capPreview(hWndc,true;//設(shè)置顯示模式capSetCallbackOnFrame(hWndc,FrameCallBack;//登記回調(diào)函數(shù)程序執(zhí)行后的界面如圖:圖4-1視頻捕獲界面這里一共有四個(gè)按紐,按下“開始傳輸”后,程序?qū)⒉东@的圖象發(fā)送到接收端。按下“顯示設(shè)置”按紐后,可以調(diào)節(jié)所捕獲的圖象的亮度、灰度、對(duì)比度等,還可以選擇捕獲源。按下“格式設(shè)置”按紐以后會(huì)出現(xiàn)可以調(diào)節(jié)分辨率的界面。程序運(yùn)行后在捕獲窗口中不斷的動(dòng)態(tài)顯示著一幀又一幀捕獲的圖象。在這里要注意一個(gè)問題:視頻窗口大小設(shè)置為320×240,因?yàn)檫@里顯示的圖象是VFW函數(shù)捕獲到的原始大小圖象,而它的原始大小正好為320×240。4.2視頻傳輸?shù)膶?shí)現(xiàn)針對(duì)建立連接這部分,CAsyncSocket類針對(duì)字節(jié)流型套接字的編程模型[14]簡(jiǎn)述如下[7]:1)構(gòu)造一個(gè)CAsyncSocket對(duì)象,并用這個(gè)對(duì)象的Create成員函數(shù)產(chǎn)生一個(gè)Socket句柄。第一種方法在棧上產(chǎn)生一個(gè)CAsyncSocket對(duì)象,而第二種方法在堆上產(chǎn)生CAsyncSocket對(duì)象。第一種Create成員函數(shù)用缺省參數(shù)產(chǎn)生一個(gè)字節(jié)流套接字,第二種Create成員函數(shù)用指定的端口和地址產(chǎn)生一個(gè)數(shù)字報(bào)套接字。我們采用的是第二中方法。Create的參數(shù)有:①端口,UINT類型。注意:如果是服務(wù)方,則使用一個(gè)眾所周知的端口供服務(wù)方連接;如果是客戶方,典型做法是接受默認(rèn)參數(shù),使套接字可以自主選擇一個(gè)可用端口;②socket類型。SOCK-STREAM(默認(rèn)值)或SOCK-DGRAM;2)如是客戶方程序,用CAsyncSocket∷Connect成員函數(shù)連接到服務(wù)方;如是服務(wù)方程序,用CAsyncSocket∷Listen成員函數(shù)開始監(jiān)聽,一旦收到連接請(qǐng)求,則調(diào)用CAsyncSocket∷Accept成員函數(shù)開始接收。注意:CAsyncSocket∷Accept成員函數(shù)要用一個(gè)新的并且是空的CSocket對(duì)象作為它的參數(shù),這里所說(shuō)的“空的”指的是這個(gè)新對(duì)象還沒有調(diào)用Create成員函數(shù)。3)調(diào)用其他的CAsyncSocket類成員函數(shù)進(jìn)行通訊管理。4)通訊結(jié)束后,銷毀CAsyncSocket對(duì)象。如果是在棧上產(chǎn)生的CAsyncSocket對(duì)象,則對(duì)象超出定義的范圍時(shí)自動(dòng)被析構(gòu);如果是在堆上產(chǎn)生,也就是用了new這個(gè)操作符,則必須使用delete操作符銷毀CAsyncSocket對(duì)象。使用CAsyncSocket傳輸?shù)牧鞒蘙15]如圖:圖4-2Socket建立連接的模型服務(wù)器端的主要代碼如下:voidCTCP_SERVERDlg::OnButton1({//TODO:AddyourcontrolnotificationhandlercodehereCStringstr;CTCP_SERVERDlg*dlg=(CTCP_SERVERDlg*::AfxGetMainWnd(;::AfxSocketInit(;//初始化套接字dlg->m_start.GetWindowText(str;//指定按紐內(nèi)字體if(str=="開始傳輸"{dlg->m_start.SetWindowText("停止傳輸";//將按紐的字體設(shè)置為停止傳輸c_listensock.Create(1000,SOCK_STREAM,FD_ACCEPT;//初始化監(jiān)聽套接字c_listensock.Listen(;//開監(jiān)聽}else{dlg->m_start.SetWindowText("開始傳輸";//將按紐的字體設(shè)置為開始傳輸c_listensock.Close(;//關(guān)閉套接字c_listensock.Listen(;//開監(jiān)聽m_connected=false;}}建立連接后服務(wù)端的調(diào)用函數(shù)執(zhí)行代碼如下:voidClistensock::OnAccept(intnErrorCode{//TODO:Addyourspecializedcodehereand/orcallthebaseclassCTCP_SERVERDlg*dlg=(CTCP_SERVERDlg*::AfxGetMainWnd(;Accept(dlg->l_resocket;dlg->l_resocket.AsyncSelect(FD_READ|FD_WRITE;//為套接字請(qǐng)求事件dlg->m_connected=true;if(ready==0dlg->l_udpsocket.Create(5000,SOCK_DGRAM;//創(chuàng)建UDP套接字CAsyncSocket::OnAccept(nErrorCode;}客戶端的主要代碼如下:voidCTcp_c2Dlg::Onconnect({//TODO:Addyourcontrolnotificationhandlercodehere::AfxSocketInit(;//初始化套接字c_clientsock.Create(0,SOCK_STREAM,FD_CONNECT|FD_READ|FD_WRITE;//初始化監(jiān)聽}完成視頻捕獲后,在發(fā)送端點(diǎn)擊“開始傳輸”按紐后,在接收端點(diǎn)擊“視頻請(qǐng)求”按紐,這時(shí)就會(huì)在接收端回就不斷的回放發(fā)送端捕捉到的圖象。如圖所示是發(fā)送端和接收端在同一時(shí)間顯示的圖象。這說(shuō)明發(fā)送是成功的。發(fā)送端:圖4-3發(fā)送端傳輸界面接收端:圖4-4接收端傳輸界面如果要停止傳輸,在接收端點(diǎn)擊停止傳輸按紐,此時(shí)看到接收端圖象停止不動(dòng)了,說(shuō)明沒有收到新的圖象對(duì)以前的圖象進(jìn)行刷新。停止傳輸已經(jīng)成功,如圖所示:在發(fā)送端按下“停止傳輸”按紐后,發(fā)送端和接收端在同一時(shí)間所顯示的圖象是不同的,接收端已經(jīng)在按紐按下那一刻起停止不動(dòng)了。發(fā)送端:圖4-5停止傳輸后發(fā)送端界面接收端:圖4-6停止傳輸后接收端界面需要注意的是“開始傳輸”與“停止傳輸”按紐是同一個(gè)按紐,在兩個(gè)之間切換的。當(dāng)點(diǎn)擊“開始傳輸”后,按紐就變成“停止傳輸”。4.3視頻接收還原的實(shí)現(xiàn)這部分相對(duì)前兩部分比較簡(jiǎn)單。因?yàn)榻邮盏降臄?shù)據(jù)在接收緩沖區(qū)中,將其取出顯示就不需要加載位圖數(shù)據(jù)了。只需要以下幾個(gè)步驟:1)定義一個(gè)兼容DC指針并指向設(shè)備描述符表。2)通過指定的函數(shù)將接收到的數(shù)據(jù)送到設(shè)備顯示。主要代碼如下:c_count=0;CTcp_c2Dlg*pDlg=(CTcp_c2Dlg*::AfxGetMainWnd(;CDC*pDC=pDlg->GetDC(;獲得DC句柄SetDIBitsToDevice(pDC->GetSafeHdc(,10,10,320,240,0,0,0,240,buffer,&(pDlg->m_info,DIB_RGB_COLORS;//顯示位圖通過測(cè)試,接收端成功顯示了圖象,接收端接收到發(fā)送端的圖象后,顯示狀態(tài)如圖4-7圖4-7接收端的顯示界面4.4局域網(wǎng)視頻監(jiān)控系統(tǒng)的測(cè)試與分析前面三節(jié)中,已經(jīng)分別實(shí)現(xiàn)了視頻捕獲、傳輸和顯示的功能。這一節(jié)要實(shí)現(xiàn)視頻捕獲后在網(wǎng)絡(luò)中傳輸然后回放的功能,即實(shí)現(xiàn)本次設(shè)計(jì)最終所要求的功能。既然視頻捕獲、傳輸和回放功能都分別實(shí)現(xiàn)了,那么現(xiàn)在要做的就是把這兩部分連接起來(lái),構(gòu)成一個(gè)整體。此次實(shí)驗(yàn)在VC++中的MFC環(huán)境中,利用AppWizard生成Dialog類型的應(yīng)用程序。在Dilog中設(shè)置程序所需要的全部控件和函數(shù)。將兩部分代碼整合,調(diào)試運(yùn)行。在調(diào)試過程中遇到了一個(gè)問題:視頻數(shù)據(jù)傳輸?shù)臅r(shí)候,程序的編譯、鏈接沒有出現(xiàn)問題,能正常執(zhí)行并彈出Dialog界面,但是在發(fā)送端點(diǎn)擊了“開始傳輸”按紐,在接收端也點(diǎn)擊了“視頻請(qǐng)求按紐”以后,在接收端并沒有象預(yù)期的那樣接收到數(shù)據(jù)。經(jīng)過分析,我看到SendTo(函數(shù)的返回值是“WSAEMSGSIZE”,這個(gè)錯(cuò)誤在MSDN里面的解釋是“Thesocketismessageoriented,andthemessageislargerthanthemaximumsupportedbytheunderlyingtransport”。所以發(fā)現(xiàn)問題在于一次性傳輸數(shù)據(jù)量過大導(dǎo)致傳輸失敗。所以針對(duì)這個(gè)問題我采用了分段傳輸?shù)姆椒ǎ瑢⒁粠瑘D象分成割成了四個(gè)UDP可以傳輸?shù)淖畲蟀?,傳輸?shù)浇邮斩撕笠卜侄谓邮铡_@里因?yàn)椴东@到的是視頻圖象,也就是說(shuō)捕獲到每一幅圖象都是一幅位圖,根據(jù)分段傳輸?shù)男枰?,我定義了一個(gè)結(jié)構(gòu)體來(lái)存儲(chǔ)所捕獲到的位圖數(shù)據(jù)。具體代碼如下:typedefst

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論