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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Intel PXA255平臺(tái)的網(wǎng)絡(luò)攝像機(jī)設(shè)計(jì)

          基于Intel PXA255平臺(tái)的網(wǎng)絡(luò)攝像機(jī)設(shè)計(jì)

          作者: 時(shí)間:2005-04-14 來源:網(wǎng)絡(luò) 收藏

          摘要:隨著和多媒體技術(shù)的廣泛應(yīng)用,數(shù)字視頻得到了飛速發(fā)展。尤其在監(jiān)控領(lǐng)域,將傳統(tǒng)的模擬視頻監(jiān)控信號(hào)轉(zhuǎn)換為數(shù)字視頻信號(hào),并且利用現(xiàn)有IP一個(gè)不受距離限制的廉價(jià)通用網(wǎng)絡(luò)視頻監(jiān)控設(shè)備成為了新的熱點(diǎn)。本文根據(jù)這方面的應(yīng)用需求提出一種方案。本方案的實(shí)現(xiàn) 的嵌入式硬件以及嵌入式Linux的軟件,采用先進(jìn)的MPEG-4編碼標(biāo)準(zhǔn)。最終實(shí)現(xiàn)一個(gè)具有實(shí)時(shí)視頻采集壓縮及傳輸功能的可以直接接入以太網(wǎng)的網(wǎng)絡(luò)。

          關(guān)鍵詞: Linux MPEG-4 網(wǎng)絡(luò) 流媒體技術(shù)

          1 系統(tǒng)概述

          本方案的是IP網(wǎng)絡(luò)的實(shí)時(shí)視頻采集、處理及傳輸系統(tǒng)。整個(gè)系統(tǒng)在嵌入式軟硬件構(gòu)架上實(shí)現(xiàn),無需其它設(shè)備協(xié)助就能獨(dú)立完成通用目的視頻應(yīng)用,比如視頻監(jiān)控和網(wǎng)絡(luò)視頻會(huì)議。

          1.1 硬件系統(tǒng)概述

          整個(gè)系統(tǒng)除攝像頭部分外都是在 評(píng)估平臺(tái)Sitsang(簡(jiǎn)稱Sitsang板)上面實(shí)現(xiàn)的。Sitsang板以PXA255為核心,配備了大量的硬件資源,其中通信接口中的以太網(wǎng)控制器和USB Host控制器在本系統(tǒng)中尤為重要。Sitsang板采用Standard Microsystems LAN91C96以太網(wǎng)控制器,它通過U52與網(wǎng)絡(luò)相連,支持IEEE802.3的10Mb/s模式。Sitsang板采用Philips ISP1161作為USB Host控制器,使用USB Host接口可以使Sitsang板與視頻采集攝像頭相連。以太網(wǎng)控制器和USB Host控制器通過數(shù)據(jù)總線收發(fā)器(74LVCH32245)以及地址、數(shù)據(jù)總線驅(qū)動(dòng)器(74LVCH32244)與PXA255相接。整個(gè)硬件系統(tǒng)如圖1所示。

          1.2 軟件系統(tǒng)概述

          整個(gè)系統(tǒng)軟件是在嵌入式Linux基礎(chǔ)之上構(gòu)建的。Sitsang板使用的嵌入工Linux內(nèi)核是在linux-2.4.19內(nèi)核上打上patch-2.4.19-sitsang2這個(gè)補(bǔ)丁后編譯而成。Sitsang板使用的文件系統(tǒng)是針對(duì)Flash的無緩沖機(jī)制的jffs2文件系統(tǒng),文件系統(tǒng)中包含應(yīng)用程序、模塊、配置文件、圖形界面和庫(kù)等。Sitsang板使用的是基于Qt/Embedded的圖形界面系統(tǒng)。視頻信號(hào)的采集、壓縮和傳輸是建立在圖形界面和嵌入式Linux內(nèi)核之上的。整個(gè)軟件系統(tǒng)如圖2所示。

          2 系統(tǒng)設(shè)計(jì)

          系統(tǒng)的設(shè)計(jì)目標(biāo)是設(shè)計(jì)一個(gè)工作在Sitsang/ PXA255和嵌和試Linux平臺(tái)上,內(nèi)置視頻Web服務(wù)器,采用MPEG-4編碼標(biāo)準(zhǔn),支持相關(guān)網(wǎng)絡(luò)傳輸協(xié)議的網(wǎng)絡(luò)攝像要。系統(tǒng)的設(shè)計(jì)可以被分為以下幾個(gè)大部分:

          *嵌入式Linux內(nèi)核的移植和編譯,文件系統(tǒng)和圖形界面系統(tǒng)的安裝;

          *基于嵌入式Linux視頻采集模塊的設(shè)計(jì);

          *視頻圖像壓縮模塊的設(shè)計(jì);

          *基于嵌入式Linux的網(wǎng)絡(luò)視頻流服務(wù)模塊的設(shè)計(jì)。

          2.1 Linux內(nèi)核、圖形界面系統(tǒng)及文件系統(tǒng)的安裝

          2.1.1 嵌入式Linux內(nèi)核的定制

          工作在Sitsang板上的嵌入式Linux內(nèi)核的定制步驟與其它嵌入式平臺(tái)的開發(fā)步驟相似,具有一定的通用性,所以在這里將不再詳述,但是要注意兩點(diǎn)。

          ①在解壓縮Linux內(nèi)核源代碼后,假設(shè)源代碼是linux-2.4.19.sar.gz,需要為源代碼打上Sitsang板的支持補(bǔ)丁:%gzip-dc patch-2.4.19-sitsang2.gz|patch-p0。

          ②在使用make menuconfig定制內(nèi)核時(shí),注意要讓內(nèi)核支持USB接口的攝像頭,具體步驟為:在制定菜單中選擇Multimedia devices→Video for Linux,這使得內(nèi)核被配置了Video4Linux,為視頻采集設(shè)備提供了編程接口;在菜單中選擇USB Support→USB Multimedia devices→USB OV511 Camera Support,這使得在內(nèi)核中加入了對(duì)4采用OV511接口芯片的USB數(shù)字?jǐn)z像頭的驅(qū)動(dòng)支持。

          2.1.2 圖形界面系統(tǒng)的編譯與安裝

          Sitsang板使用的是基于Qt/Embedded的圖形界面系統(tǒng),Qt/Embedded的編譯主要分為三個(gè)步驟:

          ①編譯Qt/X11,Qt/X11是運(yùn)行在IBM兼容PC中標(biāo)準(zhǔn)Linux這上的,這主要為Qt/Embedded及其應(yīng)用程序提供圖形編譯環(huán)境及仿真運(yùn)行環(huán)境;

          ②編譯Qt/Embedded,Qt/Embedded為在嵌入式Linux平臺(tái)上運(yùn)行的圖形界面系統(tǒng)及應(yīng)用程序提供一系列的函數(shù)庫(kù);

          ③編譯Qtopia,通過使用Qt/X11提供的編譯工具以及Qt/Embedded提供的函數(shù)庫(kù),編譯出最終基于嵌入式Linux平臺(tái)的圖形界面系統(tǒng)及該環(huán)境下的應(yīng)用程序。

          2.1.3 文件系統(tǒng)的安裝

          在嵌入式平臺(tái)上用作非易失存儲(chǔ)的設(shè)備一般是Flash,因而在嵌入式平臺(tái)上除了廣泛使用的ext2文件系統(tǒng)外,還經(jīng)常使用jffs2文件系統(tǒng)。作為日志型文件系統(tǒng),jffs2直接寫到非易失存儲(chǔ)器上,而不使用如ext2的緩沖機(jī)制,這樣在隨時(shí)斷電的情況下夠保護(hù)用戶的資料。直接使用mkfs.jffs2生成Sitsang板上的jffs2文件系統(tǒng)。

          2.2 基于嵌入式Linux視頻采集模塊的設(shè)計(jì)

          在嵌入式Linux的內(nèi)核定制和編譯階段,已經(jīng)加入了對(duì)Video4Linux模塊以及OV511設(shè)備的支持,所以運(yùn)行在Linux下的視頻圖像采集程序,可以通過Video4Linux模塊提供的編譯接口(API)從OV511設(shè)備中獲取圖像幀。

          ①加載USB及OV511設(shè)備驅(qū)動(dòng)模塊,同時(shí)加載Video4Linux模塊。分別使用命令:modprobe usbcor、modprobe usb-uhci、modprobe vodeodev和modprobe ov511。加載后將生成視頻設(shè)備文件/dev/video0,為了和Video4Linux模塊相協(xié)調(diào),使用ln-s/dev/video0/dev/video為Video4Linux模塊的默認(rèn)視頻設(shè)備voideo與物理視頻設(shè)備video0建立連接。

          ②使用Video4Linux模塊提供的API進(jìn)行視頻采集程序的設(shè)計(jì)。Video4Linux模塊的視頻采集接口設(shè)備為/dev/video,采集程序打開此接口設(shè)備并掃描 它以尋找自己所需要的數(shù)據(jù)。

          這里將簡(jiǎn)要介紹一下Video4Linux模塊提供的主要API函數(shù):VIDICGCAP函數(shù)以數(shù)據(jù)結(jié)構(gòu)video_capability返回視頻采集設(shè)備的性能參數(shù);VIDIOCSFBUF函數(shù)使用數(shù)據(jù)結(jié)構(gòu)video_buffer設(shè)備采集設(shè)備的幀緩存參數(shù),如果設(shè)備不支持幀緩存則此調(diào)用無效;VIDIOCGWIN函數(shù)使用數(shù)據(jù)結(jié)構(gòu)video_window來設(shè)備采集窗口參數(shù),使用參數(shù)1調(diào)用VIDIOCCAPTURE則開始視頻信號(hào)采集,使用參數(shù)0則結(jié)束采集;VDIOCGCHAN函數(shù)用來查詢不同的采集通道(包括音頻信道),使用數(shù)據(jù)結(jié)構(gòu)video_channel返回通道屬性;VIDIOCSPICT函數(shù)使用數(shù)據(jù)結(jié)構(gòu)video_picture來獲取和設(shè)置采集圖像幀的屬性,比較重要的是圖像幀的調(diào)色板參數(shù);read函數(shù)讀取采集通道中效的下一幀圖像,所讀取的圖像格式和尺寸由前面介紹的VIDIOCSPICT函數(shù)和VIDIOCGWIN函數(shù)決定,這些API函數(shù)以及數(shù)據(jù)結(jié)構(gòu)定義在頭文件linux/videodev.h>中。

          整個(gè)視頻采集模塊的工作流程見圖3。

          2.3 視頻圖像壓縮模塊的設(shè)計(jì)

          由視頻采集模塊獲取的視頻圖像需要在以太網(wǎng)上傳輸,為了提高傳輸效率從而提高視頻圖像質(zhì)量,則需要將原始的視頻圖像進(jìn)行壓縮編碼。本系統(tǒng)采用先進(jìn)的MPEG-4標(biāo)準(zhǔn)對(duì)視頻圖像進(jìn)行壓縮編碼,在幾種開放源代碼的MPEG-4編碼軟件中,選擇xvidcore作為本系統(tǒng)中視頻圖像壓縮模塊中的核心算法。xvid是一個(gè)高效的而且具有可移植性的編碼軟件,目前版本為xvidcore-1.0.1。xvid支持Simple Profile和Advanced Profile,支持I/PFrames、B-Frames、Interlacing和GMC,以鉆石和方塊模式來進(jìn)行PMVFast和EPZS運(yùn)行估計(jì),是目前比較流行的MPEG-4編碼軟件。

          對(duì)xvidcore-1.0.1進(jìn)行交叉編譯比較簡(jiǎn)單,有以下主要步驟。

          ①解壓縮xvidcore源代碼:tar-zxvf xvidcore-1.0.1.tar;

          ②設(shè)置環(huán)境變量:export xvidcore="the path of xvidcore";cd $xvidcore/build/generic;

          ③生成makefile:./configure-host=localhostbuild=arm-linux-gcc;

          ④編譯源代碼:make;make install;

          ⑤將交叉編譯生成的庫(kù)文件libxvidcore.so.*拷貝到交叉編譯器工作目錄的lib子目錄中,該庫(kù)文件為系統(tǒng)的其它模塊提供了編程接口。

          2.4 基于嵌入式Linux的網(wǎng)絡(luò)視頻流服務(wù)模塊設(shè)計(jì)

          2.4.1 Linux中流數(shù)據(jù)的操作

          在本設(shè)計(jì)中,數(shù)據(jù)在整個(gè)系統(tǒng)中是以流數(shù)據(jù)的形式存在的,Linux內(nèi)核為流數(shù)據(jù)提供了一個(gè)標(biāo)準(zhǔn)的編程接口,這種接口為數(shù)據(jù)從外部設(shè)備經(jīng)內(nèi)核到達(dá)用戶進(jìn)程提供了一個(gè)全雙工通道。在這個(gè)通道中,數(shù)據(jù)的處理模塊是作為可選的中間件由用戶動(dòng)態(tài)加載的,上面設(shè)計(jì)的視頻壓縮模塊就是這樣的一個(gè)中間件。

          2.4.2 ASF流式文件格式

          本系統(tǒng)主要是用于實(shí)時(shí)視頻應(yīng)用,所以需要系統(tǒng)提供對(duì)流式文件格式的支持,這樣在接收方利用標(biāo)準(zhǔn)的流視頻播放軟件,如MMedia Player就可以觀看實(shí)時(shí)傳輸?shù)囊曨l.在本系統(tǒng)中采用了開放的ASF流格式.壓縮后的視頻數(shù)據(jù)在傳輸前需要對(duì)其進(jìn)行ASF編碼.ASF文件的基本組織單元為ASF對(duì)象,每個(gè)對(duì)象由三個(gè)域組成:對(duì)象標(biāo)識(shí)符域、對(duì)象大小域和對(duì)象數(shù)據(jù)域。ASF文件的高層邏輯結(jié)構(gòu)也包含三部分:頭對(duì)象、數(shù)據(jù)對(duì)象和索引對(duì)象。其中,頭對(duì)象包含了許多全局信息,數(shù)據(jù)對(duì)象則包含了所有待播放的數(shù)據(jù),頭對(duì)象必須在數(shù)據(jù)對(duì)象之間被接收方接收并解釋。

          2.4.3 流視頻協(xié)議

          流視頻協(xié)議是為了在客戶機(jī)和視頻服務(wù)器之間進(jìn)行通信而設(shè)計(jì)和標(biāo)準(zhǔn)化的。根據(jù)它們的功能,與網(wǎng)絡(luò)上流視頻相關(guān)的協(xié)議分為三類。

          *網(wǎng)絡(luò)層協(xié)議:網(wǎng)絡(luò)層協(xié)議提供了基本的網(wǎng)絡(luò)服務(wù)支持。IP就是網(wǎng)絡(luò)上流視頻使用的網(wǎng)絡(luò)協(xié)議。

          *傳輸協(xié)議:傳輸協(xié)議為流服務(wù)提供端對(duì)端的網(wǎng)絡(luò)傳輸功能。TCP、UDP、RTP和RTCP就是網(wǎng)絡(luò)上流視頻使用的傳輸協(xié)議。

          *話路控制協(xié)議:話路控制協(xié)議定義消息和程序。RTSP就是一種話路控制協(xié)議。

          為流視頻設(shè)計(jì)的協(xié)議棧如圖4所示。在發(fā)送方的數(shù)據(jù)面,壓縮且經(jīng)過ASF編碼的視頻數(shù)據(jù)被讀出并在RTP/RTCP/RTSP層上打包,以提供定時(shí)和同步信息以及包的序列號(hào)。然后把這些打包的RTP數(shù)據(jù)流發(fā)送到UDP/TCP層和IP層,得到的IP包在網(wǎng)絡(luò)上傳輸。在接收方則按照相反的方向處理。在控制面,RTCP包和RTSP包在UDP/TCP層上復(fù)用,并且被送到IP層,以便通過網(wǎng)絡(luò)傳輸。

          3 小結(jié)

          本文提出了一種基于Intel PXA255嵌入式微處理器和嵌入式Linux網(wǎng)絡(luò)的設(shè)計(jì)方案,系統(tǒng)采用先進(jìn)的MPEG-4編碼標(biāo)準(zhǔn),得到了較高的壓縮比。經(jīng)測(cè)試、在50Kbps~100Kbps的帶寬下,對(duì)CIF(352288,30fps)格式的視頻有較好的表現(xiàn)能力。滿足了在目前寬帶環(huán)境中的網(wǎng)絡(luò)視頻會(huì)議以及視頻監(jiān)控的要求,其應(yīng)用十分廣泛。



          評(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); })();