国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于S3C2440的視頻采集及傳輸系統(tǒng)設(shè)計(jì)

2013-12-30 09:48:24王建新
電子器件 2013年3期
關(guān)鍵詞:內(nèi)核嵌入式攝像頭

王建新,張 凱,王 秀

(西安科技大學(xué)雁塔校區(qū)通信與信息工程學(xué)院,西安710054)

目前,各種視頻采集以及傳輸?shù)南到y(tǒng)都是由DSP(圖像處理),ARM(圖像顯示)以及利用FPGA搭建整個(gè)框架[1],這樣會(huì)造成資源嚴(yán)重浪費(fèi),并且成本較大。隨著嵌入式技術(shù)的迅猛發(fā)展,利用嵌入式實(shí)現(xiàn)遠(yuǎn)程視頻采集、可視電話會(huì)議等應(yīng)用已經(jīng)成為可能。

本文基于 S3C2440和 Linux系統(tǒng)平臺(tái),采用USB攝像頭捕捉視頻信號(hào),利用V4L2應(yīng)用編程接口函數(shù),實(shí)現(xiàn)了視頻連續(xù)幀圖像的采集,并利用TCP傳輸方式傳輸給服務(wù)器端,實(shí)現(xiàn)對(duì)嵌入式視頻遠(yuǎn)程傳輸。開發(fā)的終端具有體積小,功耗低,適用于便攜式視頻采集需要。

1 視頻采集傳輸系統(tǒng)的軟硬件架構(gòu)

本文以三星公司S3C2440為硬件平臺(tái),其片上64 M SDRAM可以滿足視頻采集軟件的內(nèi)存需要,256 M NAND FlLASH用于存放文件和系統(tǒng),3個(gè)通道的UART等控制器和豐富的接口,使其擴(kuò)展功能強(qiáng)大,功耗低,簡(jiǎn)單穩(wěn)定符合要求。整個(gè)硬件框架如圖1所示。

圖1 系統(tǒng)硬件架構(gòu)

視頻采集傳輸系統(tǒng)軟件架構(gòu)由以下部分組成:USB(ZC301)攝像頭,攝像頭驅(qū)動(dòng),視頻采集應(yīng)用程序,視頻傳輸,視頻顯示組成。如圖2所示。

圖2 視頻采集傳輸系統(tǒng)軟件構(gòu)架

USB攝像頭進(jìn)行采集圖像數(shù)據(jù),采集圖像格式為MJPE,采集應(yīng)用程序通過(guò)攝像頭驅(qū)動(dòng)從攝像頭獲得采集的圖像數(shù)據(jù)。利用V4L2接口函數(shù)對(duì)設(shè)備采集的數(shù)據(jù)進(jìn)行操作,最后通過(guò)網(wǎng)絡(luò)傳輸(TCP)將數(shù)據(jù)傳輸給PC機(jī)進(jìn)行顯示[2]。

2 視頻采集應(yīng)用程序開發(fā)

Linu系統(tǒng)具有開源性,高可靠性和強(qiáng)大的網(wǎng)絡(luò)功能等特點(diǎn)。在此基于linux2.6內(nèi)核,對(duì)其進(jìn)行裁剪和配置,使內(nèi)核支持USB驅(qū)動(dòng)和V4L2標(biāo)準(zhǔn),建立交叉編譯環(huán)境,移植編譯好的內(nèi)核到目標(biāo)板,以構(gòu)建linux文件系統(tǒng),進(jìn)行視頻采集傳輸應(yīng)用程序的開發(fā)。

在linux系統(tǒng)下,圖像采集設(shè)備依賴于V4L2(Video 4 linux 2)標(biāo)準(zhǔn)支持,它針對(duì)linux內(nèi)核視頻設(shè)備提供了一系列API接口函數(shù)[3],視頻采集流程如圖3所示。

①打開視頻設(shè)備

在V4L2中,視頻設(shè)備被看作一個(gè)文件。使用open()函數(shù)以阻塞模式打開攝像頭設(shè)備,函數(shù)格式為:

open()函數(shù)中包含兩個(gè)參數(shù),第1個(gè)參數(shù)代表打開的設(shè)備文件名,第2個(gè)參數(shù)代表設(shè)備的打開類型(讀/寫,阻塞或非阻塞),返回值為文件描述符fd,若返回值為大于0,則打開設(shè)備正確;若返回值為-1,則打開設(shè)備錯(cuò)誤。

②初始化設(shè)備,包括獲取設(shè)備信息,設(shè)置設(shè)備格式,函數(shù)格式為:

圖3 視頻采集流程

③設(shè)置視頻捕獲格式

當(dāng)檢測(cè)完視頻設(shè)備支持的標(biāo)準(zhǔn)后,還需要設(shè)定視頻捕獲格式,函數(shù)格式如下:

④分配內(nèi)存

向驅(qū)動(dòng)申請(qǐng)幀緩沖,一般不超過(guò)5個(gè)。使用ioctl命令字VIDIOC_REQBUFS來(lái)調(diào)用struct v4l2_requestbuffers,v4l2_requestbuffers結(jié)構(gòu)中定義了緩存的數(shù)量,驅(qū)動(dòng)會(huì)據(jù)此申請(qǐng)對(duì)應(yīng)數(shù)量的視頻緩存。

⑤獲取并記錄緩存的物理空間

使用VIDIOC_REQBUFS,獲取兩個(gè)緩存,并通過(guò)調(diào)用VIDIOC_QUERYBUF命令來(lái)獲取這些緩存的地址,再使用mmap()函數(shù)轉(zhuǎn)換成應(yīng)用程序中的絕對(duì)地址,最后把這段緩存放入緩存隊(duì)列。使用V4L2進(jìn)行圖像采集時(shí)候,在一幀緩沖完成之后,都會(huì)將第二幀覆蓋到另一個(gè)緩存中,req.count個(gè)緩存輪流使用,不丟數(shù)據(jù)。函數(shù)格式如下:

ioctl(fd,VIDIOC_QUERYBUF,&buf);//獲取到對(duì)應(yīng)index的緩存信息,此處主要利用length信息及offset信息來(lái)完成后面的mmap操作。與用戶空間傳遞數(shù)據(jù)的一個(gè)中介,會(huì)被循環(huán)利用。

⑥圖像數(shù)據(jù)采集

V4L2有三種視頻圖像采集方式:read()、write()方式,內(nèi)存映射方式和用戶指針方式。

本文采用的內(nèi)存映射方式是在內(nèi)核空間開辟一段地址空間,通過(guò)mmap()系統(tǒng)調(diào)用將其映謝到地址空間。

圖像采集過(guò)程中需要使用兩個(gè)ioctl的命令:即VIDIOC_DQBUF和VIDIOC_QBUF命令。函數(shù)格式為:

在配置內(nèi)核時(shí)候,對(duì)USB驅(qū)動(dòng)初始化,我們加上V4L2,并修改.config文件,支持ZC301攝像頭,然后進(jìn)行編譯成內(nèi)核鏡像。

3 視頻傳輸應(yīng)用程序

常用的圖像傳輸協(xié)議有TCP協(xié)議和UDP協(xié)議。

TCP是傳輸控制協(xié)議,是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層通信協(xié)議。UDP即用戶數(shù)據(jù)報(bào)協(xié)議,是一種無(wú)連接協(xié)議,傳輸數(shù)據(jù)之前客戶端和服務(wù)器端不建立連接[4]。

在傳輸過(guò)程中,TCP在丟包方面比UDP嚴(yán)密,不容易丟包。因此本文為利用TCP協(xié)議來(lái)傳輸數(shù)據(jù),首先初始化攝像頭利用V4L2接口,連接到linux系統(tǒng)的公用協(xié)議標(biāo)準(zhǔn),然后將數(shù)據(jù)存放至緩沖區(qū),產(chǎn)生數(shù)據(jù)包,并且將數(shù)據(jù)包利用TCP傳輸,最后傳輸?shù)?PC 機(jī)并顯示出來(lái)[5]。

在linux中網(wǎng)絡(luò)編程是通過(guò)socket接口來(lái)進(jìn)行的。Socket是一種常用的進(jìn)程之間的通信機(jī)制。TCP協(xié)議下的socket編程流程圖,如圖4所示。

Socket編程基本函數(shù)有 socket()、bind()、listen()、accept()、Send()以及 Recv()等,其中根據(jù)客戶端還是服務(wù)器,這些函數(shù)的調(diào)用流程有所區(qū)別,這里對(duì)每個(gè)函數(shù)進(jìn)行簡(jiǎn)明:

圖4 TCP協(xié)議socket編程流程圖

Socket():該函數(shù)用于建立一個(gè)socket連接,可以指定socket類型信息,對(duì)結(jié)構(gòu)體sockaddr_in初始化:包含地址族,端口號(hào),IP地址等;

Bind()該函數(shù)用于將本地IP地址綁定到端口號(hào),若綁定其他IP地址則不成功。另外還用于TP連接;

Listen():服務(wù)端程序成功建立套接字和地址進(jìn)行綁定之后,還需要準(zhǔn)備在該套接字上接受新的連接請(qǐng)求;

Accept():調(diào)用accept()函數(shù)等待并且接收客戶端的連接請(qǐng)求;

Connect():用于與服務(wù)器建立連接;

Send()與Recv():分別用于發(fā)送和接收數(shù)據(jù)。

4 測(cè)試結(jié)果

搭建目標(biāo)機(jī)linux2.6.32運(yùn)行環(huán)境,并且通過(guò)宿主機(jī)使用交叉編譯器連接生成可執(zhí)行文件,向目標(biāo)機(jī)移植后運(yùn)行。

將USB攝像頭同目標(biāo)機(jī)連接好了之后,若成功掛載USB攝像頭,則終端下會(huì)顯示識(shí)別USB設(shè)備,如圖5所示。

圖5 USB攝像頭驅(qū)動(dòng)測(cè)試結(jié)果

對(duì)整個(gè)系統(tǒng)進(jìn)行測(cè)試,該系統(tǒng)在傳輸320×240大小并以MJPEG編碼的視頻時(shí),視頻監(jiān)控服務(wù)器端觀察圖像流暢并且清晰,足夠滿足視頻監(jiān)控需求,如圖6所示。

圖6 系統(tǒng)測(cè)試結(jié)果

5 結(jié)論

本文提出一種基于S3C2440平臺(tái)和嵌入式linux系統(tǒng)的C/S模型視頻采集和傳輸方案,采用普通市面上的USB攝像頭,極大的降低了成本,利用socket編程實(shí)現(xiàn)TCP網(wǎng)絡(luò)傳輸過(guò)程,經(jīng)測(cè)試,服務(wù)器端可以實(shí)時(shí)的接受到采集傳輸?shù)囊曨l,圖像清晰,滿足視頻監(jiān)控要求。

[1]周立功.ARM&WinCE實(shí)驗(yàn)與實(shí)踐—基于S3C2410[M].北京:北京航空航天大學(xué)出版社,2007.

[2]王培珍,徐俊生.基于ARM9的嵌入式linux圖像采集設(shè)計(jì)系統(tǒng)[J].中國(guó)制造業(yè)信息化,2007,10:85-88

[3]李新峰,何廣生,趙秀文.基于ARM9的嵌入式Linux開發(fā)技術(shù)[M].北京:電子工業(yè)出版社,2008,10:118-127

[4]陳文智.嵌入式系統(tǒng)開發(fā)原理與實(shí)踐[M].北京:清華大學(xué)出版社,2005.

[5]怯肇乾.嵌入式網(wǎng)絡(luò)通信開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2010.

[6]吳明暉.基于ARM的嵌入式系統(tǒng)開發(fā)和應(yīng)用[M].北京:人民郵電出版社,2005.

[7]江湖,蘇詳芳,劉立海,等.基于網(wǎng)絡(luò)的數(shù)字視頻監(jiān)控系統(tǒng)[J].武漢大學(xué)學(xué)報(bào)(自然科學(xué)版),2000,46(5):608-612.

[8]Lu Yinli,Yu Hongli,Zhang Pengpeng.The Implementation of Embedded Image Acquisition Based on V4L2[C]//Electronics,Communications and Control(ICECC),2011 International Conference.Heng yang,China.2011:549-552

猜你喜歡
內(nèi)核嵌入式攝像頭
浙江首試公路非現(xiàn)場(chǎng)執(zhí)法新型攝像頭
萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
攝像頭連接器可提供360°視角圖像
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
搭建基于Qt的嵌入式開發(fā)平臺(tái)
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
奔馳360°攝像頭系統(tǒng)介紹
Altera加入嵌入式視覺聯(lián)盟
张家口市| 海阳市| 神池县| 南乐县| 武隆县| 随州市| 阿图什市| 沾益县| 安国市| 永德县| 深州市| 周口市| 西畴县| 贵溪市| 清新县| 宁陕县| 秦皇岛市| 桐城市| 荆州市| 遂溪县| 十堰市| 安阳市| 夏津县| 上高县| 瑞金市| 永清县| 广南县| 高密市| 三江| 弥渡县| 闽清县| 岐山县| 布拖县| 凤台县| 黑水县| 枞阳县| 沙坪坝区| 潞城市| 霍州市| 铜山县| 伊春市|