




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
青島理工大學(xué)畢業(yè)設(shè)計(jì)(論文)基于ARM9和Qt的嵌入式視頻監(jiān)控系統(tǒng)的設(shè)計(jì)摘要實(shí)時(shí)視頻監(jiān)控是指將特定區(qū)域中的聲音或圖像信息全部或部分地呈現(xiàn)在人們的視野中,以便使人們能夠?qū)崟r(shí)的了解該區(qū)域中的信息,給日后某些事件的處理提供可靠的證據(jù)。隨著科學(xué)技術(shù)的日益騰飛和社會(huì)安全性的考慮,實(shí)時(shí)監(jiān)控系統(tǒng)成為了人們生活和工作中必不可少的一部分。而近年來嵌入式技術(shù)的強(qiáng)勢發(fā)展使得兩者的結(jié)合成為了必然的趨勢,嵌入式實(shí)時(shí)監(jiān)控系統(tǒng)因此得到了迅猛的發(fā)展。本文首先介紹了視頻監(jiān)控系統(tǒng)的發(fā)展歷史,介紹了嵌入式系統(tǒng)開發(fā)的一般流程,接著介紹了ARM最小系統(tǒng)的構(gòu)成以及如何搭建交叉編譯環(huán)境。然后分析了bootloader的原理和移植以及如何搭建交叉編譯環(huán)境,接著分析了如何將嵌入式Linux內(nèi)核移植到S3C2440上。重點(diǎn)討論了攝像頭圖像數(shù)據(jù)的采集和RTP傳輸?shù)脑?其中圖像的壓縮技術(shù)采用MPEG-4壓縮標(biāo)準(zhǔn),MPEG-4壓縮標(biāo)準(zhǔn)是目前視頻編碼中應(yīng)用最廣泛的一個(gè)標(biāo)準(zhǔn)。最后介紹了一款非常流行的跨平臺(tái)的C++圖形用戶界面庫Qt,并用它實(shí)現(xiàn)了一個(gè)交互性友好的監(jiān)控客戶端。本文基本實(shí)現(xiàn)了視頻圖像的采集、傳輸、顯示和存儲(chǔ)回放功能,絕大部分模塊的實(shí)現(xiàn)都是采用Linux下的C編程。經(jīng)過測試,該系統(tǒng)具有良好的穩(wěn)定性和維護(hù)性,具有較大的工程實(shí)用價(jià)值?!娟P(guān)鍵詞】嵌入式系統(tǒng)圖像采集MPEGRTP傳輸ABSTRACTReal-timevideomonitoringreferstopartiallyorwhollypresentthesoundandvideoinformationinaspecificareainpeople’svisualsight,sothatpeoplecanknowabouttheinformationinthisareaonreal-timebasis,offeringpowerfulproofforhandlingtheaffairsinthefuture.Withtherapiddevelopmentofscienceandtechnologyaswellastheconsiderationofsocialsecurity,toimplementreal-timevideomonitoringbecomesindispensableinhumanbeings’lifeandwork,whereasthepromisingdevelopmentofembeddedtechnologywhichprevailsinrecentyearsmakesthecombinationofthesetwotechnologiesbecomeinevitable.Henceembeddedreal-timevideomonitoringdevelopsbyleapsandbounds.Thisdissertationfirstintroducesthedevelopmenthistoryofvideomonitoringsystem,andthegeneralflowofdevelopingembeddedsystem.ThenitgivesdescriptiontothestructureofARMminimalsystemaswellashowtocreatethecross-compilerenvironment.Nexttheprincipleandtransplantationofbootloaderareanalyzed,whileitalsoexplainshowtotransplanttheLinuxinnercoretotheS3C2440.ThenitfocusesonthecollectionofimagedatathoughthecameraaswellastheprincipleofRTPtransmission,inwhichMPEG-4compressionstandardisemployedasthecompressiontechnologyoftheimagessinceitisthemostwidely-appliedstandardinvideocompiling.Finallyitintroducesaverypopularcross-platformC++graphicuserinterfacelibraryQt,byusingwhichaninteractivefriendlymonitoringuserendisrealized.Thisdissertationactualizesthefunctionsofcollection,transmission,display,storageandplaybackofvideos.MostofmodulesarerealizedbyusingCprogramming.Aftertesting,thissystemhasgoodstabilityandmaintainabilityandthusshowsgreatengineeringpracticalvalue.KEYWORDSEmbeddedSystemImageAcquisitionMPEGRTPtransmission目錄TOC\o"1-3"\h\u24052摘要 Linux內(nèi)核無線網(wǎng)卡驅(qū)無線網(wǎng)卡bootloaderbootloaderARM平臺(tái)ARM平臺(tái)無線局域網(wǎng)無線網(wǎng)卡無線路由器無線網(wǎng)卡無線路由器監(jiān)控監(jiān)控PC2.2ARM處理器簡介ARM(AdvanceRISCMachines),既可以認(rèn)為是一個(gè)公司的名字,也可以認(rèn)為是對(duì)位處理器的統(tǒng)稱,還可以認(rèn)為是一種技術(shù)的名字。ARM處理器是一個(gè)32位元精簡指令集RISC(ReducedInstructionSetComputing)處理器架構(gòu),其廣泛應(yīng)用在許多嵌入式系統(tǒng)設(shè)計(jì)。ARM處理器具有以下特點(diǎn):1、體積小、低功耗、低成本、高性能;2、支持Thumb(16位)/ARM(32位)雙指令集,兼容性好。3、大量使用寄存器,指令執(zhí)行速度更快;4、大多數(shù)數(shù)據(jù)操作都在寄存器中完成;5、尋址方式靈活簡單,執(zhí)行效率高;6、指令長度固定2.3S3C2440開發(fā)板簡介硬件設(shè)計(jì)方案如圖示系統(tǒng)硬件結(jié)構(gòu)系統(tǒng)采用Samsung公司的ARM9內(nèi)核芯片S3C2440作為硬件平臺(tái)的中央處理器,該處理器主頻可達(dá)400MHz,硬件接口和資源豐富,存儲(chǔ)單元包括Flash和SDRAM,F(xiàn)lash具有掉電保持?jǐn)?shù)據(jù)的特性,用于存儲(chǔ)Bootloader啟動(dòng)程序、Linux內(nèi)核映像、文件系統(tǒng)以及用戶應(yīng)用程序等。SDRAM數(shù)據(jù)存取速度大大高于Flash存儲(chǔ)器,用于為操作系統(tǒng)和應(yīng)用程序提供運(yùn)行空間。平臺(tái)利用RS232接口輸出調(diào)試信息,通過以太網(wǎng)控制器芯片DM9000擴(kuò)展了一個(gè)網(wǎng)口,用于與外部網(wǎng)絡(luò)進(jìn)行通信,通過USBHOST接口連接USB攝像頭采集圖像數(shù)據(jù),經(jīng)處理器壓縮并打包成視頻流后經(jīng)以太網(wǎng)進(jìn)行傳輸,終端用戶接收到視頻流,解碼后即可把視頻圖像顯示出來。S3C24xx系列的應(yīng)用處理器芯片是三星主推的,三星目前推出了S3C2410和S3C2440,都是基于ARM9架構(gòu)的,而且硬件管腳兼容,應(yīng)該說大致的功能基本相同。2.3.1主要結(jié)構(gòu)S3C2440的頻率是400MHZ,其中ARM920t核由ARM920TDMI、內(nèi)存存儲(chǔ)單元(MMU)(MemoryManagementUnit)和高速緩存三部分組成。其中,MMU可以管理虛擬內(nèi)存,高速緩存由獨(dú)立的16KB地址和16KB的數(shù)據(jù)高速Cache組成,ARM920t有兩個(gè)內(nèi)部協(xié)處理器:CP14和CP15。CP14用于調(diào)試控制,CP15由于存儲(chǔ)系統(tǒng)控制以及測試控制。該芯片架構(gòu)如圖下:2.3.2體系結(jié)構(gòu)S3c2440處理器為手持設(shè)備和通用嵌入式應(yīng)用提供了豐富的片上集成系統(tǒng)解決方案,包括:1、16/32位RISC體系結(jié)構(gòu)和ARM920t內(nèi)核強(qiáng)大的指令集2、加強(qiáng)的ARM體系結(jié)構(gòu)MMU,用于支持WINCE和Linux3、采用ARM920TCPU內(nèi)核支持ARM調(diào)試體系結(jié)構(gòu)4、內(nèi)部高級(jí)微控制總線體系結(jié)構(gòu)5、支持高速總線模式和異步總線模式,支持外部等待信號(hào)延長總線周期2.3.3S3C2440開發(fā)板模塊介紹處理器通用模塊1:(1)60個(gè)中斷源:有1個(gè)快速中斷,24個(gè)外部中斷,其余為普通中斷;(2)1個(gè)看門狗定時(shí)器;(3)5個(gè)定時(shí)器;(4)24個(gè)外部中斷;(5)2個(gè)SPI通道;(6)2個(gè)USBHOST接口;(7)1個(gè)LCD;(8)1個(gè)NAND;(9)1個(gè)AC97。處理器通用模塊2:3個(gè)通道的UART,帶有16字節(jié)的TX/RXFIFO,支持IrDA1.0功能;8通道的10位A/D轉(zhuǎn)換器,最高速率可達(dá)500kSPS、提供有觸摸屏接口;具有130個(gè)通用I/O口;(4)有4個(gè)具有PWM功能的16位定時(shí)器和1個(gè)16位內(nèi)部定時(shí)器;(5)看門狗定時(shí)器。存儲(chǔ)器接口:sram、sdram、norflash、NANDflash;外部存儲(chǔ)器控制器,可擴(kuò)展8組,每組128MB,總?cè)萘窟_(dá)1GB;支持NandFlash作為啟動(dòng)存儲(chǔ)器及數(shù)據(jù)存儲(chǔ)器;支持最高達(dá)256M的SDRAM存儲(chǔ)器接口;支持NORFLASH、SRAM存儲(chǔ)器接口;4通道的DMA,并且有外部請(qǐng)求引腳??偩€接口:(1)27位地址總線,8/16/32位可編程數(shù)據(jù)總線,控制總線;(2)具有2通道的SPI、1個(gè)通道的IIC串行總線接口和1個(gè)通道的IIS音頻總線接口;(3)有2個(gè)USB主機(jī)總線端口,1個(gè)USB設(shè)備總線端口;(4)兼容MMC的SD卡接口。人機(jī)接口:帶有四線電阻式觸摸屏接口;有LCD控制器,支持4K色的STN和256K色的TFT,配置有DMA通道;支持多種屏幕尺寸,典型的屏幕尺寸有640*480,320*320,160*160;集成Camer攝像頭控制器;具有日歷功能的RTC。第三章基于V4L的視頻采集程序以及圖像壓縮理論3.1V4L2VideoforLinuxtwo(Video4Linux2)簡稱V4L2,是V4L的改進(jìn)版。V4L2是linux操作系統(tǒng)下用于采集圖片、視頻和音頻數(shù)據(jù)的API接口,配合適當(dāng)?shù)囊曨l采集設(shè)備和相應(yīng)的驅(qū)動(dòng)程序,可以實(shí)現(xiàn)圖片、視頻、音頻等的采集。在遠(yuǎn)程會(huì)議、可視電話、視頻監(jiān)控系統(tǒng)和嵌入式多媒體終端中都有廣泛的應(yīng)用。在Linux下,所有外設(shè)都被看成一種特殊的文件,成為“設(shè)備文件”,可以象訪問普通文件一樣對(duì)其進(jìn)行讀寫。一般來說,采用V4L2驅(qū)動(dòng)的攝像頭設(shè)備文件是/dev/v4l/video0。為了通用,可以建立一個(gè)到/dev/video0的鏈接。V4L2支持兩種方式來采集圖像:內(nèi)存映射方式(mmap)和直接讀取方式(read)。V4L2在include/linux/videodev.h文件中定義了一些重要的數(shù)據(jù)結(jié)構(gòu),在采集圖像的過程中,就是通過對(duì)這些數(shù)據(jù)的操作來獲得最終的圖像數(shù)據(jù)。Linux系統(tǒng)V4L2的能力可在Linux內(nèi)核編譯階段配置,默認(rèn)情況下都有此開發(fā)接口。V4L2從Linux2.5.x版本的內(nèi)核中開始出現(xiàn)[15].V4L2規(guī)范中不僅定義了通用API元素(CommonAPIElements),圖像的格式(ImageFormats),輸入/輸出方法(Input/Output),還定義了Linux內(nèi)核驅(qū)動(dòng)處理視頻信息的一系列接口(Interfaces),這些接口主要有:視頻采集接口——VideoCaptureInterface;視頻輸出接口——VideoOutputInterface;視頻覆蓋/預(yù)覽接口——VideoOverlayInterface;視頻輸出覆蓋接口——VideoOutputOverlayInterface;編解碼接口——CodecInterface。3.2應(yīng)用程序通過V4L2進(jìn)行視頻采集的原理V4L2支持內(nèi)存映射方式(mmap)和直接讀取方式(read)來采集數(shù)據(jù),前者一般用于連續(xù)視頻數(shù)據(jù)的采集,后者常用于靜態(tài)圖片數(shù)據(jù)的采集,本文重點(diǎn)討論內(nèi)存映射方式的視頻采集。應(yīng)用程序通過V4L2接口采集視頻數(shù)據(jù)分為五個(gè)步驟:首先,打開視頻設(shè)備文件,進(jìn)行視頻采集的參數(shù)初始化,通過V4L2接口設(shè)置視頻圖像的采集窗口、采集的點(diǎn)陣大小和格式;其次,申請(qǐng)若干視頻采集的幀緩沖區(qū),并將這些幀緩沖區(qū)從內(nèi)核空間映射到用戶空間,便于應(yīng)用程序讀取/處理視頻數(shù)據(jù);第三,將申請(qǐng)到的幀緩沖區(qū)在視頻采集輸入隊(duì)列排隊(duì),并啟動(dòng)視頻采集;第四,驅(qū)動(dòng)開始視頻數(shù)據(jù)的采集,應(yīng)用程序從視頻采集輸出隊(duì)列取出幀緩沖區(qū),處理完后,將幀緩沖區(qū)重新放入視頻采集輸入隊(duì)列,循環(huán)往復(fù)采集連續(xù)的視頻數(shù)據(jù);第五,停止視頻采集。3.2.1視頻采集的參數(shù)初始化在Linux下,攝像頭硬件已經(jīng)被映射為設(shè)備文件“/dev/video0”,用open函數(shù)打開這個(gè)設(shè)備文件,獲得其文件描述符fd_v4l2,然后對(duì)這個(gè)文件描述符進(jìn)行參數(shù)初始化。(1)設(shè)置視頻的采集窗口參數(shù)設(shè)置采集窗口就是在攝像頭設(shè)備的取景范圍之內(nèi)設(shè)定一個(gè)視頻采集區(qū)域。主要是對(duì)結(jié)構(gòu)體v4l2_crop賦值,v4l2_crop由一個(gè)v4l2_buffer_type枚舉類型的type和v4l2_rect類型的結(jié)構(gòu)體c構(gòu)成,來描述視頻采集窗口的類型和大小。type設(shè)置為視頻采集類型V4L2_BUF_TYPE_VIDEO_CAPTURE。c是表示采集窗口的大小的結(jié)構(gòu)體,它的成員Left和Top分別表示視頻采集區(qū)域的起始橫坐標(biāo)和縱坐標(biāo),width和height分別表示采集圖像的寬度和高度。賦值后,用ioctl函數(shù)通過這個(gè)結(jié)構(gòu)體對(duì)fd_v4l2進(jìn)行設(shè)置。structv4l2_crop{enumv4l2_buf_typetype;structv4l2_rectc;};(2)設(shè)置視頻點(diǎn)陣格式和點(diǎn)陣大小主要是對(duì)結(jié)構(gòu)體v4l2_format進(jìn)行賦值,它由type和聯(lián)合體fmt構(gòu)成,來描述視頻設(shè)備當(dāng)前行為和數(shù)據(jù)的格式。把type賦值為視頻采集類型V4L2_BUF_TYPE_VIDEO_CAPTURE,表示定義了一個(gè)視頻采集流類型的buffer。fmt中,pix為表示圖形格式的v4l2_pix_format型結(jié)構(gòu)體。需要設(shè)定pix里的幾個(gè)變量,pixelformat表示采集格式,設(shè)置為V4L2_PIX_FMT_YUV420;width、height表示圖像的寬度、高度,以字節(jié)為單位;sizeimage表示圖像所占的存儲(chǔ)空間大小,以字節(jié)為單位;bytesperline表示每一行的字節(jié)數(shù)。賦值后,用ioctl函數(shù)通過這個(gè)結(jié)構(gòu)體對(duì)fd_v4l2進(jìn)行設(shè)置。structv4l2_format{enumv4l2_buf_typetype;union{structv4l2_pix_formatpix;//V4L2_BUF_TYPE_VIDEO_CAPTUREstructv4l2_windowwin;//V4L2_BUF_TYPE_VIDEO_OVERLAY__u8raw_data[200];//user-defined}fmt;};(3)設(shè)置視頻采集的幀率結(jié)構(gòu)體v4l2_streamparm來描述視頻流的屬性,它由type和聯(lián)合體parm構(gòu)成。type同上,由于選的是V4L2_BUF_TYPE_VIDEO_CAPTURE,所以僅需設(shè)定parm中的v412_capture型結(jié)構(gòu)體capture即可。在其中,v4l2_fract型結(jié)構(gòu)體timeperframe表示平均每一幀所占的時(shí)間,由其元素numerator和denominator共同決定,該時(shí)長為numerator/denominator;而capturemode則表示采集模式,采集高質(zhì)量圖片值為1,一般設(shè)為0。賦值之后,用ioctl函數(shù)通過這個(gè)結(jié)構(gòu)體對(duì)fd_v4l2進(jìn)行設(shè)置。structv4l2_streamparm{enumv4l2_buf_typetype;union{structv4l2_captureparmcapture;structv4l2_outputparmoutput;__u8raw_data[200];/*user-defined*/}parm;};3.2.2申請(qǐng)并設(shè)置視頻采集的幀緩沖區(qū)前期初始化完成后,只是解決了一幀視頻數(shù)據(jù)的格式和大小問題,而連續(xù)視頻幀數(shù)據(jù)的采集需要用幀緩沖區(qū)隊(duì)列的方式來解決,即要通過驅(qū)動(dòng)程序在內(nèi)存中申請(qǐng)幾個(gè)幀緩沖區(qū)來存放視頻數(shù)據(jù)。應(yīng)用程序通過API接口提供的方法(VIDIOC_REQBUFS)申請(qǐng)若干個(gè)視頻數(shù)據(jù)的幀緩沖區(qū),申請(qǐng)幀緩沖區(qū)數(shù)量一般不低于3個(gè),每個(gè)幀緩沖區(qū)存放一幀視頻數(shù)據(jù),這些幀緩沖區(qū)在內(nèi)核空間。應(yīng)用程序通過API接口提供的查詢方法(VIDIOC_QUERYBUF)查詢到幀緩沖區(qū)在內(nèi)核空間的長度和偏移量地址。應(yīng)用程序再通過內(nèi)存映射方法(mmap),將申請(qǐng)到的內(nèi)核空間幀緩沖區(qū)的地址映射到用戶空間地址,這樣就可以直接處理幀緩沖區(qū)的數(shù)據(jù)。(1)將幀緩沖區(qū)在視頻輸入隊(duì)列排隊(duì),并啟動(dòng)視頻采集在驅(qū)動(dòng)程序處理視頻的過程中,定義了兩個(gè)隊(duì)列:視頻采集輸入隊(duì)列(incomingqueues)和視頻采集輸出隊(duì)列(outgoingqueues),前者是等待驅(qū)動(dòng)存放視頻數(shù)據(jù)的隊(duì)列,后者是驅(qū)動(dòng)程序已經(jīng)放入了視頻數(shù)據(jù)的隊(duì)列。如圖2所示。應(yīng)用程序需要將上述幀緩沖區(qū)在視頻采集輸入隊(duì)列排隊(duì)(VIDIOC_QBUF),然后可啟動(dòng)視頻采集。(2)循環(huán)往復(fù),采集連續(xù)的視頻數(shù)據(jù)啟動(dòng)視頻采集后,驅(qū)動(dòng)程序開始采集一幀數(shù)據(jù),把采集的數(shù)據(jù)放入視頻采集輸入隊(duì)列的第一個(gè)幀緩沖區(qū),一幀數(shù)據(jù)采集完成,也就是第一個(gè)幀緩沖區(qū)存滿一幀數(shù)據(jù)后,驅(qū)動(dòng)程序?qū)⒃搸彌_區(qū)移至視頻采集輸出隊(duì)列,等待應(yīng)用程序從輸出隊(duì)列取出。驅(qū)動(dòng)程序接下來采集下一幀數(shù)據(jù),放入第二個(gè)幀緩沖區(qū),同樣幀緩沖區(qū)存滿下一幀數(shù)據(jù)后,被放入視頻采集輸出隊(duì)列。應(yīng)用程序從視頻采集輸出隊(duì)列中取出含有視頻數(shù)據(jù)的幀緩沖區(qū),處理幀緩沖區(qū)中的視頻數(shù)據(jù),如存儲(chǔ)或壓縮。最后,應(yīng)用程序?qū)⑻幚硗陻?shù)據(jù)的幀緩沖區(qū)重新放入視頻采集輸入隊(duì)列,這樣可以循環(huán)采集,如圖3.2.1所示[16]:圖3.2.1視頻采集輸入和輸出隊(duì)列示意圖(3)最終停止采集,釋放內(nèi)存幀緩沖區(qū)3.3用V4L2采集視頻的程序流程和相關(guān)APIV4L2采集視頻操作基本按照打開視頻設(shè)備、設(shè)置視頻格式、啟動(dòng)視頻采集,循環(huán)處理視頻數(shù)據(jù)、停止視頻采集、關(guān)閉視頻設(shè)備,具體操作通過ioctl等函數(shù)來實(shí)現(xiàn)。一般操作流程如下:(1)打開視頻設(shè)備文件。intfd=open("/dev/video0",O_RDWR);(2)查詢視頻設(shè)備的能力,比如是否具有視頻輸入,或者音頻輸入輸出等。ioctl(fd_v4l,VIDIOC_QUERYCAP,&cap)(3)設(shè)置視頻采集的參數(shù)設(shè)置視頻的制式,制式包括PAL/NTSC,使用ioctl(fd_v4l,VIDIOC_S_STD,&std_id)設(shè)置視頻圖像的采集窗口的大小,使用ioctl(fd_v4l,VIDIOC_S_CROP,&crop)設(shè)置視頻幀格式,包括幀的點(diǎn)陣格式,寬度和高度等,使用ioctl(fd_v4l,VIDIOC_S_FMT,&fmt)設(shè)置視頻的幀率,使用ioctl(fd_v4l,VIDIOC_S_PARM,&parm)設(shè)置視頻的旋轉(zhuǎn)方式,使用ioctl(fd_v4l,VIDIOC_S_CTRL,&ctrl)(4)向驅(qū)動(dòng)申請(qǐng)視頻流數(shù)據(jù)的幀緩沖區(qū)請(qǐng)求/申請(qǐng)若干個(gè)幀緩沖區(qū),一般為不少于3個(gè),使用ioctl(fd_v4l,VIDIOC_REQBUFS,&req)查詢幀緩沖區(qū)在內(nèi)核空間中的長度和偏移量ioctl(fd_v4l,VIDIOC_QUERYBUF,&buf)(5)應(yīng)用程序通過內(nèi)存映射,將幀緩沖區(qū)的地址映射到用戶空間,這樣就可以直接操作采集到的幀了,而不必去復(fù)制。buffers[i].start=mmap(NULL,buffers[i].length,PROT_READ|PROT_WRITE,MAP_SHARED,fd_v4l,buffers[i].offset);(6)將申請(qǐng)到的幀緩沖全部放入視頻采集輸出隊(duì)列,以便存放采集的數(shù)據(jù)。ioctl(fd_v4l,VIDIOC_QBUF,&buf)(7)開始視頻流數(shù)據(jù)的采集。ioctl(fd_v4l,VIDIOC_STREAMON,&type)(8)驅(qū)動(dòng)將采集到的一幀視頻數(shù)據(jù)存入輸入隊(duì)列第一個(gè)幀緩沖區(qū),存完后將該幀緩沖區(qū)移至視頻采集輸出隊(duì)列。(9)應(yīng)用程序從視頻采集輸出隊(duì)列中取出已含有采集數(shù)據(jù)的幀緩沖區(qū)。ioctl(fd_v4l,VIDIOC_DQBUF,&buf),應(yīng)用程序處理該幀緩沖區(qū)的原始視頻數(shù)據(jù)。(10)處理完后,應(yīng)用程序的將該幀緩沖區(qū)重新排入輸入隊(duì)列,這樣便可以循環(huán)采集數(shù)據(jù)。ioctl(fd_v4l,VIDIOC_QBUF,&buf)重復(fù)上述步驟8到10,直到停止采集數(shù)據(jù)。(11)停止視頻的采集。ioctl(fd_v4l,VIDIOC_STREAMOFF,&type)(12)釋放申請(qǐng)的視頻幀緩沖區(qū)unmap,關(guān)閉視頻設(shè)備文件close(fd_v4l)。以上的程序流程,包含了視頻設(shè)備采集連續(xù)的視頻數(shù)據(jù)的邏輯關(guān)系。而在實(shí)際運(yùn)用中,往往還要加入對(duì)視頻數(shù)據(jù)進(jìn)行處理(如壓縮編碼)的工作,否則,視頻流數(shù)據(jù)量相當(dāng)大,需要很大的存儲(chǔ)空間和傳輸帶寬。上述過程中,每一個(gè)幀緩沖區(qū)都有一個(gè)對(duì)應(yīng)的狀態(tài)標(biāo)志變量,其中每一個(gè)比特代表一個(gè)狀態(tài)V4L2_BUF_FLAG_UNMAPPED0B0000V4L2_BUF_FLAG_MAPPED0B0001V4L2_BUF_FLAG_ENQUEUED0B0010V4L2_BUF_FLAG_DONE0B0100緩沖區(qū)的狀態(tài)轉(zhuǎn)化如圖2.所示[17]:圖3.3.1緩沖區(qū)的狀態(tài)標(biāo)志轉(zhuǎn)化圖第四章視屏傳輸?shù)膶?shí)現(xiàn)要實(shí)現(xiàn)現(xiàn)場監(jiān)控,出了完成視屏采集的過程,還需要吧視頻圖像數(shù)據(jù)通過網(wǎng)絡(luò)傳輸出去,因此需要在完成視頻采集的基礎(chǔ)上建立網(wǎng)絡(luò)服務(wù)器,實(shí)現(xiàn)客戶端和服務(wù)器之間的數(shù)據(jù)通信。4.1TCP/IP協(xié)議簡介TransmissionControlProtocol/InternetProtocol的簡寫,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通信協(xié)議,是Internet最基本的協(xié)議、Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺(tái)電腦規(guī)定一個(gè)地址。TCP/IP結(jié)構(gòu)對(duì)應(yīng)OSI結(jié)構(gòu)TCP/IPOSI應(yīng)用層應(yīng)用層
表示層
會(huì)話層主機(jī)到主機(jī)層(TCP)(又稱傳輸層)傳輸層網(wǎng)絡(luò)層(IP)網(wǎng)絡(luò)層網(wǎng)絡(luò)接口層(又稱鏈路層)數(shù)據(jù)鏈路層物理層網(wǎng)絡(luò)接口層物理層是定義物理介質(zhì)的各種特性:1、機(jī)械特性。2、電子特性。3、功能特性。4、規(guī)程特性。4.2socket網(wǎng)絡(luò)編程socket的英文原義是“孔”或“插座”。作為4BDSUNIX的進(jìn)制通信機(jī)制,取后一種意思。通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。在Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件,同時(shí)提供幾種服務(wù)。每種服務(wù)都打開一個(gè)Socket,并綁定到一個(gè)端口上,不同的端口對(duì)應(yīng)于不同的服務(wù)。Socket正如其英文原意那樣,象一個(gè)多孔插座。一臺(tái)主機(jī)猶如布滿各種插座的房間,每個(gè)插座有一個(gè)編號(hào),有的插座提供220伏交流電,有的提供110伏交流電,有的則提供有線電視節(jié)目??蛻糗浖⒉孱^插到不同編號(hào)的插座,就可以得到不同的服務(wù)。根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請(qǐng)求,連接確認(rèn)。服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)??蛻舳苏?qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報(bào)式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對(duì)于面向連接的TCP服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式Socket是一種無連接的Socket,對(duì)應(yīng)于無連接的UDP服務(wù)應(yīng)用。Socket為了建立Socket,程序可以調(diào)用Socket函數(shù),該函數(shù)返回一個(gè)類似于文件描述符的句柄。socket函數(shù)原型為:intsocket(intdomain,inttype,intprotocol);domain指明所使用的協(xié)議族,通常為PF_INET,(其與addrinfo里的AF_INET在現(xiàn)在看來是相同的。只是歷史上人們?cè)鴺?gòu)想將AF(地址家族addressfamily)與PF(protocolfamily協(xié)議家族)分開,但實(shí)際上這種區(qū)分并未真正推廣,所以現(xiàn)在AF_INET和PF_INET具有相同的意義。其中AF_INET是基于IPv4而PF_INET基于IPv6)表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol通常賦值0。Socket()調(diào)用返回一個(gè)整型socket描述符,你可以在后面的調(diào)用使用它。Socket描述符是一個(gè)指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用Socket函數(shù)時(shí),socket執(zhí)行體將建立一個(gè)Socket,實(shí)際上"建立一個(gè)Socket"意味著為一個(gè)Socket數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空間。Socket執(zhí)行體為你管理描述符表。兩個(gè)網(wǎng)絡(luò)程序之間的一個(gè)網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端口。Socket數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。socket在測量軟件中的使用也很廣泛。 第五章嵌入式系統(tǒng)軟件設(shè)計(jì)本次畢設(shè)中軟件操作主要分為以下幾部分:UbuntuSDL的安裝運(yùn)行、解讀源程序兩臺(tái)PC機(jī)之間的視頻監(jiān)控安裝交叉編譯工具鏈Bootlader的配置對(duì)內(nèi)核重新配置和編譯將客戶端代碼編譯生成ARM板下可執(zhí)行文件程序移植(PC機(jī)和開發(fā)板實(shí)現(xiàn)視頻監(jiān)控)這次畢設(shè)的軟件模塊我是按照環(huán)境搭建,安裝工具,編寫程序,可執(zhí)行程序移植的順序設(shè)計(jì)的。5.1UbuntuSDL的安裝5.1.1SDL庫簡介 SDL是SimpleDirectMediaLayer(簡易直控媒體層)的縮寫。它是一個(gè)跨平臺(tái)的多媒體庫。用于直接控制底層的多媒體硬件接口。這些多媒體功能包括了音頻、鍵盤和鼠標(biāo)(事件)、游戲搖桿等。 當(dāng)然,最為重要的是提供了2D圖形幀緩沖(framebuffer)的接口,以及為OpenGL與各種操作系統(tǒng)之間提供了統(tǒng)一的標(biāo)準(zhǔn)接口以實(shí)現(xiàn)3D圖形。從這些屬性我們可以看出,SDL庫基本上可以認(rèn)為是為以電腦游戲?yàn)楹诵拈_發(fā)的多媒體庫。 SDL支持主流的操作系統(tǒng)。包括windows和linux。5.1.2UbuntuSDL的安裝 下載SDL安裝包:SDL-1.2.14.tar.tar 解壓文件:tar–xzvfSDL-1.2.14.tar.tar 進(jìn)入目錄文件: ./config Make Makeinstall5.2運(yùn)行、解讀源程序 進(jìn)入特定目錄:cd/fanfan(進(jìn)入根目錄下的fanfan目錄) 將源程序進(jìn)行解壓:tar–xvzfluvcview_20070512.tar.gz5.3兩臺(tái)PC機(jī)之間的視頻監(jiān)控5.4安裝交叉編譯編譯工具鏈開發(fā)嵌入式Linux應(yīng)用程序必須安裝交叉編譯器,安裝方法為:將arm-linux-gcc-3.3.2.tar.bz2進(jìn)行解壓即可。在RedHatLinux9.0內(nèi)執(zhí)行解壓命令:tarxjvfarm-linux-gcc-3.3.2.tar.bz2-C/解壓完后會(huì)出現(xiàn)/usr/local/arm/3.3.2目錄結(jié)構(gòu),該目錄下為進(jìn)行基于ARM平臺(tái)的嵌入式Linux開發(fā)的交叉編譯環(huán)境。解壓完后還要設(shè)置環(huán)境變量,首先執(zhí)行“vi/root/.bash_profile”找到行:PATH=$PATH:$HOME/bin,改為:PATH=$PATH:$HOME/bin:/usr/local/arm/3.3.2/bin到此為止,整個(gè)嵌入式Linux的開發(fā)環(huán)境(宿主機(jī)部分)已經(jīng)完成5.5Bootlader的配置5.5.1bootloader的主要功能(1)初始化硬件初始化CPUclock,Memorytiming,interrupt,UART和GPIO。(2)啟動(dòng)Linux這是bootloader最重要的功能。它將內(nèi)核映像復(fù)制到SDRAM中并跳轉(zhuǎn)到內(nèi)核入口地址處。5.6對(duì)內(nèi)核重新配置和編譯 將內(nèi)核源碼壓縮包linux--1208-nfs-ok.tar.bz2進(jìn)行解壓:cd/fanfantar–zxvflinux--1208-nfs-ok.tar.bz2 對(duì)內(nèi)核進(jìn)行重新配置,要實(shí)現(xiàn)支持USB攝像頭驅(qū)動(dòng): 進(jìn)入內(nèi)核目錄:makemenuconfig進(jìn)行配置 DeviceDrives Multimediasupport Videocaptureadapters V4LUSBdevices. 配置完成后對(duì)內(nèi)核進(jìn)行重新編譯生成開發(fā)板上可用的內(nèi)核: make 在/linux-/arch/arm/boot目錄下會(huì)生成zImage文件 makeinstall 在/linux-/arch/arm/boot目錄下會(huì)生成uImage文件 uImage即是要移植到開發(fā)板上的內(nèi)核鏡像文件5.7將客
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書修復(fù)與保護(hù)保證館藏書籍的保存質(zhì)量計(jì)劃
- 專業(yè)品牌營銷團(tuán)隊(duì)的組建要點(diǎn)計(jì)劃
- 腦卒中的預(yù)防和護(hù)理
- 發(fā)展團(tuán)隊(duì)領(lǐng)導(dǎo)能力提升團(tuán)隊(duì)士氣計(jì)劃
- 社團(tuán)工作的組織和具體安排計(jì)劃
- 四川峨邊華竹溝礦業(yè)開發(fā)有限公司華竹溝磷礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案情況
- 茶飲店基礎(chǔ)知識(shí)培訓(xùn)課件
- 肺部粒子植入患者護(hù)理
- 2025年曲靖貨運(yùn)車從業(yè)考試題
- 2025年黔東南貨車資格證考試題
- 醫(yī)院納入定點(diǎn)后使用醫(yī)療保障基金的預(yù)測性分析報(bào)告
- 2024年反詐騙知識(shí)競賽題庫與答案
- 初中英語不規(guī)則動(dòng)詞表(譯林版-中英)
- 【A酒店員工敬業(yè)度提升對(duì)策探究10000字(論文)】
- 人工造林項(xiàng)目投標(biāo)方案(技術(shù)方案)
- 版NCCN直腸癌指南解讀
- 全過程工程咨詢服務(wù)服務(wù)質(zhì)量保障方案
- 安全生產(chǎn)培訓(xùn)記錄表
- (高清版)DZT 0319-2018 冶金行業(yè)綠色礦山建設(shè)規(guī)范
- 2024年湖南株洲市天元區(qū)面向社會(huì)社區(qū)專職工作者招聘筆試參考題庫附帶答案詳解
- 高中生物學(xué)科核心素養(yǎng)解讀課件
評(píng)論
0/150
提交評(píng)論