版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于ARM的視頻監(jiān)控系統(tǒng)上位機(jī)的設(shè)計(jì)摘 要現(xiàn)在電子技術(shù)、計(jì)算機(jī)技術(shù)以及通信技術(shù)等飛速的向前發(fā)展,網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)在民用、軍事、工業(yè)等各個(gè)領(lǐng)域得到越來越廣泛的應(yīng)用,視頻監(jiān)控系統(tǒng)已經(jīng)逐步滲透到了社會(huì)生活中的各個(gè)領(lǐng)域。隨著視頻壓縮技術(shù)、數(shù)據(jù)傳輸?shù)认嚓P(guān)技術(shù)的不斷發(fā)展,傳統(tǒng)的視頻監(jiān)控方式很難滿足用戶的需要。文中介紹了一種基于S3C2440 嵌入式平臺(tái)的視頻監(jiān)控系統(tǒng),并通過局域網(wǎng)傳輸使得網(wǎng)內(nèi)的計(jì)算機(jī)可以實(shí)時(shí)地獲得視頻圖像,從而可以達(dá)到遠(yuǎn)程監(jiān)控的目的。鑒于Linux 內(nèi)核的開源及其穩(wěn)定性,采用其作為操作系統(tǒng),從而使整個(gè)系統(tǒng)具有較好的實(shí)時(shí)性和穩(wěn)定性。該系統(tǒng)以高佳能的ARM處理器、嵌入式WEB服務(wù)器為核心,以互
2、聯(lián)網(wǎng)為支撐,通過瀏覽網(wǎng)頁訪問Web服務(wù)器的方式,觀看視頻監(jiān)控圖像。該系統(tǒng)有著廣泛的發(fā)晨前景,對(duì)其進(jìn)行研究有著重要的現(xiàn)實(shí)意義。關(guān)鍵詞:ARM,S3C2440,Linux,WEB,USB Video Surveillance System Based on ARMABSTRACTThe electronic technology, computer technology and communications technology, the development of fast forward, network video monitoring system in the civil, milit
3、ary, industrial and other fields are more widely used. The video surveillance system has permeated into various fields in our life step by step. Along with the continuous development of many techniques such as the video compression technique, the data transmission technique, and so on, many traditio
4、nal methods of video surveillance can hardly satisfy our requirement. A method of the video surveillance system based on S3C2440 is introduced, and any computers which are under the same network can capture the real - time video image through the LAN, by this means, a method of remote monitor can be
5、 achieved. In view of the feature of open source and the stability of the Linux core, this program adopts the Linux OS to make the whole system attain a higher feature of real - time and stability. Take the video surveillance system as a whole and present the principle of the system, the core of sys
6、tem is ARM micro processor and embedded by web server. And Internet is needed to support it, and the server can be visited in the way of web-view. Video surveillance system is very useful in the true life, so it is important to research it.KEY WORDS: ARM,S3C2440,Linux,WEB,USB目錄前言1第1章 視頻監(jiān)控系統(tǒng)總體設(shè)計(jì)方案31.
7、1 系統(tǒng)總體方案31.2 上位機(jī)設(shè)計(jì)方案5第2章 軟件設(shè)計(jì)方案62.1VC+簡(jiǎn)介62.2 基礎(chǔ)知識(shí)和理論92.3上位機(jī)軟件設(shè)計(jì)142.4上位機(jī)程序設(shè)計(jì)162.4.1 視頻數(shù)據(jù)接收端的實(shí)現(xiàn)172.4.2壓縮圖像解碼顯示19第3章 系統(tǒng)調(diào)試與運(yùn)行233.1測(cè)試環(huán)境233.2測(cè)試內(nèi)容233.2.1 VC程序測(cè)試233.2.2系統(tǒng)測(cè)試273.3測(cè)試結(jié)果29結(jié)論30謝 辭31參考文獻(xiàn)32外文資料翻譯34前言網(wǎng)絡(luò)視頻監(jiān)控技術(shù)是一門集電子技術(shù)、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和視頻技術(shù)于一體的綜合技術(shù),具有方便、直觀、豐富等特點(diǎn)。目前計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)以及多媒體技術(shù)正在飛速向前發(fā)展,遠(yuǎn)程自動(dòng)控制技術(shù)也逐漸融入到視頻監(jiān)控系統(tǒng)中,同
8、時(shí)視頻監(jiān)控技術(shù)也得到了快速的發(fā)展。傳統(tǒng)視頻監(jiān)控系統(tǒng)大多是以模擬圖像監(jiān)控為主,對(duì)視頻圖像的處理和傳輸都采用了模擬技術(shù),但是通過這種傳統(tǒng)監(jiān)控技術(shù)得到的圖象質(zhì)量比較低,并且系統(tǒng)資源浪費(fèi),可擴(kuò)展性比較差。當(dāng)前的視頻監(jiān)控系統(tǒng)正由模擬化向數(shù)字化轉(zhuǎn)換,并且向系統(tǒng)網(wǎng)絡(luò)化以及管理智能化等方向不斷的發(fā)展。視頻監(jiān)控系統(tǒng)是一種防范能力非常強(qiáng)的綜合系統(tǒng),在安防系統(tǒng)起著越來越重要的作用。交通、工業(yè)生產(chǎn)、銀行、智能辦公大樓等多種領(lǐng)域都廣泛用到了視頻監(jiān)控系統(tǒng)。在視頻監(jiān)控系統(tǒng)的發(fā)展史上,主要出現(xiàn)了三種類型的視頻監(jiān)控系統(tǒng)。根據(jù)系統(tǒng)出現(xiàn)的年代先后順序,這三種監(jiān)控系統(tǒng)依次是基于模擬視頻的電視監(jiān)控系統(tǒng),基于數(shù)字視頻的多媒體監(jiān)控系統(tǒng)以及
9、基于嵌入式技術(shù)的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)。前面兩種技術(shù)己經(jīng)發(fā)展的非常成熟,并且在實(shí)際工程中有著廣泛的應(yīng)用,而嵌入式監(jiān)控系統(tǒng)則是以計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和視頻壓縮技術(shù)為核心的一種新型數(shù)字視頻監(jiān)控系統(tǒng)。這類系統(tǒng)能夠?qū)崟r(shí)壓縮采集到得視頻數(shù)據(jù),可以將數(shù)據(jù)通過網(wǎng)絡(luò)傳輸?shù)绞澜绺鞯?,?shí)時(shí)性得到了很大的提高。嵌入式網(wǎng)絡(luò)監(jiān)控系統(tǒng)因?yàn)榻鉀Q了模擬監(jiān)控系統(tǒng)的部分弊端而得到了快速發(fā)展,但仍然需進(jìn)一步的完善。與傳統(tǒng)的模擬視頻監(jiān)控系統(tǒng)相比,嵌入式視頻監(jiān)控系統(tǒng)其具有體積小、攜帶方便、布控區(qū)域大等特點(diǎn),具有良好的應(yīng)用發(fā)展前景1。20世紀(jì)90年代末,隨著嵌入式技術(shù)、圖像處理技術(shù)、網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,基于嵌入式的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)出現(xiàn)了。嵌入式系統(tǒng)
10、是指以計(jì)算機(jī)技術(shù)為基礎(chǔ),以應(yīng)用為目標(biāo),軟件硬件可裁剪,適用于各個(gè)專業(yè)領(lǐng)域的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)是由嵌入式處理器、外圍的硬件電路、嵌入式操作系統(tǒng)以及應(yīng)用程序等四個(gè)部分組成的,主要實(shí)現(xiàn)對(duì)其他設(shè)備或各種環(huán)境的控制以及管理等?;谇度胧降木W(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的主要實(shí)現(xiàn)原理是:通過攝像頭采集過來的模擬信號(hào)經(jīng)過內(nèi)部處理轉(zhuǎn)換為數(shù)字信號(hào),然后通過軟件或者硬件將數(shù)字視頻信號(hào)壓縮,接著將壓縮后的數(shù)字信號(hào)發(fā)送到網(wǎng)絡(luò)或服務(wù)器上,經(jīng)授權(quán)用戶的可以在任意聯(lián)網(wǎng)的PC機(jī)上實(shí)時(shí)得到監(jiān)控?cái)?shù)據(jù)。嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)極大的提高了系統(tǒng)的實(shí)時(shí)性以及穩(wěn)定性,數(shù)據(jù)可以直接接入網(wǎng)絡(luò),只需一個(gè)授權(quán)的IP地址即可遠(yuǎn)程監(jiān)測(cè)。同時(shí)用戶不需要專門的
11、監(jiān)視播放器,比傳統(tǒng)視頻監(jiān)控系統(tǒng)容易實(shí)現(xiàn)的多,而且也價(jià)格便宜,易于擴(kuò)展。正是由于這類監(jiān)控系統(tǒng)具有易于使用、可靠穩(wěn)定、經(jīng)濟(jì)實(shí)用等特性,使得它有很好的發(fā)展前景。本設(shè)計(jì)提出了以S3C2440芯片為處理器的嵌入式網(wǎng)絡(luò)監(jiān)控系統(tǒng)實(shí)現(xiàn)方案。該方案采用ARM硬件模塊編碼,軟件解碼播放相結(jié)合的方法實(shí)現(xiàn)視頻圖像的采集、編碼、傳輸、解碼、顯示以及遠(yuǎn)程控制。本文首先分析了嵌入式網(wǎng)絡(luò)監(jiān)控系統(tǒng)的背景和意義,接著分析了視頻監(jiān)控系統(tǒng)的發(fā)展趨勢(shì),提出一種基于ARM的嵌入式網(wǎng)絡(luò)監(jiān)控系統(tǒng)的解決方案。接下來詳細(xì)的介紹了視頻監(jiān)控系統(tǒng)中主要軟件模塊的設(shè)計(jì)方案。最后介紹了整個(gè)系統(tǒng)的集成測(cè)試結(jié)果。在一般的網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控實(shí)現(xiàn)方案中,客戶只能被動(dòng)的
12、接收數(shù)據(jù)。在本設(shè)計(jì)中,客戶可以通過網(wǎng)頁主動(dòng)要求數(shù)據(jù)的傳輸,改變監(jiān)控圖像的參數(shù)等。同時(shí)在本方案中,用戶可以通過WEB控制模塊來實(shí)現(xiàn)客戶與服務(wù)器之間的互動(dòng),在客戶端可以通過網(wǎng)頁來完成視頻監(jiān)控的啟動(dòng)、參數(shù)設(shè)置、圖像裁剪和伸縮處理等。該系統(tǒng)具有高性能、低成本、易安裝、可擴(kuò)展等優(yōu)點(diǎn),有著非常廣泛的實(shí)用前景。 第1章 視頻監(jiān)控系統(tǒng)總體設(shè)計(jì)方案1.1 系統(tǒng)總體方案系統(tǒng)的總體設(shè)計(jì)方案,把系統(tǒng)設(shè)計(jì)分為硬件設(shè)計(jì)和軟件設(shè)計(jì)兩大部分,硬件設(shè)計(jì)部分主要介紹了S3C2440處理器模塊,存儲(chǔ)器模塊,網(wǎng)絡(luò)接口模塊,USB接口模塊。軟件設(shè)計(jì)部分首先論述了嵌入式Linux系統(tǒng)的移植過程,接著討論了嵌入式Linux下USB攝像頭驅(qū)
13、動(dòng)的實(shí)現(xiàn),然后論述了視頻圖像的采集和網(wǎng)絡(luò)傳輸過程,最后通過構(gòu)建嵌入式WEB服務(wù)器的方法實(shí)現(xiàn)客戶端的網(wǎng)絡(luò)WEB訪問功能。系統(tǒng)總體設(shè)計(jì)方案如下圖所示:圖 1-1 視頻監(jiān)控系統(tǒng)總體框圖網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)通常包括遠(yuǎn)程視頻采集和本地視頻查看及控制兩部分,二者通過網(wǎng)絡(luò)通信線路連接。涉及到視頻圖像采集、視頻壓縮、視頻傳輸、計(jì)算機(jī)網(wǎng)絡(luò)、視頻解碼及顯示、多點(diǎn)控制等多方面內(nèi)容和技術(shù)。本系統(tǒng)的總體結(jié)構(gòu)見圖1-1所示。ARM微處理器負(fù)責(zé)驅(qū)動(dòng)加載、初始化等工作,并將圖像幀壓縮成視頻幀通過以太網(wǎng)絡(luò)發(fā)送至監(jiān)控中心。同時(shí),遠(yuǎn)程現(xiàn)場(chǎng)時(shí)刻保持與監(jiān)控中心的通信:接收、解析、執(zhí)行來自監(jiān)控中心的指令,并向監(jiān)控中心發(fā)送反饋信息,如服務(wù)器退
14、出時(shí)通知客戶端斷開連接等。監(jiān)控中心負(fù)責(zé)將接收到的壓縮視頻進(jìn)行視頻存儲(chǔ)、解碼、顯示等,并發(fā)送相應(yīng)的指令信息,如連接請(qǐng)求或?qū)h(yuǎn)程端進(jìn)行控制等。接收端的控制指令通過視頻顯示器中顯示的用戶界面進(jìn)行操作,如通過鼠標(biāo)對(duì)相關(guān)控件進(jìn)行點(diǎn)擊等2。上位機(jī)主要設(shè)計(jì)視頻接收程序,視頻解碼程序,視頻顯示程序。本課題使用VC等開發(fā)工具來進(jìn)行網(wǎng)頁程序設(shè)計(jì),程序設(shè)計(jì)主要包括整個(gè)系統(tǒng)的軟件部分分成了六個(gè)模塊:視頻前端處理模塊、視頻采集模塊、視頻壓縮編碼模塊、視頻傳輸模塊、視頻解壓顯示模塊、WEB控制模塊。1.2 上位機(jī)設(shè)計(jì)方案上位機(jī)工作流程如下圖所示:圖1-2 上位機(jī)工作流程圖上位機(jī)主要設(shè)計(jì)視頻接收程序,視頻解碼程序,視頻顯示
15、程序!系統(tǒng)平臺(tái)實(shí)現(xiàn)網(wǎng)絡(luò)通信功能主要是和Internet的直接接入,在整個(gè)網(wǎng)絡(luò)環(huán)境中,嵌入式平臺(tái)這端作為服務(wù)器端,網(wǎng)絡(luò)中連接的主機(jī)作為客戶機(jī)。把作為服務(wù)器端的嵌入式平臺(tái)上采集并經(jīng)過JPEG壓縮后的圖像進(jìn)行網(wǎng)絡(luò)傳輸,客戶機(jī)端進(jìn)行接收、解壓顯示并可對(duì)攝像頭實(shí)現(xiàn)遠(yuǎn)程控制。第2章 軟件設(shè)計(jì)方案2.1 VC+簡(jiǎn)介Microsoft Visual C+是Microsoft公司推出的開發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫和界面設(shè)計(jì)集成交互操作、可開發(fā)多種程序等優(yōu)點(diǎn),而且通過簡(jiǎn)單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫接口、OLE2,WinSo
16、ck網(wǎng)絡(luò)、3D控制界面。它以擁有“語法高亮”,IntelliSense(自動(dòng)編譯功能)以及高級(jí)除錯(cuò)功能而著稱。比如,它允許用戶進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動(dòng)正在調(diào)試的程序。其編譯及建置系統(tǒng)以預(yù)編譯頭文件、最小重建功能及累加連結(jié)著稱。這些特征明顯縮短程式編輯、編譯及連結(jié)的時(shí)間花費(fèi),在大型軟件計(jì)劃上尤其顯著。Visual C+作為一個(gè)功能非常強(qiáng)大的可視化應(yīng)用程序開發(fā)工具,是計(jì)算機(jī)界公認(rèn)的最優(yōu)秀的應(yīng)用開發(fā)工具之一。Microsoft的基本類庫MFC使得開發(fā)Windows應(yīng)用程序比以往任何時(shí)候都要容易。1. 理解VC工程Visual C+作為一種程
17、序設(shè)計(jì)語言,它同時(shí)也是一個(gè)集成開發(fā)工具,提供了軟件代碼自動(dòng)生成和可視化的資源編輯功能。在使用Visual C+開發(fā)應(yīng)用程序的過程中,系統(tǒng)生成了大量的各種類型的文件,在本節(jié)中詳細(xì)介紹Visual C+中這些不同類型的文件分別起到什么樣的作用,在此基礎(chǔ)上對(duì)Visual C+如何管理應(yīng)用程序所用到的各種文件有一個(gè)全面的認(rèn)識(shí)。首先要介紹的是擴(kuò)展名為dsw的文件類型,這種類型的文件在VC中是級(jí)別最高的,稱為Workspace文件。在VC中,應(yīng)用程序是以Project的形式存在的,Project文件以.dsp擴(kuò)展名,在Workspace文件中可以包含多個(gè)Project,由Workspace文件對(duì)它們進(jìn)行統(tǒng)
18、一的協(xié)調(diào)和管理。與dsw類型的Workspace文件相配合的一個(gè)重要的文件類型是以opt為擴(kuò)展名的文件,這個(gè)文件中包含的是在Workspace文件中要用到的本地計(jì)算機(jī)的有關(guān)配置信息,所以這個(gè)文件不能在不同的計(jì)算機(jī)上共享,當(dāng)我們打開一個(gè)Workspace文件時(shí),如果系統(tǒng)找不到需要的opt類型文件,就會(huì)自動(dòng)地創(chuàng)建一個(gè)與之配合的包含本地計(jì)算機(jī)信息的opt文件。上面提到Project文件的擴(kuò)展名是dsp,這個(gè)文件中存放的是一個(gè)特定的工程,也就是特定的應(yīng)用程序的有關(guān)信息,每個(gè)工程都對(duì)應(yīng)有一個(gè)dsp類型的文件。以clw為擴(kuò)展名的文件是用來存放應(yīng)用程序中用到的類和資源的信息的,這些信息是VC中的ClassW
19、izard工具管理和使用類的信息來源。對(duì)應(yīng)每個(gè)應(yīng)用程序有一個(gè)readme.txt文件,這個(gè)文件中列出了應(yīng)用程序中用到的所有的文件的信息,打開并查看其中的內(nèi)容就可以對(duì)應(yīng)用程序的文件結(jié)構(gòu)有一個(gè)基本的認(rèn)識(shí)。在應(yīng)用程序中大量應(yīng)用的是以h和cpp為擴(kuò)展名的文件,以h為擴(kuò)展名的文件稱為頭文件。以cpp為擴(kuò)展名的文件稱為實(shí)現(xiàn)文件,一般說來h為擴(kuò)展名的文件與cpp為擴(kuò)展名的文件是一一對(duì)應(yīng)配合使用的,在h為擴(kuò)展名的文件中包含的主要是類的定義,而在cpp為擴(kuò)展名的文件中包含的主要是類成員函數(shù)的實(shí)現(xiàn)代碼。在應(yīng)用程序中經(jīng)常要使用一些位圖、菜單之類的資源,VC中以rc為擴(kuò)展名的文件稱為資源文件,其中包含了應(yīng)用程序中用到
20、的所有的windows資源,要指出的一點(diǎn)是rc文件可以直接在VC集成環(huán)境中以可視化的方法進(jìn)行編輯和修改。最后要介紹的是以rc2為擴(kuò)展名的文件,它也是資源文件,但這個(gè)文件中的資源不能在VC的集成環(huán)境下直接進(jìn)行編輯和修改,而是由我們自己根據(jù)需要手工地編輯這個(gè)文件。對(duì)于以ico,bmp等為擴(kuò)展名的文件是具體的資源,產(chǎn)生這種資源的途徑很多。使用rc資源文件的目的就是為了對(duì)程序中用到的大量的資源進(jìn)行統(tǒng)一的管理。VC集成開發(fā)環(huán)境中集成了編輯器、編譯器、連接器以及調(diào)試程序,覆蓋了的開發(fā)應(yīng)用程序的整個(gè)過程。VC不僅有編輯、編譯、鏈接、運(yùn)行、調(diào)試為一體的集成環(huán)境,還包括了Spy+消息監(jiān)測(cè)工具,ActiveX C
21、ontrol Test Container控件測(cè)試工具等。程序員無需脫離這個(gè)開發(fā)環(huán)境就可以開發(fā)出完整的應(yīng)用程序。2. VC+主界面介紹VC+主界面是一個(gè)由窗口、工具條、菜單、工具及其他部分組成的一個(gè)集成界面,如圖2-1所示。工作區(qū)窗口工具條主菜單文檔窗口輸出窗口 圖2-1 VC+主界面圖通過這個(gè)界面,用戶可以在VC環(huán)境中創(chuàng)建、測(cè)試、調(diào)試和運(yùn)行應(yīng)用程序,界面的主要部分介紹如下。(1)工具條和菜單,用于提供用戶操作的命令接口。菜單以文字和層次化的方式提供命令接口。圖2-1中顯示的主菜單欄,每一個(gè)主菜單下面有相關(guān)的二級(jí)菜單,可以選擇二級(jí)菜單執(zhí)行相應(yīng)的功能,或是根據(jù)二級(jí)菜單后顯示的快捷鍵,在操作中直接
22、使用工具條上的快捷按鈕完成同樣的功能。工具條由一系列按鈕組成,使用工具條上的按鈕與選擇某一個(gè)二級(jí)菜單項(xiàng)執(zhí)行同樣的操作,但更加方便,默認(rèn)情況下Standard工具欄自動(dòng)打開,上面有文件操作、編輯操作等常用的15個(gè)按鈕。(2)工作區(qū)窗口,這個(gè)窗口包含關(guān)于正在開發(fā)的這個(gè)項(xiàng)目的有關(guān)信息。VC+6以項(xiàng)目管理程序,每一個(gè)程序都應(yīng)該屬于一個(gè)項(xiàng)目,如果一個(gè)程序由多個(gè)文件組成,則這些文件都在同一個(gè)項(xiàng)目中,因此項(xiàng)目名與文件名可以不相同。當(dāng)打開一個(gè)項(xiàng)目以后,工作區(qū)窗口將會(huì)顯示關(guān)于當(dāng)前項(xiàng)目的文件、類、和資源的信息。圖2-1所示的項(xiàng)目名為ttt,包含1個(gè)名為例2-2.c的源文件,放在Source Files文件夾下,0
23、個(gè)頭文件(即Head Files文件夾下為空),0個(gè)資源文件(即Resource Files文件夾下為空)。(3)文檔窗口區(qū),這是編輯器所提供的編輯窗口。這個(gè)區(qū)域可以編輯、顯示各種類型的文檔,如源代碼文件、頭文件、資源文件等??梢酝瑫r(shí)打開多個(gè)文檔,在圖2-1的文檔容器中打開了1個(gè)文件例2-2.c。實(shí)際上,在VC的文檔容器中允許同時(shí)打開很多文件,用戶可以選擇其中一個(gè)作為當(dāng)前編輯文件。(4)輸出窗口,輸出窗口用來顯示幾種信息,可以通過選擇不同的標(biāo)簽顯示不同的信息。這些信息有編譯連接結(jié)果信息(Build標(biāo)簽)、調(diào)試信息(Debug標(biāo)簽)和查找結(jié)果信息(Find in Files標(biāo)簽)。其中,查找結(jié)果
24、信息有兩個(gè)標(biāo)簽,可以顯示兩次在文件中查找指定內(nèi)容的結(jié)果。圖2-1所示的輸出窗口中顯示的是項(xiàng)目ttt經(jīng)編譯和鏈接后生成了ttt.exe文件,沒有錯(cuò)誤和告警。2.2 基礎(chǔ)知識(shí)和理論1. 嵌入式Linux系統(tǒng) 嵌入式 Linux 操作系統(tǒng)的特點(diǎn)及優(yōu)勢(shì)。 Linux 操作系統(tǒng)的最大優(yōu)勢(shì)就是其免費(fèi)和源碼開放性,同時(shí)其穩(wěn)定性和可靠性也為大家所推崇。Linux 操作系統(tǒng)因?yàn)槠溟_放性而得到相當(dāng)大部分公司的支持,用戶可以根據(jù)自己需要進(jìn)行修改,還可以借助眾多的網(wǎng)上資源和在線開發(fā)者,方便的獲得所需技術(shù)支持。很多開發(fā)商本身并不希望在操作系統(tǒng)方案上受制于人而增加產(chǎn)品開發(fā)成本,因此源代碼開放的 Linux 是最好的切入點(diǎn)
25、。Linux 具有最大的自由開發(fā)群。此外,由于其開放性使工程師可以對(duì)系統(tǒng)有更深入的了解,并能針對(duì)特定硬件方案和產(chǎn)品需求進(jìn)行優(yōu)化。目前在業(yè)界已經(jīng)達(dá)成共識(shí):即嵌入式 Linux 是大勢(shì)所趨,其巨大的市場(chǎng)潛力與醞釀的無限商機(jī)必然會(huì)吸引眾多的廠商進(jìn)入這一領(lǐng)域3。 Linux 是一個(gè)類似于 Unix 的操作系統(tǒng)。起源于芬蘭的一個(gè)名為 Linux Torvalds 的業(yè)余愛好者,但是現(xiàn)在己經(jīng)是最為流行的一款開放源碼的操作系統(tǒng)。Linux 從 1991 年問世到現(xiàn)在,在短短的十多年的時(shí)間已發(fā)展成為一個(gè)功能強(qiáng)大、設(shè)計(jì)完善的操作系統(tǒng),伴隨網(wǎng)絡(luò)技術(shù)進(jìn)步而發(fā)展起來的 Linux 系統(tǒng)己成為 Microsoft 公司
26、 Windows 系列產(chǎn)品的強(qiáng)勁對(duì)手。 Linux 系統(tǒng)不僅能夠運(yùn)行于 PC 平臺(tái),還在嵌入式系統(tǒng)中大放光芒。由于Linux 其自身的特點(diǎn),在嵌入式系統(tǒng)領(lǐng)域可以說取得了飛速的發(fā)展,該操作系統(tǒng)有以下優(yōu)勢(shì):(1)Linux 是開放源碼的,不存在黑箱技術(shù),遍布全球的眾多 Linux 愛好者都是 Linux開發(fā)者的強(qiáng)大技術(shù)支持者,而其他嵌入式操作系統(tǒng)如 Windows CE, VxWorks 是非開放性的OS,使第三方很難實(shí)現(xiàn)產(chǎn)品的定制。(2)Linux 的源代碼隨處可得,注釋豐富,文檔齊全,易于解決各種問題。(3)Linux 的內(nèi)核小、效率高,而 WindowsCE 在這方面是笨拙的,占用過多的 R
27、AM,應(yīng)用程序龐大。(4)Linux 內(nèi)核結(jié)構(gòu)在網(wǎng)絡(luò)方面是非常完整的,它提供了對(duì)包括十兆位、百兆位及千兆位的以太網(wǎng)絡(luò),還有無線網(wǎng)絡(luò)、Token Ring(令牌環(huán))和光纖甚至衛(wèi)星的支持。(5)Linux 是開放源代碼的操作系統(tǒng),在價(jià)格上極具競(jìng)爭(zhēng)力,適合中國(guó)國(guó)情。(6)Linux 在內(nèi)核結(jié)構(gòu)的設(shè)計(jì)中考慮適應(yīng)系統(tǒng)的可裁減性的要求,使使用者可以按照自身的使用要求對(duì)內(nèi)核進(jìn)行裁減。(7)Linux 的可靠性高,可以說是經(jīng)過驗(yàn)證,可以用在關(guān)鍵任務(wù)和場(chǎng)合的多應(yīng)用的操作系統(tǒng)。比如說全世界的 Web 服務(wù)器,絕大多數(shù)都是 Linux 操作系統(tǒng)。我們每天通過 Web 瀏覽的時(shí)候,都是 24 小時(shí)運(yùn)轉(zhuǎn)的,足以證明 L
28、inux 的可靠性。 Linux 內(nèi)核對(duì)網(wǎng)絡(luò)協(xié)議棧的設(shè)計(jì)是從簡(jiǎn)潔實(shí)用的角度出發(fā),實(shí)現(xiàn)了一個(gè)較完整的網(wǎng)絡(luò)協(xié)議集。在高層的網(wǎng)絡(luò)協(xié)議中,Linux 支持 telnet 和 riogin 協(xié)議,Linux 還能提供對(duì)網(wǎng)絡(luò)上其他機(jī)器內(nèi)文件的訪問(NFS,網(wǎng)絡(luò)文件系統(tǒng))。Linux 還可以支持 SLIP(Serial Line Interface Protocol)和 PLIP(Parallel Line Interface Protocol)協(xié)議,使得通過串口和并口線進(jìn)行連接成為可能。另外 Linux 還支持 AX.25 協(xié)議、IPX 協(xié)議、AppleTalk、Samba等網(wǎng)絡(luò)協(xié)議。除此之外,Linux
29、 對(duì)網(wǎng)絡(luò)中最常用的 TCP/IP 協(xié)議提供了最完備的支持。Linux內(nèi)核結(jié)構(gòu)在網(wǎng)絡(luò)方面是非常完整的,它提供了對(duì)包括十兆位、百兆位及千兆位的以太網(wǎng)絡(luò),還有無線網(wǎng)絡(luò)、Token Ring(令牌環(huán))和光纖甚至衛(wèi)星的支持4。2.TCP/IP協(xié)議 TCP/IP是Transmission Control Protocol/Internet Protocol(傳輸控制協(xié)議/網(wǎng)際互聯(lián)協(xié)議)的縮寫。它是1978年1979年由美國(guó)國(guó)防部高級(jí)研究計(jì)劃局開發(fā)的用于異構(gòu)網(wǎng)絡(luò)的通信協(xié)議,協(xié)議包含了遠(yuǎn)程登錄(Telnet)、文件傳送(F11P)、電子郵件(SMTP)等,適用于各種不同的計(jì)算機(jī)系統(tǒng)的互聯(lián)。TCP/IP是目前十
30、分流行的一種網(wǎng)絡(luò)協(xié)議,它可提供任意互連的網(wǎng)絡(luò)間的通信,幾乎所用的網(wǎng)絡(luò)操作系統(tǒng)都支持TCP/IP協(xié)議。它是目前廣泛使用的Internet的基礎(chǔ),雖然它不是國(guó)際標(biāo)準(zhǔn),但事實(shí)上已成為計(jì)算機(jī)網(wǎng)絡(luò)的工業(yè)標(biāo)準(zhǔn)。 TCP/IP通訊協(xié)議采用了4層的層級(jí)結(jié)構(gòu)。每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為: 應(yīng)用層:應(yīng)用程序間溝通的層,如簡(jiǎn)單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等。 運(yùn)輸層:在此層中,它提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送服務(wù),如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)等,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又校@一層負(fù)責(zé)
31、傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達(dá)并接收。 網(wǎng)際層:負(fù)責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達(dá)目的主機(jī)(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。 網(wǎng)絡(luò)接口層:對(duì)實(shí)際的網(wǎng)絡(luò)媒體的管理,定義如何使用實(shí)際網(wǎng)絡(luò)(如Ethemet、Serial Line等)來傳送數(shù)據(jù)。 嵌入式Linux操作系統(tǒng)包括了TCP/IP網(wǎng)絡(luò)協(xié)議棧,這樣在整個(gè)網(wǎng)絡(luò)環(huán)境中將嵌入式系統(tǒng)平臺(tái)作為服務(wù)器端,網(wǎng)絡(luò)中的其它主機(jī)作為客戶機(jī)。應(yīng)用層編程調(diào)用Linux套接字接ISl(SOCKET)實(shí)現(xiàn)TCP/IP通信。3. RTP 協(xié)議 視頻信息的網(wǎng)絡(luò)傳輸與文本數(shù)據(jù)等非實(shí)時(shí)信息的傳輸不同,它對(duì)實(shí)時(shí)性遠(yuǎn)高于可靠性,當(dāng)網(wǎng)絡(luò)擁塞時(shí),對(duì)于
32、非實(shí)時(shí)傳輸而言,只是延長(zhǎng)了傳輸時(shí)間,而對(duì)于視頻傳輸,數(shù)據(jù)不能按時(shí)到達(dá)將導(dǎo)致難以忍受的視頻服務(wù)質(zhì)量。由于TCP是可靠的、面向連接的傳輸控制協(xié)議,需要較多的開銷,不適合傳輸實(shí)時(shí)數(shù)據(jù),為此IETF(Internet Engineering Task Force)的工作組制訂了針對(duì)多媒體數(shù)據(jù)流的RTP(Real-time Transport Protocol,實(shí)時(shí)傳輸協(xié)議),它提供實(shí)時(shí)媒體數(shù)據(jù)端到端的傳輸服務(wù)。 RTP由RTP數(shù)據(jù)協(xié)議和RTCP(RTP Control Protocol,RTP控制協(xié)議)組成,RTP數(shù)據(jù)協(xié)議38負(fù)責(zé)實(shí)時(shí)媒體數(shù)據(jù)傳輸,它被定義在一對(duì)一或一對(duì)多的傳輸情況工作,提供時(shí)間信息和
33、實(shí)現(xiàn)流同步。RTCP負(fù)責(zé)控制實(shí)時(shí)媒體數(shù)據(jù)傳輸,提供可靠的傳送機(jī)制、流量控制和擁塞控制。應(yīng)用程序開始一個(gè)RTP會(huì)話將使用兩個(gè)端口,一個(gè)給RTP,一個(gè)給RTCP,會(huì)話期間,各參與者周期性地傳送RTCP包,RTCP包中含有已發(fā)送數(shù)據(jù)包的數(shù)量、丟失數(shù)據(jù)包的數(shù)量等統(tǒng)計(jì)資料,服務(wù)器將利用這些信息動(dòng)態(tài)地改變傳輸速率,甚至改變有效載荷類型,所以,RTP和RTCP的配合使用能以有效的反饋和最小的開銷使傳輸效率最佳化,可以較好的解決目前流媒體實(shí)時(shí)傳輸問題5。 RTP通常使用UDP進(jìn)行多媒體數(shù)據(jù)的傳輸,但如果需要的話可以使用TCP或ATM等其它協(xié)議。 由于RTP和RTCP處于應(yīng)用層,IETF(互聯(lián)網(wǎng)工程任務(wù)組, T
34、he Internet Engineering Task Force)并沒有為其提供一個(gè)統(tǒng)一的模塊,而只是提供了一個(gè)協(xié)議框架,此框架覆蓋了目前網(wǎng)絡(luò)流媒體應(yīng)用的絕大多數(shù)內(nèi)容。此RTP和RTCP協(xié)議框架的代碼實(shí)現(xiàn)必須建立在UDP/TCP層之上,把實(shí)時(shí)多媒體數(shù)據(jù)轉(zhuǎn)化為RTP包,并產(chǎn)生RTCP包,同時(shí)具有收發(fā)RTP/RTCP包的功能, 并為上層的應(yīng)用程序提供接口。 上層的應(yīng)用程序主要是Linux下的Socket API,通常以RTP/UDP/IP的形式發(fā)送數(shù)據(jù)。實(shí)時(shí)傳輸協(xié)議RTP(Real-time Transport Protocol)是用于互聯(lián)網(wǎng)上針對(duì)多媒體數(shù)據(jù)流的一種傳輸協(xié)議,它主要為實(shí)時(shí)數(shù)據(jù)的
35、應(yīng)用提供點(diǎn)到點(diǎn)或點(diǎn)到多點(diǎn)的通信傳輸服務(wù)。RTP通常使用UDP來傳送數(shù)據(jù),RTP是在UDP封裝之前多加了12字節(jié)的報(bào)文頭。RTP協(xié)議主要包括兩個(gè)部分:一部分定義RTP的數(shù)據(jù)報(bào)文格式(見圖6.1) 和使用規(guī)則,主要是傳送具有實(shí)時(shí)屬性的數(shù)據(jù); 另一部分為RTP控制協(xié)議(RTCP), 采用與數(shù)據(jù)包相同的分發(fā)機(jī)制,將控制包周期性地傳輸?shù)剿袝?huì)話參與者中,提供數(shù)據(jù)分發(fā)質(zhì)量反饋信息,以制定流量控制策略6。 RTP的這些特點(diǎn)使它具有較好的實(shí)時(shí)性,在視頻傳輸方面得到了廣泛的應(yīng)用。RTP通常使用UDP進(jìn)行多媒體數(shù)據(jù)的傳輸,但如果需要的話可以使用TCP或ATM等其它協(xié)議4.MPEG-4 簡(jiǎn)介 MPEG-4是一種壓縮
36、標(biāo)準(zhǔn),國(guó)際標(biāo)準(zhǔn)化組織于1986年成立運(yùn)動(dòng)圖像專家組MPEG(Motion Picture Experts Group),在1993年8月正式制定了MPEG-1,在1994年又發(fā)布了MPEG-2標(biāo)準(zhǔn),1999年2月正式公布了為國(guó)際標(biāo)準(zhǔn)的MPEG-4(ISO/IEC14496)第一版本。同年年底,MPEG-4第二版亦告底定。MPEG-4使多媒體內(nèi)容更多元化、更具有彈性,且多媒體組件更容易被再利用。它能將現(xiàn)今各自發(fā)展的技術(shù)及應(yīng)用,如互聯(lián)網(wǎng)、動(dòng)畫、視頻、音頻、交互電視等,整合至單一架構(gòu)之下,進(jìn)而提供更佳的資源管理方法和保護(hù)著作權(quán)的機(jī)能。因此,應(yīng)用前景十分廣闊。 MPEG-4標(biāo)準(zhǔn)采用了基于對(duì)象的視頻壓縮
37、編碼方法,它不僅可以實(shí)現(xiàn)對(duì)視頻圖像數(shù)據(jù)的高效壓縮,還可以提供基于內(nèi)容的交互功能,支持對(duì)多媒體信息的內(nèi)容訪問,提供靈活的時(shí)域和空域擴(kuò)展。除此之外,為了使壓縮碼流具有抗信道誤碼的特性,方便應(yīng)用于帶寬受限、誤碼易發(fā)的無線網(wǎng)絡(luò)和Internet,MPEG-4還提供用于誤碼檢測(cè)和誤碼恢復(fù)的一系列工具。 數(shù)字化視頻采集與處理系統(tǒng)是嵌入式系統(tǒng)的典型應(yīng)用,涉及嵌入式系統(tǒng)技術(shù)和視頻圖像信息的編碼技術(shù)。特別是在視頻圖像信息的編碼技術(shù)方面,為了提高系統(tǒng)的視頻圖像質(zhì)量與通用性,國(guó)際通信聯(lián)盟(ITU)為視頻圖像信息的壓縮編碼制定了很多標(biāo)準(zhǔn),新的編碼技術(shù)被迅速應(yīng)用到圖像與視頻壓縮上8。 JPEG是目前最常用的圖像壓縮格式
38、之一,廣泛應(yīng)用于圖像信息的傳遞與存儲(chǔ)領(lǐng)域,H.263和H.264是目前常用的視頻壓縮標(biāo)準(zhǔn),可以在窄帶信道上傳遞流暢的視頻影像。應(yīng)用JPEG格式可以進(jìn)行圖像壓縮,如果想要進(jìn)一步提高系統(tǒng)性能,可以考慮使用H.263來進(jìn)行視頻壓縮。2.3上位機(jī)軟件設(shè)計(jì)上位機(jī)程序流程圖如下圖所示: 圖2-3 上位機(jī)程序流程圖上位機(jī)的主要功能是向遠(yuǎn)程服務(wù)器發(fā)送連接請(qǐng)求,建立通信之后,實(shí)時(shí)接收視頻數(shù)據(jù)并進(jìn)行存儲(chǔ)、播放。相關(guān)輔助功能有狀態(tài)顯示、時(shí)間顯示、視頻存檔路徑顯示及設(shè)置、視頻存檔所在存儲(chǔ)空間監(jiān)控、壓縮比遠(yuǎn)程設(shè)置、服務(wù)器IP地址顯示及設(shè)置、退出及遠(yuǎn)程服務(wù)器連接。以下介紹主功能和部分輔助功能的具體實(shí)現(xiàn)。上位機(jī)的結(jié)構(gòu)和服務(wù)
39、器端相似,設(shè)計(jì)了一個(gè)類CTCPSock對(duì)網(wǎng)絡(luò)套接字的相關(guān)操作進(jìn)行了封裝,其提供的主要接口方法如下: bool Init(CHClientDlg*pDlg,DWORD inRemoteIP, int inRemotePort, HWND inwnd=NULL); bool Reconnect(void);Void Disconnect(void); Void SetCountWnd(HWNDinwnd); int Sendlnfo(unsigned int nMsgType);其中Init()接口方法主要進(jìn)行網(wǎng)絡(luò)套接字的相關(guān)初始化,主要工作有:將接口方法中所傳遞過來的相關(guān)參數(shù)賦值給對(duì)應(yīng)成員;通信
40、協(xié)議的版本協(xié)商;創(chuàng)建客戶端TCP套接字;創(chuàng)建退出和數(shù)據(jù)接收事件;遠(yuǎn)程套接字地址填充;連接遠(yuǎn)程服務(wù)器等。一旦與遠(yuǎn)程端服務(wù)器連接成功,Init()函數(shù)接下來會(huì)將套接字置為阻塞狀態(tài),并開啟接收線程(該線程負(fù)責(zé)接收服務(wù)器端反饋的命令以及視頻數(shù)據(jù))。接收線程開啟后,創(chuàng)建一個(gè)死循環(huán)。在循環(huán)內(nèi)部,每次接收數(shù)據(jù)之前,先判斷退出事件和數(shù)據(jù)接收事件,若退出事件有效則退出該循環(huán),只有當(dāng)退出事件無效并且數(shù)據(jù)接收事件有效時(shí),該線程才不斷接收來自服務(wù)器端的數(shù)據(jù)信息,并解析該信息。當(dāng)解析到已接收完一幀數(shù)據(jù)(信息類型為DATA_AFRAME),則給主窗口發(fā)送一條數(shù)據(jù)準(zhǔn)備好消息。接著由主程序?qū)κ盏降膲嚎s視頻數(shù)據(jù)進(jìn)行存儲(chǔ)、解壓縮
41、、顯示等操作。解析結(jié)果為其他類型時(shí)程序會(huì)做出相應(yīng)的處理13。Reconnect(void)接口方法為客戶端暫停接收數(shù)據(jù)后,繼續(xù)接收數(shù)據(jù)時(shí)所調(diào)用的接口方法。SetCountWnd(HWND inWnd)接口方法為數(shù)據(jù)幀計(jì)數(shù)傳遞一個(gè)窗口句柄,本系統(tǒng)中每接收到一幀數(shù)據(jù),則會(huì)更新狀態(tài)欄窗口中的幀的總數(shù)目。由于客戶端向服務(wù)器端所發(fā)送的數(shù)據(jù)僅僅是通信消息,如:數(shù)據(jù)請(qǐng)求,斷開請(qǐng)求,重連請(qǐng)求等。而不涉及其他諸如視頻數(shù)據(jù)的發(fā)送,介于發(fā)送的數(shù)據(jù)包類型比較單一,設(shè)計(jì)了SendInfo(unsigned int nMsgType)接口方法來負(fù)責(zé)通信消息的發(fā)送。該類的使用流程見圖2-3-1。圖2-4 CTCPSock類
42、的使用流程圖2.4上位機(jī)程序設(shè)計(jì)上位機(jī)服務(wù)器應(yīng)用程序主要是完成圖像數(shù)據(jù)的接收、顯示和存儲(chǔ)功能,同時(shí)也給終端發(fā)送簡(jiǎn)單的控制命令。這里不對(duì)其實(shí)現(xiàn)的具體過程進(jìn)行詳細(xì)的介紹, 主要進(jìn)行兩部分的說明:上位機(jī)完成網(wǎng)絡(luò)連接和數(shù)據(jù)接收的部分,以及JPEG圖像的解碼和顯示。上位機(jī)服務(wù)器網(wǎng)絡(luò)連接和數(shù)據(jù)接收的實(shí)現(xiàn)服務(wù)器程序必須設(shè)置好sinport屬性,作為偵聽端口,該值為一個(gè)整數(shù)(只要是一個(gè)其它TCP/IP應(yīng)用程序沒有使用過的值即可)。使用“Listen方法進(jìn)入偵聽狀態(tài),等待客戶機(jī)程序的連接請(qǐng)求??蛻魴C(jī)程序發(fā)出連接請(qǐng)求,使服務(wù)器程序產(chǎn)生Connection Request事件,該事件得到一個(gè)參數(shù)requestID。
43、服務(wù)器程序用Accept方法接受客戶機(jī)程序的requestID請(qǐng)求(Accept方法必須用上一步得到的requestID作為其參數(shù))。這樣,服務(wù)器程序就可以用SendData方法發(fā)送數(shù)據(jù)了。當(dāng)服務(wù)器程序接收到數(shù)據(jù)時(shí),產(chǎn)生OnRecvData事件,通過消息把包含接收到的數(shù)據(jù)的地址傳進(jìn)來。在該事件中,處理接受數(shù)據(jù)的保存和顯示等。如果接受到Close事件,則用Close方法關(guān)閉TCP/IP連接。Socket還有兩個(gè)重要的屬性,即所用協(xié)議族(選用TPC/IP協(xié)議)和協(xié)議狀態(tài)(設(shè)定使用的協(xié)議是TCP還是UDP),對(duì)應(yīng)的設(shè)置在Socket類的建立是給以初始化。2.4.1 視頻數(shù)據(jù)接收端的實(shí)現(xiàn)視頻數(shù)據(jù)接收端
44、的主要功能是接受來自于TCP 端口的RTP 數(shù)據(jù)包,并將其還原成視頻數(shù)據(jù)流。1. 數(shù)據(jù)包的接收數(shù)據(jù)包的接收過程比較簡(jiǎn)單,主要由一系列SOCKET編程接口的調(diào)用所組成,主要有以下幾個(gè)過程:(1) 通過socket()調(diào)用創(chuàng)建TCP套接口。(2) 在指定的端口等待RTP數(shù)據(jù)包的到來。(3) 通過recvfrom()接受RTP數(shù)據(jù)包。(4) 將接收到的數(shù)據(jù)包放入緩沖區(qū)。2. 視頻數(shù)據(jù)的重組因?yàn)檫M(jìn)行數(shù)據(jù)的傳輸有可能會(huì)出現(xiàn)數(shù)據(jù)包的丟失與亂序。數(shù)據(jù)重組的主要目的就是在出現(xiàn)丟失和亂序時(shí)可以盡最大可能將接收到的數(shù)據(jù)恢復(fù)到它原來的狀態(tài)。為了方便對(duì)數(shù)據(jù)進(jìn)行重組,在數(shù)據(jù)包接收緩沖區(qū)之外又設(shè)立了一個(gè)數(shù)據(jù)重組緩沖區(qū),數(shù)
45、據(jù)包的重組過程就在這個(gè)緩沖區(qū)中進(jìn)行。 在考慮具體的重組方法前,先介紹一下MPEG-4的解碼過程。因?yàn)镸PEG-4 數(shù)據(jù)的解碼是以VOP為單位進(jìn)行的,多個(gè)VOP 的解碼結(jié)果才構(gòu)成一幀完整的圖像,簡(jiǎn)單的說就是以流的形式進(jìn)行的,而不是視頻幀的方式。針對(duì)解碼方式的這種特點(diǎn)采用比較特殊的數(shù)據(jù)重組方式。重組程序以5個(gè)VOP 為一個(gè)單位從RTP 數(shù)據(jù)包還原數(shù)據(jù)。為了盡可能降低抖動(dòng)與延遲造成的數(shù)據(jù)包遲到帶來的不利影響,在解碼器緩沖區(qū)中只剩2個(gè)單位的VOP時(shí)才開始進(jìn)行數(shù)據(jù)的重組過程。重組的基本方法是這樣的:(1) 首先按照序號(hào)從小到大的順序?qū)⒔邮站彌_區(qū)中的數(shù)據(jù)包插入數(shù)據(jù)重組緩沖區(qū)。(2) 然后按照序號(hào)從小到大的
46、順序分析數(shù)據(jù)包,將載荷按照先后順序拷貝到臨時(shí)緩沖區(qū)中,直到緩沖區(qū)中有了5個(gè)完整的 VOP 為止。在拷貝過程中如果發(fā)現(xiàn)了數(shù)據(jù)包丟失,比如序號(hào)或時(shí)間戳不連續(xù),分兩種情況處理:第一種情況,缺失的數(shù)據(jù)包是單獨(dú)的一個(gè) VOP。這種情況比較好處理,單個(gè) VOP 的丟失不會(huì)對(duì)其他 VOP 的解碼產(chǎn)生影響,只會(huì)造成最終視頻幀細(xì)節(jié)上的缺失,可以將該數(shù)據(jù)包忽略,直接處理下一個(gè)數(shù)據(jù)包。第二種情況,缺失的數(shù)據(jù)包是某個(gè) VOP 的切分。對(duì)于這種情況不能簡(jiǎn)單的將其忽略,要向該數(shù)據(jù)包所占的位置填充足夠數(shù)量的0來保持原有的VOP 結(jié)構(gòu),以便于 MPEG-4 解碼器對(duì)該 VOP 解碼時(shí)進(jìn)行差錯(cuò)處理。采用這樣的一種重組方法,當(dāng)
47、RTP 數(shù)據(jù)在傳輸中發(fā)生亂序時(shí),可以在一定范圍內(nèi)恢復(fù) RTP 數(shù)據(jù)包的原有順序,降低數(shù)據(jù)包丟失與亂序?qū)獯a器的影響。以下是服務(wù)器端偵聽連接和數(shù)據(jù)接收程序的部分源代碼如下: /初始化Socket連接BOOL CTransDlg:InitSocket() m_sockct=sockct(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(m_
48、socket,(sockaddr*)&addrSrv,sizeof(SOCKADDR); listen(m_socket,5); return TRUE; /接受數(shù)據(jù)事件,有Socket類在接收數(shù)據(jù)后自動(dòng)觸發(fā)的事件void CTransDlg:OnRecvData(WPARAM wParam,LPARAM IParam) CString str=(char*)lParam; CString strTemp; GetDlgltemText(IDC_EDIT_RECV,strTemp); str+=rn; str+=strTemp; SetDlgItemText(IDC_EDIT_RECV,str
49、); /啟動(dòng)RecvProc線程處理接收到的數(shù)據(jù)void CTransDlg:OnCon() TODO:Add your control notification handler code hem DWORD dwIP; (CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSl)-GetAddress(dwIP); SRVPARAM*pSrvParam=new SRVPARAM; pSrvParam-sock=m_socket; pSrvParam-hwnd=m_hWnd; HANDLEhThread=CreateThread(NULL,0,RecvProc,(LP
50、VOID)pSrvParam,0,NULL); m_hThread=hThread; CloseHandle(hThread); 2.4.2 壓縮圖像解碼顯示Visual C+的CBitmap類和靜態(tài)圖片控件的功能是比較弱的,它只能顯示出在資源總的圖標(biāo)、位圖、光標(biāo)以及圖元文件的內(nèi)容,而不像VB中的Image控件可以顯示出絕大多數(shù)的外部圖像文件(BMP,GIF,JPEG等)。因此,要想在對(duì)話框或者其它窗口中顯示外部圖像文件則只能借助于第三方提供的控件或者代碼。因此,本文結(jié)合VC+提供的IPicture實(shí)現(xiàn)JPEG、GIF圖像的顯示,為服務(wù)器端顯示JPEG圖像提供基礎(chǔ)。IPicture接口是Win
51、dow95及以上操作系統(tǒng)支持的一個(gè)COM接口,它用來操作各種在WINDOWS常見的圖像格式。如,BMP、 JPEG、GIF等許多文件格式都能識(shí)別,使用很方便。IPicture接口管理圖像對(duì)象及其屬性,它是Active技術(shù)提供的管理圖像的一個(gè)最主要的接口。圖像對(duì)象為位圖、圖標(biāo)和圖元提供了一個(gè)語言無關(guān)的抽象,與標(biāo)準(zhǔn)的字體對(duì)象一樣,系統(tǒng)提供了對(duì)圖像對(duì)象的標(biāo)準(zhǔn)實(shí)現(xiàn)。IPicture主要的接口是IPicture和IPictureDisp,后者派生自Dispatch,它提供了訪問圖像屬性的方法。圖像對(duì)象也支持外部接口IPropertyNotifySink,以便用戶能在圖像屬性發(fā)生改變時(shí)做出決定。圖像對(duì)象也
52、支持IPersistStream接口,所以它能從一個(gè)IStream接口的實(shí)例對(duì)象保存、裝載自己,而IStream接口支持對(duì)流對(duì)象的數(shù)據(jù)讀寫。程序員要做的只是向IPicture中裝載圖片數(shù)據(jù),然后調(diào)用其Render函數(shù)進(jìn)行顯示,函數(shù)OleLoadPicture是從包含有圖像數(shù)據(jù)的流中裝載圖像。該函數(shù)簡(jiǎn)化了基于流的圖像對(duì)象的創(chuàng)建過程,可以創(chuàng)建一個(gè)新的圖像對(duì)象并且用流中的內(nèi)容對(duì)它進(jìn)行初始化。以下是實(shí)現(xiàn)JPEG圖像顯示的原理代碼BOOL CShowDlg:ShowJpgGif(CDC*pDC,CString strPath) IStream*pStm; CFileStatus fstatus; CFi
53、le file; LONG cb; /打開文件并檢測(cè)文件的有效性if(file.Open(strPath,CFile:modeRead)& file.GetStatus(strPath,fstatus)& (cb=fstatus.m_size)!=-1) /分配全局存儲(chǔ)空間HGLOBAL hGlobal=GlobaiAlloc(GMEM_MOVEABLE,cb); LPVOID pvData=NULL; if(hGlobal !=NULL) pvData=GlobalLock(hGlobal); if (pvData != NULL) file.ReadHuge(pvData,cb); Glo
54、balUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal,TRUE,&pStm); else return false; /打開文件結(jié)束/顯示JPEG格式的圖片IPicture*pPic; /裝入圖形文件if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,ID_IPicture,(LPVOID*)&pPic) / OleLoadPicture從流中加載圖像并創(chuàng)建一個(gè)可用來顯示圖像的新pic對(duì)象 OLE_XSIZE_HIMETRIC hmWidth: /圖片的真實(shí)寬度OLE_YSIZE_HIMETRI
55、C hmHeight; /圖片的真實(shí)高度pPic-get_Width(&hmWidth); / 取得圖片寬度pPic-get_Height(&hmHeight);/ 取得圖片高度double fX,fY; fX =(double)pDC-GetDeviceCaps(HORZRES)*(double)hmWidth/ (double)pDC-GetDeviceCaps(HORZSIZE)*100.0); fY =(double)pDC-GetDeviceCaps(VERTRES)*(double)hmHeight/ (double)pDC-GetDeviceCaps(VERTSIZE)*100.
56、0); if(FAILED(pPic-Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0, hmHeight,hmWidth,-hmHeight,NULL) pPic-Release();/釋放picture return false;/返回false pPic-Release();/釋放picture else return false; return true;第3章 系統(tǒng)調(diào)試與運(yùn)行3.1 測(cè)試環(huán)境測(cè)試環(huán)境包括兩個(gè)部分,系統(tǒng)的硬件環(huán)境和系統(tǒng)的軟件環(huán)境。系統(tǒng)的硬件環(huán)境主要由 S3C2440開發(fā)板和普通的 PC 系統(tǒng)構(gòu)成,兩者通過網(wǎng)線連接。系統(tǒng)的軟件環(huán)境主要由 PC 上
57、運(yùn)行的操作系統(tǒng)和Linux 系統(tǒng)構(gòu)成。為了便于對(duì)S3C2440 開發(fā)板進(jìn)行調(diào)試,選擇 Linux 作為 PC 的操作系統(tǒng)。上位機(jī)和下位機(jī)雖通過網(wǎng)線連接在同一個(gè)局域網(wǎng)內(nèi),上位機(jī)通過WEB瀏覽器啟動(dòng)下位機(jī)開始視頻采集,下位機(jī)將采集來的圖像進(jìn)行處理然后傳輸?shù)竭h(yuǎn)程PC機(jī),PC機(jī)客戶端解碼播放獲得的監(jiān)控視頻。3.2 測(cè)試內(nèi)容3.2.1 VC程序測(cè)試1.VC+編輯器Developer Studio包含一個(gè)功能強(qiáng)大的編輯器,可以編輯將被編譯成Windows程序的VC+6源文件。這個(gè)編輯器有點(diǎn)像字處理器,但是沒有字處理器具備的復(fù)雜的排版、文本格式等功能,它注重的是如何幫助程序員快速高效地編制程序。它具有以下特點(diǎn)。自動(dòng)語法:用高亮度和不同顏色的字來顯示不同的語法成分。自動(dòng)縮進(jìn):幫助排列源代碼,使其可讀性更強(qiáng)。參數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加工課課件教學(xué)課件
- 幼師課件用電教學(xué)課件
- 2024年國(guó)際旅游開發(fā)與合作合同
- 2024年廣州市二手房交易合同(標(biāo)準(zhǔn)版)
- 2024年度智能制造設(shè)備采購合同
- 2024年度物業(yè)公司居民關(guān)系協(xié)調(diào)服務(wù)合同
- 2024年大數(shù)據(jù)中心合作運(yùn)營(yíng)合同
- 2024年工程質(zhì)量檢驗(yàn)與確認(rèn)合同
- 魚罐頭課件教學(xué)課件
- 2024年庫房租賃與健身器材存放合同
- 香菇種植示范基地項(xiàng)目可行性策劃實(shí)施方案
- 混凝土硫酸鹽侵蝕基本機(jī)理研究
- 《機(jī)械設(shè)計(jì)基礎(chǔ)A》機(jī)械電子 教學(xué)大綱
- 水工巖石分級(jí)及圍巖分類
- 基因擴(kuò)增實(shí)驗(yàn)室常用儀器使用課件
- 斜井敷設(shè)電纜措施
- 施工機(jī)械設(shè)備租賃實(shí)施方案
- 牙膏產(chǎn)品知識(shí)課件
- 液化氣站人員勞動(dòng)合同范本
- 第一章 教育政策學(xué)概述
- 常見土源性寄生蟲演示文稿
評(píng)論
0/150
提交評(píng)論