亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ARM-Linux遠(yuǎn)程視頻監(jiān)控系統(tǒng)的設(shè)計(jì)

        2014-03-06 05:40:12王宏志宇皓林
        關(guān)鍵詞:嵌入式系統(tǒng)

        王宏志,宇皓林

        (長春工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,長春 130012)

        嵌入式技術(shù)目前已成為集網(wǎng)絡(luò)通信、信號處理和圖像應(yīng)用等功能為一體的、拓展性能強(qiáng)的綜合性技術(shù).新興的嵌入式遠(yuǎn)程監(jiān)控系統(tǒng)就是基于嵌入式技術(shù),與網(wǎng)絡(luò)技術(shù)相結(jié)合產(chǎn)生的新一代監(jiān)控體系.

        本文設(shè)計(jì)一種以COALL2440開發(fā)板為基礎(chǔ)的遠(yuǎn)程視頻監(jiān)控系統(tǒng).該系統(tǒng)采用B/S(瀏覽器/服務(wù)器)結(jié)構(gòu),基于ARM9和Linux操作系統(tǒng);服務(wù)器圖像采集端采用USB接口的CMOS傳感器攝像頭,運(yùn)用MPEG-4壓縮編碼方式,利用boa和CGI設(shè)計(jì) Web服務(wù)器,通過以太網(wǎng)發(fā)送到遠(yuǎn)程客戶端,客戶端可使用PC機(jī)和智能手機(jī)接收監(jiān)控圖像,從而使客戶端實(shí)現(xiàn)遠(yuǎn)程監(jiān)控.

        1 硬件設(shè)計(jì)

        根據(jù)系統(tǒng)對硬件的要求,本文設(shè)計(jì)的嵌入式遠(yuǎn)程視頻監(jiān)控系統(tǒng)采用基于ARM920T核的S3C2440微處理器作為硬件平臺,主頻400MHz,COALL2440開發(fā)板配置一個(gè)64Mb NAND Flash(K9F1208)和64Mb SDRAM,一個(gè) 20 芯 Multi-ICE 標(biāo)準(zhǔn)JTAG 接口,一個(gè) DM9000AEP 10M/100M網(wǎng)口,一個(gè)連接視頻攝像頭的USB接口,一個(gè)可直接掛接硬盤的IDE接口.硬件結(jié)構(gòu)如圖1所示.

        圖1 硬件結(jié)構(gòu)Fig.1 Hardware structure

        2 軟件開發(fā)平臺

        系統(tǒng)使用Linux操作系統(tǒng),內(nèi)核版本為Linux 2.6.30,根文件系統(tǒng)為Cramfs文件系統(tǒng).嵌入式系統(tǒng)分4個(gè)層次:1)引導(dǎo)加載程序;2)Linux內(nèi)核;3)根文件系統(tǒng);4)用戶應(yīng)用程序.

        2.1 建立交叉編譯環(huán)境 制定所需的Linux系統(tǒng)前要先搭建交叉編譯環(huán)境.由于嵌入式系統(tǒng)本身的存儲空間有限,不宜直接在嵌入式系統(tǒng)上進(jìn)行開發(fā),因此需要建立交叉編譯環(huán)境.嵌入式Linux使用的交叉編譯是在宿主機(jī)上生成開發(fā)板上的可執(zhí)行代碼,包括編譯、編輯引導(dǎo)程序(bootloader)、Linux2.6內(nèi)核和Cramfs根文件系統(tǒng).本文系統(tǒng)使用arm-linux-gcc-3.4.1版本編譯器.

        Bootloader,即引導(dǎo)加載程序,通過一段小程序可將系統(tǒng)的軟硬件置于一個(gè)合適的運(yùn)行環(huán)境中.Bootloader一般分為兩個(gè)階段:1)運(yùn)行在Flash內(nèi),初始化CPU內(nèi)部,如寄存器和內(nèi)存等;2)運(yùn)行在RAM中,初始化網(wǎng)卡和串口等,但最初都放在Flash內(nèi).

        2.2 Linux系統(tǒng)的移植與配置 由于Linux系統(tǒng)默認(rèn)不支持ARM處理器,因此必須修改系統(tǒng)配置以實(shí)現(xiàn)對ARM的支持.進(jìn)入內(nèi)核目錄,修改Makefile文件時(shí)要設(shè)置PATH環(huán)境變量,該環(huán)境變量是交叉編譯工具編輯時(shí)增加的路徑,使ARM能找到建立的交叉編譯工具鏈[1].

        1)進(jìn)行Linux配置內(nèi)核make menuconfig.根據(jù)遠(yuǎn)程視頻監(jiān)控系統(tǒng)特定的需求,選擇在配置菜單中添加內(nèi)核的相關(guān)支持選項(xiàng).系統(tǒng)需要添加對處理器S3C2440的支持、Video4Linux支持、USB設(shè)備的支持、網(wǎng)絡(luò)的支持和對Cramfs文件系統(tǒng)的支持等.

        2)輸入make zImage編譯內(nèi)核,得到Linux內(nèi)核壓縮映像zImage.

        3)使用mkcramfs把根文件目錄制成COALL2440.cramfs映像文件.制作根文件系統(tǒng)會用到busybox,它集成了最常用的Linux命令和工具.

        4)安裝DM9000網(wǎng)卡和USB口的驅(qū)動(dòng)程序,即完成了系統(tǒng)的移植與配置.

        3 應(yīng)用模塊設(shè)計(jì)

        3.1 視頻數(shù)據(jù)采集模塊 Linux對視頻數(shù)據(jù)采集設(shè)備的支持通過Video4Linux(V4L)實(shí)現(xiàn).V4L是一種應(yīng)用程序編程接口(API),API分為兩層:下層為音頻視頻驅(qū)動(dòng)程序;上層為Linux內(nèi)核提供給用戶空間的API.對于USB接口攝像頭,驅(qū)動(dòng)程序中有一個(gè)struct file_operation結(jié)構(gòu),它描述了在設(shè)備上能進(jìn)行的各種操作.本文系統(tǒng)中包括基本的I/O操作接口函數(shù)open(),close(),read(),write()和對I/O通道控制接口函數(shù)ioctl()[2].

        編寫圖像采集應(yīng)用程序時(shí),先定義一個(gè)結(jié)構(gòu)用于保存圖像采集時(shí)的各種參數(shù)和信息,該結(jié)構(gòu)如下:

        圖2 視頻采集流程Fig.2 Flowchart of video capture

        要完成攝像頭對視頻圖像數(shù)據(jù)的采集,就要先獲得視頻采集設(shè)備信息和圖像信息,并進(jìn)行相應(yīng)的初始化,才能保證采集圖像順利進(jìn)行.若有需要可在采集過程中更改設(shè)備相關(guān)設(shè)置[3].視頻采集流程如圖2所示.

        3.2 視頻數(shù)據(jù)壓縮模塊 獲取視頻數(shù)據(jù)后,要先去掉冗余信息,減輕網(wǎng)絡(luò)負(fù)載,并在網(wǎng)絡(luò)傳輸前對其進(jìn)行壓縮.本文系統(tǒng)中,對攝像頭采集到的圖像數(shù)據(jù)采用開源軟件xvidocre進(jìn)行MPEG-4標(biāo)準(zhǔn)壓縮[4].

        3.3 網(wǎng)絡(luò)通信模塊 Linux具有強(qiáng)大的網(wǎng)絡(luò)功能,遠(yuǎn)程監(jiān)控的實(shí)質(zhì)是運(yùn)用網(wǎng)絡(luò)對采集到的數(shù)據(jù)進(jìn)行遠(yuǎn)程傳輸.根據(jù)不同指令的自身特點(diǎn)及對網(wǎng)絡(luò)的要求,分別采用不同的協(xié)議進(jìn)行管理,本文系統(tǒng)的網(wǎng)絡(luò)模塊,對控制指令和數(shù)據(jù)指令分別采用TCP/IP協(xié)議和RTP/RTCP協(xié)議進(jìn)行管理,使用不同的包封裝策略.

        3.3.1 RTP/RTCP協(xié)議 目前解決實(shí)時(shí)流媒體傳輸問題的最好方法是RTP(實(shí)時(shí)傳輸協(xié)議),JRTPLIB是一個(gè)用C++語言實(shí)現(xiàn)的RTP庫,用于幫助實(shí)現(xiàn)實(shí)時(shí)流媒體編程[5].

        RTP被劃分在傳輸層,建立在UDP上.與UDP協(xié)議一樣,為實(shí)現(xiàn)實(shí)時(shí)傳輸功能,RTP也有自己固定的封裝形式.RTP為端到端的實(shí)時(shí)傳輸提供時(shí)間信息和流同步,RTP本身并不能為按序傳輸數(shù)據(jù)包提供可靠的保證,服務(wù)質(zhì)量由RTCP(實(shí)時(shí)傳輸控制協(xié)議)提供.RTP協(xié)議將得到的MPEG-4視頻數(shù)據(jù)封裝成RTP數(shù)據(jù)包,并交給下層UDP協(xié)議進(jìn)行處理,MEPG-4數(shù)據(jù)包的封裝形成以IP/UDP/RTP協(xié)議為基礎(chǔ)的包封裝.RTP協(xié)議同時(shí)接收下層通過UDP傳遞的報(bào)文.RTCP協(xié)議負(fù)責(zé)完成服務(wù)質(zhì)量的監(jiān)測、反饋和控制報(bào)文的發(fā)送[6].當(dāng)RTP會話被一個(gè)應(yīng)用程序建立后,其即被指定一對傳輸?shù)刂?一般的傳輸?shù)刂酚梢粋€(gè)網(wǎng)絡(luò)地址和一個(gè)端口組成,但RTP會話需要多一個(gè)端口給RTCP包.RTP數(shù)據(jù)包發(fā)向是偶數(shù)端口,RTCP即發(fā)向偶數(shù)端口+1的奇數(shù)端口,兩個(gè)端口協(xié)同工作保障RTP包的正確發(fā)送.RTP主要流程如下:

        1)生成一個(gè)RTPSession類來實(shí)例此次RTP會話,并獲得接收端的IP地址和端口號.dip=inet_addr(argv[1]);dip=ntohl(dip);dport=atoi(argv[2]).

        2)創(chuàng)建此次RTP會話sess.Create(bport);參數(shù)為此次RTP會話所采用的端口號;獲取會話接收端的地址和端口sess.AddDestination(dip,dport).

        3)設(shè)置RTP會話默認(rèn)參數(shù),從而簡化數(shù)據(jù)發(fā)送.同一個(gè)RTP會話中,負(fù)載類型sess.SetDefaultPayloadType(), 標(biāo) 識 sess.SetDefaultMark(), 時(shí) 戳 增 量sess.SetDefaultTimeStampIncrement()都相同,在發(fā)送數(shù)據(jù)時(shí)只需指明發(fā)送的數(shù)據(jù)和其長度即可.

        4)發(fā)送流媒體數(shù)據(jù)sess.SendPacket(buf,strlen(buf)).

        5)RTP數(shù)據(jù)接收端調(diào)用sess.PollData()方法接收RTP,通過調(diào)用GotoFirstSourceWithData()和循環(huán)調(diào)用GotoNextSourceWithData()方法檢測那些攜帶RTP數(shù)據(jù)的數(shù)據(jù)包,并不斷調(diào)用sess.GetNextPacket()從指定的端口讀取RTP數(shù)據(jù)包,處理完數(shù)據(jù)后及時(shí)釋放數(shù)據(jù)包.

        3.3.2 TCP/IP協(xié)議 TCP(傳輸控制協(xié)議)是面向連接的,提供可靠的數(shù)據(jù)傳輸,因此適合傳輸控制指令.TCP套接口通信工作流程如圖3所示.創(chuàng)建套接口,綁定端口和IP地址,服務(wù)器端監(jiān)聽網(wǎng)絡(luò)中的客戶端.服務(wù)器阻塞,等待連接請求,直到客戶端程序發(fā)送連接請求.當(dāng)服務(wù)器端接收到一個(gè)連接請求時(shí),會創(chuàng)建一個(gè)新的進(jìn)程,以后的數(shù)據(jù)傳輸和讀取就通過這個(gè)新進(jìn)程處理,原來的進(jìn)程繼續(xù)監(jiān)聽網(wǎng)絡(luò).客戶端同樣建立一個(gè)套接口,并填充要連接的服務(wù)器端資料,連接遠(yuǎn)程計(jì)算機(jī)指定的端口,成功連接后,即可實(shí)現(xiàn)客戶端與服務(wù)器端的數(shù)據(jù)傳輸.完成通信,關(guān)閉連接[7].

        圖3 TCP套接口工作流程Fig.3 Flowchart of TCP socket

        3.4 Linux下的多線程技術(shù) 多線程是現(xiàn)代操作系統(tǒng)所支持的一種重要多任務(wù)機(jī)制.線程是內(nèi)核進(jìn)行調(diào)度的基本單元,每個(gè)用戶級的線程都一一映射到內(nèi)核,一個(gè)線程進(jìn)行系統(tǒng)調(diào)用被阻塞不會影響同一個(gè)進(jìn)程所創(chuàng)建的其他線程.實(shí)施遠(yuǎn)程監(jiān)控系統(tǒng)中需要用到的視頻采集模塊、視頻壓縮模塊和圖像傳輸模塊等通過多線程技術(shù)實(shí)現(xiàn)對多個(gè)程序的并發(fā)執(zhí)行,極大提高了系統(tǒng)的整體運(yùn)行效率,節(jié)省開銷和耗時(shí).

        Linux下使用多線程技術(shù)進(jìn)行程序設(shè)計(jì)主要是使用POSIX標(biāo)準(zhǔn)所規(guī)定的API接口實(shí)現(xiàn).多線程程序設(shè)計(jì)時(shí),經(jīng)常要用到數(shù)據(jù)共享區(qū),因此實(shí)現(xiàn)多線程程序設(shè)計(jì)的關(guān)鍵是多線程之間的同步.pthread_t,pthread_mutex_t和pthread_cond_t是常用的數(shù)據(jù)結(jié)構(gòu),分別定義線程的標(biāo)識符、互斥鎖和條件變量.條件變量的觸發(fā)特性和互斥鎖的二值性決定了兩者必須搭配使用,條件變量用于阻塞一個(gè)線程,互斥體用于確保一個(gè)線程對共享數(shù)據(jù)進(jìn)行獨(dú)占式訪問、獲取或修改.使用時(shí),先指定的互斥鎖將被線程釋放,然后線程將阻塞,等待條件變量被其他線程觸發(fā).函數(shù)返回前,線程重新獲取互斥鎖并繼續(xù)測試條件是否滿足[8].

        多線程技術(shù)使用的主要函數(shù)如下:1)pthread_create(),創(chuàng)建一個(gè)新的線程;2)pthread_cond_signal(),喚醒條件變量cond上阻塞的線程;3)pthread_cond_wait(),使線程阻塞在一個(gè)條件變量cond上;4)pthread_mutex_lock(),用于對mutex指向的互斥體進(jìn)行加鎖(阻塞).

        4 服務(wù)器與客戶機(jī)的設(shè)計(jì)

        4.1 嵌入式Web server 本文系統(tǒng)選用boa作為服務(wù)器,支持CGI,單線程Web server,因此boa不會fork出新的進(jìn)程用于處理用戶的并發(fā)連接請求,即boa是被進(jìn)行類似于獨(dú)占式訪問的,只有CGI腳本運(yùn)行時(shí)boa才會fork出新的進(jìn)程執(zhí)行.

        CGI是Web server與外部擴(kuò)展應(yīng)用程序交互的一種標(biāo)準(zhǔn)接口,CGI程序由html頁面和運(yùn)行在服務(wù)器上面的程序組成.開發(fā)時(shí)應(yīng)先構(gòu)建html頁面(表單),再編寫服務(wù)器程序(CGI程序)[9].

        圖4 Boa服務(wù)器工作流程Fig.4 Flowchart of boa server

        遠(yuǎn)程客戶端瀏覽器通過HTTP協(xié)議向Web服務(wù)器發(fā)送請求,服務(wù)器接收請求.由于一個(gè)URL指向一個(gè)CGI腳本,服務(wù)器按照URL指向的CGI應(yīng)用程序,執(zhí)行應(yīng)用程序.CGI腳本通過環(huán)境變量和標(biāo)準(zhǔn)輸入從Web服務(wù)器得到要執(zhí)行的操作,通過環(huán)境變量和標(biāo)準(zhǔn)輸出將結(jié)果返回給服務(wù)器,服務(wù)器再把結(jié)果返回給客戶端,其流程如圖4所示.

        4.2 智能手機(jī)客戶端的實(shí)現(xiàn) 為了方便客戶端進(jìn)行實(shí)時(shí)視頻監(jiān)控,本文系統(tǒng)采用JDK+eclipse設(shè)計(jì)在Android智能手機(jī)上運(yùn)行的應(yīng)用程序,通過網(wǎng)絡(luò)連接到嵌入式Web服務(wù)器即可實(shí)現(xiàn)遠(yuǎn)程監(jiān)控.

        設(shè)計(jì)網(wǎng)絡(luò)瀏覽器軟件時(shí),主要流程如下:

        1)使用urlText=(EditText)findViewByID(R.id.url)從 myweb.xml文件中得到輸入的網(wǎng)址,其中myweb.xml是布局文件,由它得到觸屏的輸入;

        2)使用ToPage(urlText.getText().toString().trim())函數(shù)處理獲取的網(wǎng)址,在函數(shù)中使用loadurl(wv,url)函數(shù)設(shè)置 WebView要顯示的網(wǎng)頁,其中:url是輸入網(wǎng)址;wv是頁面的顯示.在loadurl(wv,url)中使用view.loadUrl(url)真正實(shí)現(xiàn)網(wǎng)頁的載入顯示.

        設(shè)計(jì)視頻播放軟件時(shí),主要流程如下:

        1)設(shè)置MediaPlayer將要播放的視頻文件 myMediaPlayer.setDataSource(path),其中path為視頻源的路徑;

        2)設(shè)置 MediaPlayer的視頻輸出界面 myMediaPlayer.setDisplay(mySurfaceHolder);SurfaceView用于顯示視頻,SurfaceHolder用于控制SurfaceView,將播放視頻的SurfaceView對應(yīng)的SurfaceHolder對象作為setDisplay()的參數(shù);

        3)myMediaPlayer.prepare();在設(shè)置播放的視頻數(shù)據(jù)源后,MediaPlayer需要對其進(jìn)行解碼;

        4)MediaPlayer開始視頻播放myMediaPlayer.start().

        由于客戶端只需播放已經(jīng)在嵌入式系統(tǒng)中存儲好的視頻文件,因此只需兩個(gè)功能模塊即能實(shí)現(xiàn)智能手機(jī)的網(wǎng)絡(luò)監(jiān)控:Web瀏覽器模塊和視頻播放器模塊.在Android手機(jī)上使用已經(jīng)編譯好的apk應(yīng)用軟件,輸入IP地址連接到嵌入式服務(wù)器,選擇要播放的圖像文件進(jìn)行視頻播放,實(shí)現(xiàn)在移動(dòng)客戶端的視頻圖像播放.手機(jī)視頻圖像監(jiān)控圖像截圖如圖5所示,網(wǎng)絡(luò)瀏覽器截圖如圖6所示.

        圖5 視頻圖像監(jiān)控Fig.5 Video surveillance

        圖6 網(wǎng)絡(luò)瀏覽器Fig.6 Internet browser

        [1]何永琪.嵌入式Linux系統(tǒng)實(shí)用開發(fā) [M].北京:電子工業(yè)出版社,2010.

        [2]ZHANG Xiao-dong,LI Xiu-juan,ZHANG Jie.Design of Embedded Remote Monitoring System Based on the ARM [J].Modern Electronics Technique,2008,31(6):22-23.(張曉東,李秀娟,張杰.基于ARM的嵌入式遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì) [J].現(xiàn)代電子技術(shù),2008,31(6):22-23.)

        [3]YANG Ying,CHEN Zhi-long,HUANG Jie,et al.Embedded Remote Monitoring System Based on the USB Camera[J].Security and Safety Technology Magazine,2007(3):24-26.(楊穎,陳之龍,黃杰,等.基于USB攝像頭的嵌入式遠(yuǎn)程視頻監(jiān)控系統(tǒng) [J].安防科技,2007(3):24-26.)

        [4]劉禾.數(shù)字圖像處理及應(yīng)用 [M].北京:中國電力出版社,2006:227-230.

        [5]Cline L S,Du J,Keany B,et al.DirectShowTMRTP Support for Adaptivity in Networked Multimedia Applications[C]//Proceedings of the IEEE International Conference on Multimedia Computing and Systems.Washington:IEEE Computer Society,1998:13.

        [6]Tanenbaum A S.計(jì)算機(jī)網(wǎng)絡(luò) [M].熊桂喜,王小虎,譯.北京:清華大學(xué)出版社,2002:99-199.

        [7]Kurose J F,Ross K W.計(jì)算機(jī)網(wǎng)絡(luò) [M].陳鳴,譯.北京:機(jī)械工業(yè)出版社,2009:211-233.

        [8]WANG Chen-ying.Design and Research of Embedded Remote Monitoring System Based on the ARM9 [D].Beijing:Beijing University of Posts and Telecommunications,2009.(王晨營.基于ARM9的嵌入式遠(yuǎn)程監(jiān)測系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [D].北京:北京郵電大學(xué),2009.)

        [9]張移山.CGI程序設(shè)計(jì)指南 [M].北京:中國水利水電出版社,2002:33-80.

        猜你喜歡
        嵌入式系統(tǒng)
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無人機(jī)系統(tǒng)
        ZC系列無人機(jī)遙感系統(tǒng)
        北京測繪(2020年12期)2020-12-29 01:33:58
        基于PowerPC+FPGA顯示系統(tǒng)
        半沸制皂系統(tǒng)(下)
        TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
        電子制作(2019年7期)2019-04-25 13:17:14
        嵌入式系統(tǒng)通信技術(shù)的應(yīng)用
        電子制作(2018年18期)2018-11-14 01:48:16
        搭建基于Qt的嵌入式開發(fā)平臺
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        日本阿v网站在线观看中文| 毛片成人18毛片免费看| 美妇炮灰被狂躁爽到高潮h| 国产精品爽爽ⅴa在线观看| 国产白丝无码视频在线观看| 国产成人精品免费久久久久| 国产男女乱婬真视频免费| 婷婷久久亚洲中文字幕| 免费av一区二区三区| 麻豆久久久9性大片| 亚洲国产成人AV人片久久网站 | 国产性感午夜天堂av| 欧美亚洲一区二区三区| 久久99精品国产麻豆| 国产av综合一区二区三区最新 | 韩国无码av片在线观看网站| 校园春色综合久久精品中文字幕 | 无码中文字幕av免费放| 精品精品国产一区二区性色av| 人妻少妇久久中文字幕| 狠狠躁夜夜躁人人爽天天天天97| 日韩中文无线码在线视频观看| 乱人伦中文字幕在线不卡网站 | 偷拍色图一区二区三区| 日本真人添下面视频免费 | 亚洲成人av在线蜜桃| 亚洲午夜福利在线视频| 内射交换多p国产| 国产成人综合久久久久久| 中日无码精品一区二区三区| 亚洲av老熟女一区二区三区| 最新国产福利在线观看精品| 乱子伦视频在线看| 国产福利小视频91| 亚洲av男人的天堂一区| 三级做a全过程在线观看| 玩弄放荡人妻少妇系列| 精品亚洲女同一区二区| 人妻在线有码中文字幕| 成人毛片av免费| 国产内射合集颜射|