<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 基于ARM的視頻監(jiān)控終端的設(shè)計(jì)與實(shí)現(xiàn)

          基于ARM的視頻監(jiān)控終端的設(shè)計(jì)與實(shí)現(xiàn)

          作者:武漢理工大學(xué)自動(dòng)化學(xué)院 蘇義鑫 胡 杰 時(shí)間:2008-07-29 來源:中電網(wǎng) 收藏

          系統(tǒng)的軟件設(shè)計(jì)

          本文引用地址:http://www.ex-cimer.com/article/86355.htm

            視頻監(jiān)控終端的軟件設(shè)計(jì)主要完成兩方面的工作:

            (1)在硬件上搭建一個(gè)軟件平臺(tái),搭建軟件開發(fā)平臺(tái)需要完成UBOOT移植、操作系統(tǒng)內(nèi)核移植以及操作系統(tǒng)的設(shè)備驅(qū)動(dòng)程序的開發(fā)等工作。

            (2)在軟件平臺(tái)的基礎(chǔ)上,開發(fā)系統(tǒng)的應(yīng)用程序。借助交叉編譯工具,開發(fā)視頻監(jiān)控終端上運(yùn)行的采集、壓縮、傳輸程序。

            構(gòu)建基于S3C2410的Linux平臺(tái)
            Linux具有許多優(yōu)點(diǎn),如開放源碼;功能強(qiáng)大的內(nèi)核,支持多用戶、多線程、多進(jìn)程、實(shí)時(shí)性好、功能強(qiáng)大穩(wěn)定;大小功能可定制;支持多種體系結(jié)構(gòu)。

            構(gòu)建嵌入式Linux開發(fā)平臺(tái)需要先構(gòu)建交叉編譯環(huán)境,如圖4所示。一套完整的交叉編譯環(huán)境包括主機(jī)和目標(biāo)機(jī)。在開發(fā)中主機(jī)是一臺(tái)裝有紅帽公司的FedoreCore 2操作系統(tǒng)的PC機(jī),目標(biāo)機(jī)是基于S3C2410的視頻監(jiān)控終端。選用的交叉編譯器是GCC3.3.4 for 版,嵌入式Linux內(nèi)核源代碼包版本號(hào)為2.6.8RC。

           

            2.6.8RC版的Linux內(nèi)核源代碼包中包含了所有的功能模塊。系統(tǒng)中只用到了其中的一部分。因此,編譯內(nèi)核之前首先要配置內(nèi)核,裁減掉冗余的功能模塊,經(jīng)過定制的內(nèi)核才符合系統(tǒng)設(shè)計(jì)。具體步驟如下:

           ?。?)鍵入命令make menuconfig,對(duì)內(nèi)核進(jìn)行配置,選擇YAFFS文件系統(tǒng),支持NFS啟動(dòng),系統(tǒng)使用的是USB接口的攝像頭,故要啟用USB設(shè)備支持模塊,包括USB設(shè)備文件支持模塊、USB主控制器驅(qū)動(dòng)模塊等。此外,USB攝像頭屬于視頻設(shè)備,為了使應(yīng)用程序能夠訪問它,還需要啟用Video4Linux模塊。

            (2)用make dep命令生成內(nèi)核程序間依賴關(guān)系。

            (3)make zImage命令生成內(nèi)核映像文件。

           ?。?)make modules和make modules_install命令生成系統(tǒng)可加載模塊。

            這樣就生成了zImage內(nèi)核映像文件,把它下載到目標(biāo)平臺(tái)的Flash中。

            本設(shè)計(jì)采用USB外置攝像頭,在內(nèi)核配置時(shí)要求以模塊形式加載。首先要完成驅(qū)動(dòng)程序,驅(qū)動(dòng)中需要提供基本的I/O操作接口函數(shù)open、read、write、close的實(shí)現(xiàn),對(duì)中斷的處理實(shí)現(xiàn),內(nèi)存映射功能以及對(duì)I/O通道的控制接口函數(shù)ioctl等,并把他們定義在struct file_operations中。這樣當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行諸如open、close、read、write等,系統(tǒng)調(diào)用操作時(shí),嵌入式Linux內(nèi)核將通過file_operations結(jié)構(gòu)訪問驅(qū)動(dòng)程序提供的函數(shù)。接著把USB驅(qū)動(dòng)程序編譯成可以動(dòng)態(tài)加載的模塊,這樣攝像頭就可正常工作了。

            視頻監(jiān)控終端軟件的設(shè)計(jì)
            視頻監(jiān)控終端軟件按功能分為三部分:視頻采集、壓縮、傳輸。這個(gè)軟件的開發(fā)都是基于先前配置好的嵌入式內(nèi)核。

            (1)視頻采集部分

            使用Video4Linux接口函數(shù)訪問USB攝像頭設(shè)備,捕獲實(shí)時(shí)的視頻流。首先完成v4l_struct數(shù)據(jù)結(jié)構(gòu)的定義,如設(shè)備基本信息,圖像屬性,各個(gè)信號(hào)源屬性等;采集模塊一方面通過USB集線器采集USB攝像頭中的圖像,另一方面啟動(dòng)多個(gè)采集線程,分別在不同的端口上監(jiān)聽,一旦有請(qǐng)求連接,采集線程立即從設(shè)備緩沖區(qū)中把視頻流數(shù)據(jù)讀出,放入到視頻處理緩沖區(qū)中進(jìn)行下一步的處理。

            (2)視頻數(shù)據(jù)的壓縮部分

            在視頻監(jiān)控系統(tǒng)中,大量的數(shù)據(jù)需要通過網(wǎng)絡(luò)傳輸,為了保證傳輸質(zhì)量和傳輸實(shí)時(shí)性,就需要在傳輸之前進(jìn)行編碼壓縮以減少數(shù)據(jù)量,本文采用MPEG-4編碼標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)壓縮。在網(wǎng)絡(luò)上可以下載到開源的xvidcore軟件作為視頻壓縮的核心算法,xvidcore是一個(gè)高效的、移植性很強(qiáng)的多媒體編碼軟件,將它在PC機(jī)上進(jìn)行交叉編譯,生成的文件拷貝到目標(biāo)系統(tǒng)下。

            (3) 視頻數(shù)據(jù)傳輸部分

            傳輸模塊的作用在于把壓縮之后的視頻流傳送到遠(yuǎn)程的PC機(jī)客戶上,視頻流數(shù)據(jù)的傳輸是基于TCP/IP協(xié)議。視頻傳輸采用了標(biāo)準(zhǔn)的RTP傳輸協(xié)議。RTP是目前解決流媒體實(shí)時(shí)傳輸問題的最好辦法,在Linux平臺(tái)上進(jìn)行實(shí)時(shí)流媒體編程,需要使用一些開放源代碼的RTP庫,如LIBRTP、JRTPLIB等。定義一種較為簡(jiǎn)單的握手協(xié)議:PC機(jī)端的采集程序不停地發(fā)請(qǐng)求數(shù)據(jù)包到采集終端,采集終端把已經(jīng)捕獲的圖像打包返回給主機(jī)。每個(gè)RTP信息包被封裝在UDP消息段中,然后再封裝在IP數(shù)據(jù)包中發(fā)送出去。接收方自動(dòng)組裝接收到的數(shù)據(jù)幀,還原成視頻數(shù)據(jù)。

          結(jié)束語

            本文介紹了一種基于的視頻監(jiān)控系統(tǒng)的設(shè)計(jì)方案,采用軟壓縮算法,討論了系統(tǒng)的硬件和軟件設(shè)計(jì)。本系統(tǒng)和市場(chǎng)上其它視頻監(jiān)控系統(tǒng)相比,開發(fā)周期短,價(jià)格低廉,適用于對(duì)視頻圖像要求不太高的場(chǎng)合。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          關(guān)鍵詞: 嵌入式 DSP RISC 視頻臨控 ARM Linux

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();