欒博悅+張鎣+趙慧元
收稿日期:2013-05-27
作者簡介:欒博悅(1990—),男,山東牟平人,學士生,研究方向:電子科學與技術(shù)。
文章編號:1003-6199(2014)02-0101-04
摘 要:對基于ARM的視頻數(shù)據(jù)采集傳輸系統(tǒng)進行研究及設計,通過ARM新一代嵌入式開發(fā)平臺,與現(xiàn)在流行的互聯(lián)網(wǎng)及無線傳輸技術(shù)相結(jié)合,實現(xiàn)視頻數(shù)據(jù)的采集和遠程數(shù)據(jù)的傳輸。設計中采用嵌入式Linux系統(tǒng)通過USB攝像頭進行視頻數(shù)據(jù)的采集,解決圖像的格式轉(zhuǎn)換和MJPEG編碼壓縮的數(shù)據(jù)處理,以及通過軟件的設計實現(xiàn)MJPEG格式文件到流媒體輸出等問題,最終實現(xiàn)視頻數(shù)據(jù)采集和傳輸。本系統(tǒng)有以下幾個方面的應用:家庭環(huán)境的實時監(jiān)測、家居的智能化控制、高危車間廠房無線監(jiān)控與控制、中長距離的家庭視頻通訊、企業(yè)實時視頻監(jiān)控等。
關(guān)鍵詞:嵌入式;視頻;數(shù)據(jù)采集;傳輸
中圖分類號:TP368文獻標識碼:A
Design and Implementation of Video Data Acquisition and Transmission Based on ARM
LUAN Boyue,ZHANG Ying,ZHAO Huiyuan
(Beijing Institute ofTechnologu,Zhuhai,Guangdong 519085,China)
Abstract:The video data acquisition and transmission based on ARM is discussed in this paper. through a new generation of ARM embedded development plaform,and combined with internet and wireless transmission technology,implementation of video data acquisition and remote data transmission.Usingembedded Linux system through the USB camera for video data collection,solve the image format conversion and MJPEG encoding date processing,designed and implemented through software MJPEG format output files to streaming media,finally achieved of video date acquisition and transmission.This system can be used for real-time monitoring of family environment and home intelligent control,in some highrisk factory workshop wireless monitoring and control ,can also be used in longdistance home video communications and realtime video surveillance in enterprise.
Key words:embedded system;video; data acquisition;transmission
1 引 言
隨著人們?nèi)粘I罟ぷ鞯木W(wǎng)絡化,各種系統(tǒng)的無線化,以及多媒體技術(shù)、寬帶網(wǎng)絡傳輸技術(shù)的不斷發(fā)展,視頻數(shù)據(jù)的采集和傳輸已成為遠程監(jiān)控和工業(yè)自動化控制領(lǐng)域的一項核心技術(shù)。在日益成熟的ARM嵌入式開發(fā)平臺下,其穩(wěn)定性也大大提高,通過CMOS攝像頭將視頻信號數(shù)字化后再將視頻數(shù)據(jù)進行壓縮,經(jīng)由網(wǎng)絡模塊上傳至局域網(wǎng)或互聯(lián)網(wǎng),實現(xiàn)了視頻數(shù)據(jù)采集傳輸。
2 系統(tǒng)總體設計
整個系統(tǒng)的設計分為三個部分:USB攝像頭、ARM嵌入式開發(fā)平臺、網(wǎng)絡模塊。系統(tǒng)整體結(jié)構(gòu)如圖1所示。
系統(tǒng)中所采用的攝像頭是中星微公司生產(chǎn)的ZC301芯片的攝像頭,該攝像頭將CMOS圖像傳感器所產(chǎn)生的圖像信號送到微處理器,處理后再轉(zhuǎn)換為數(shù)字信號輸出到外部設備。ARM嵌入式開發(fā)平臺使用了三星公司S3C2440微處理器[1],其最高時鐘頻率為533MHZ,并且平臺包括了256M的NAND Flash、4M NOR Flash、64M SDRAM 和一個USB host接口。USB host接口用于和攝像頭相接。網(wǎng)絡模塊采用DAVICOM公司的以太網(wǎng)控制芯片DM9000CEP [2],該芯片裝配有標準10M/100M自適應收發(fā)器,16K大容量FIFO,支持以太網(wǎng)接口協(xié)議,當從內(nèi)存中接收到的壓縮后的碼流數(shù)據(jù)后,通過TCP/IP網(wǎng)絡通信協(xié)議對數(shù)據(jù)進行打包,如果接收到瀏覽器向服務器的數(shù)據(jù)訪問請求,則將數(shù)據(jù)發(fā)送至瀏覽器[3]。以太網(wǎng)芯片與嵌入式微處理器S3C2440接口電路如圖2所示。
圖1 系統(tǒng)整體結(jié)構(gòu)
圖2 以太網(wǎng)接口電路
計算技術(shù)與自動化2014年6月
第33卷第2期欒博悅等:基于ARM的視頻數(shù)據(jù)采集傳輸系統(tǒng)的設計與實現(xiàn)
3 系統(tǒng)軟件結(jié)構(gòu)設計
系統(tǒng)的軟件設計主要包括:視頻設備的掛載,視頻數(shù)據(jù)的采集,數(shù)據(jù)格式轉(zhuǎn)換、編碼壓縮,視頻數(shù)據(jù)傳輸?shù)?。本系統(tǒng)的視頻圖像顯示涉及到了顏色空間轉(zhuǎn)換問題,即對于現(xiàn)代數(shù)字圖像傳感器的數(shù)據(jù)輸出格式一般為YUV/YCbCr 顏色格式對RGB顏色格式的一種轉(zhuǎn)換。RGB色彩空間,其顏色在三維空間模型的3個軸分別對應著紅(Red)、綠(Green)、藍(Blue),模型內(nèi)部的點對應不同顏色。YUV空間中顏色的三個分量為亮度Y(Luminance),色度U、V(Chrominance),其中YCbCr也是由YUV經(jīng)過偏移縮放形成的。具體的轉(zhuǎn)換關(guān)系如下所示[4]:
R = 1.164*(Y-16)+1.596*(Cr-128)
G = 1.164*(Y-16)-0.392*(Cb-128)-0.813*(Cr-128)
B = 1.164*(Y-16)+2.017*(Cb-128) (1)
視頻數(shù)據(jù)的傳輸離不開網(wǎng)絡,但是只有遵循一定的協(xié)議才能在網(wǎng)絡中正確的實現(xiàn)數(shù)據(jù)的傳送。其中TCP/IP(網(wǎng)絡通訊協(xié)議)是因特網(wǎng)最基本的協(xié)議,也是互聯(lián)網(wǎng)絡的基礎。TCP/IP通訊協(xié)議采用了4層的層次結(jié)構(gòu),分別是應用層、傳輸層、網(wǎng)絡層、網(wǎng)絡接口層,每一層都呼叫它的下一層所提供的網(wǎng)絡來完成自己的需求。傳輸層協(xié)議主要是傳輸控制協(xié)議TCP和用戶數(shù)據(jù)報協(xié)議UDP。應用層協(xié)議主要有:FTP、TELNET、HTTP(超文本傳輸協(xié)議)等,本系統(tǒng)所用的傳輸層協(xié)議是TCP協(xié)議,應用層協(xié)議為HTTP協(xié)議。
3.1 視頻數(shù)據(jù)采集
系統(tǒng)實現(xiàn)視頻數(shù)據(jù)采集主要是利用Linux操作系統(tǒng)中通用的Vedio 4 Linux 2接口[5]。Vedio 4 Linux是Linux操作系統(tǒng)中音視頻設備統(tǒng)一的API,同時也可以提供無線電通信、文字電視廣播解碼和垂直消隱的數(shù)據(jù)接口。通過該接口就可以很方便的將視頻數(shù)據(jù)進行采集。利用以下程序代碼,可以任意按用戶需要進行配置。
memset(&vd->cap,0,sizeof(struct v4l2_capability));
ret=ioctl(vd>fd,VIDIOC_QUERYCAP, &vd->cap);
獲取攝像頭基本參數(shù)
vd->fmt.fmt.pix.width =vd>width;
捕獲視頻寬度像素
vd->fmt.fmt.pix.height=vd>height;
捕獲視頻高度像素
Struct v4l2_streamparm*setfps;
etfps=(struct v4l2_streamparm*)
calloc(1,sizeof(structv4l2_stre-amparm));
設置視頻幀頻率
memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers));
vd->rb.count = NB_BUFFER;
設置視頻幀緩沖區(qū)個數(shù)
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
將幀緩沖區(qū)數(shù)據(jù)映射到內(nèi)存
int uvcGrab(struct vdIn *vd);
獲取一幀視頻信號的圖像。
視頻數(shù)據(jù)采集具體流程如圖3所示。
圖3 視頻采集流程圖
3.2 格式轉(zhuǎn)換和MJPEG編碼壓縮
由于不同的攝像頭都有不同的輸出格式,所以進行合適的格式轉(zhuǎn)換是非常有必要的,由攝像頭所采集到的原始數(shù)據(jù)并不適合用于傳輸,為了減少傳輸視頻數(shù)據(jù)的碼流大小還需要對圖像進行壓縮。本系統(tǒng)所用的攝像頭輸出YUV 4:2:2格式的圖像數(shù)據(jù),將圖像數(shù)據(jù)轉(zhuǎn)換為RGB格式,再通過調(diào)用Linux下的Libjpeg庫對圖像進行壓縮。
格式轉(zhuǎn)換以及壓縮處理過程和基本代碼函數(shù)名如下:
1)上鎖全局變量的圖像緩沖區(qū)(pthread_mutex_Lock)。
2)判斷圖像顏色編碼格式,如果是YUV格式的顏色編碼(以YUV4:2:2為例,調(diào)用compress_yuyv_o_jpeg函數(shù))將一行YUV轉(zhuǎn)換RGB,并將一行RGB壓縮成JPEG格式[6],行加一,判斷圖像是否壓縮到最后一行。如果是MJPEG編碼格式輸出的圖像(調(diào)用int memcpy_picture函數(shù)),查找起始幀標志位,并插入Huffman數(shù)據(jù)表。
3)通知所有線程有一幀數(shù)據(jù)已經(jīng)處理為JPEG格式。
4)解鎖全局變量的圖像緩沖區(qū)。
3.3 視頻數(shù)據(jù)的傳輸
為了實現(xiàn)能將采集到的視頻數(shù)據(jù)通過網(wǎng)絡進行傳輸,本系統(tǒng)使用了在Linux下TCP協(xié)議的Socket編程[7]。Socket接口是一個在不同進程間的通訊端點,Socket在Linux系統(tǒng)中被看做是一個文件,當客戶端和服務器端的Socket被創(chuàng)建時,服務器端會調(diào)用accept()函數(shù),并以阻塞方式等待響應客戶端的連接請求,連接成功后,雙方就可以進行正常的數(shù)據(jù)通信,通訊結(jié)束后,釋放Socket結(jié)構(gòu)。其編程結(jié)構(gòu)如圖4所示。
當有多個客戶端提出請求時還需要建立多線程并發(fā)服務器[8],當客戶端提出連接請求時,會建立一個新的線程,這樣每一個客戶端都會有一個獨立的線程,實現(xiàn)多個線程數(shù)據(jù)的并發(fā)。線程可以對進程的內(nèi)存空間和資源進行訪問,并與同一進程中的其他線程共享數(shù)據(jù)區(qū)。因此,并發(fā)服務器線程的增加并不會讓服務器進程隨著客戶端的增加而線性增長,這樣就降低了服務器進程壓力,提高了其性能。代碼如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服務器監(jiān)聽IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客戶端連接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客戶端申請結(jié)構(gòu)
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客戶端線程創(chuàng)建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
圖4 Linux下TCP協(xié)議的Socket編程結(jié)構(gòu)
4 系統(tǒng)運行與實現(xiàn)
由于視頻傳輸數(shù)據(jù)量大、實時要求高,完成視頻傳輸,鏈路的數(shù)據(jù)吞吐量必須大于視頻數(shù)據(jù)流量。測試結(jié)果表明,本系統(tǒng)能夠達到穩(wěn)定的傳輸效果,圖像清晰,視頻無卡頓現(xiàn)象,并支持多個客戶端同時瀏覽頁面,最終實現(xiàn)了視頻數(shù)據(jù)采集傳輸。系統(tǒng)運行效果如圖5所示。在移動設備和網(wǎng)絡飛速發(fā)展的今天,將本系統(tǒng)網(wǎng)絡進行拓展,手機等移動設備也可作為客戶端,隨時隨地的進行遠程監(jiān)控,這樣也為以后的智能化控制提供了基礎。本設計主要有以下幾個特點:
1)實現(xiàn)了多方式無線局域網(wǎng)視頻數(shù)據(jù)采集傳輸,可以利用各種無線移動設備對視頻數(shù)據(jù)實時監(jiān)控,例如手機、平板電腦等。
2)應用范圍廣、效果好,穩(wěn)定性高。
3)硬件結(jié)構(gòu)簡單,成本低,體積小,可運用于飛機航拍等一些特殊環(huán)境場所。
圖5 系統(tǒng)運行效果圖
參考文獻
[1] SamsungElectronics S3C24 10X 32- BIT RISC MIC R O P R E SSO R SRSMANA L . Revision 1.2.Pu blication Number:21.2-S3-C 24 10-052003 ,May 2005.
[2] 韓超,王可人.基于DM9000的嵌入式系統(tǒng)的網(wǎng)絡接口的設計與實現(xiàn) [J].工業(yè)控制計算機 ,2005,20(4):17-18.
[3] BATCHAEVSS.Computer assisted monitoring systems use of computer network sandinter nettechnologies[J].BiomediealEngineering,2005,9(4):161-166.
[4] GENESIS MICROCHIP. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34.
[5] 李珊珊,王緒國.基于V4L2的遠程視頻采集系統(tǒng)設計與實現(xiàn)[D].武漢:武漢理工大學,2011.
[6] JTC 1/SC29/WG 1.ISO/IEC CD29199-2: 2010 JPEG XR image coding Specification[S]. ISO/IEC:2010.
[7] GUHA S,FRANCIS P.Characterization and Measurement of TCP Traversal Through NATs and FireWalls[C] //Proc of Internet Measurement Conference,2005-10.
[8] GYU SANG CHOI,J inHaKim,Deniz Ersoz,SO.A multithreaded P IPEL lNED Web server architecture for SMP/SoC machines[C].Proceedings of the 14 th internationaleonference onWorldWideWeb,ACM Press 2005:730-739.
memset(&vd->cap,0,sizeof(struct v4l2_capability));
ret=ioctl(vd>fd,VIDIOC_QUERYCAP, &vd->cap);
獲取攝像頭基本參數(shù)
vd->fmt.fmt.pix.width =vd>width;
捕獲視頻寬度像素
vd->fmt.fmt.pix.height=vd>height;
捕獲視頻高度像素
Struct v4l2_streamparm*setfps;
etfps=(struct v4l2_streamparm*)
calloc(1,sizeof(structv4l2_stre-amparm));
設置視頻幀頻率
memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers));
vd->rb.count = NB_BUFFER;
設置視頻幀緩沖區(qū)個數(shù)
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
將幀緩沖區(qū)數(shù)據(jù)映射到內(nèi)存
int uvcGrab(struct vdIn *vd);
獲取一幀視頻信號的圖像。
視頻數(shù)據(jù)采集具體流程如圖3所示。
圖3 視頻采集流程圖
3.2 格式轉(zhuǎn)換和MJPEG編碼壓縮
由于不同的攝像頭都有不同的輸出格式,所以進行合適的格式轉(zhuǎn)換是非常有必要的,由攝像頭所采集到的原始數(shù)據(jù)并不適合用于傳輸,為了減少傳輸視頻數(shù)據(jù)的碼流大小還需要對圖像進行壓縮。本系統(tǒng)所用的攝像頭輸出YUV 4:2:2格式的圖像數(shù)據(jù),將圖像數(shù)據(jù)轉(zhuǎn)換為RGB格式,再通過調(diào)用Linux下的Libjpeg庫對圖像進行壓縮。
格式轉(zhuǎn)換以及壓縮處理過程和基本代碼函數(shù)名如下:
1)上鎖全局變量的圖像緩沖區(qū)(pthread_mutex_Lock)。
2)判斷圖像顏色編碼格式,如果是YUV格式的顏色編碼(以YUV4:2:2為例,調(diào)用compress_yuyv_o_jpeg函數(shù))將一行YUV轉(zhuǎn)換RGB,并將一行RGB壓縮成JPEG格式[6],行加一,判斷圖像是否壓縮到最后一行。如果是MJPEG編碼格式輸出的圖像(調(diào)用int memcpy_picture函數(shù)),查找起始幀標志位,并插入Huffman數(shù)據(jù)表。
3)通知所有線程有一幀數(shù)據(jù)已經(jīng)處理為JPEG格式。
4)解鎖全局變量的圖像緩沖區(qū)。
3.3 視頻數(shù)據(jù)的傳輸
為了實現(xiàn)能將采集到的視頻數(shù)據(jù)通過網(wǎng)絡進行傳輸,本系統(tǒng)使用了在Linux下TCP協(xié)議的Socket編程[7]。Socket接口是一個在不同進程間的通訊端點,Socket在Linux系統(tǒng)中被看做是一個文件,當客戶端和服務器端的Socket被創(chuàng)建時,服務器端會調(diào)用accept()函數(shù),并以阻塞方式等待響應客戶端的連接請求,連接成功后,雙方就可以進行正常的數(shù)據(jù)通信,通訊結(jié)束后,釋放Socket結(jié)構(gòu)。其編程結(jié)構(gòu)如圖4所示。
當有多個客戶端提出請求時還需要建立多線程并發(fā)服務器[8],當客戶端提出連接請求時,會建立一個新的線程,這樣每一個客戶端都會有一個獨立的線程,實現(xiàn)多個線程數(shù)據(jù)的并發(fā)。線程可以對進程的內(nèi)存空間和資源進行訪問,并與同一進程中的其他線程共享數(shù)據(jù)區(qū)。因此,并發(fā)服務器線程的增加并不會讓服務器進程隨著客戶端的增加而線性增長,這樣就降低了服務器進程壓力,提高了其性能。代碼如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服務器監(jiān)聽IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客戶端連接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客戶端申請結(jié)構(gòu)
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客戶端線程創(chuàng)建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
圖4 Linux下TCP協(xié)議的Socket編程結(jié)構(gòu)
4 系統(tǒng)運行與實現(xiàn)
由于視頻傳輸數(shù)據(jù)量大、實時要求高,完成視頻傳輸,鏈路的數(shù)據(jù)吞吐量必須大于視頻數(shù)據(jù)流量。測試結(jié)果表明,本系統(tǒng)能夠達到穩(wěn)定的傳輸效果,圖像清晰,視頻無卡頓現(xiàn)象,并支持多個客戶端同時瀏覽頁面,最終實現(xiàn)了視頻數(shù)據(jù)采集傳輸。系統(tǒng)運行效果如圖5所示。在移動設備和網(wǎng)絡飛速發(fā)展的今天,將本系統(tǒng)網(wǎng)絡進行拓展,手機等移動設備也可作為客戶端,隨時隨地的進行遠程監(jiān)控,這樣也為以后的智能化控制提供了基礎。本設計主要有以下幾個特點:
1)實現(xiàn)了多方式無線局域網(wǎng)視頻數(shù)據(jù)采集傳輸,可以利用各種無線移動設備對視頻數(shù)據(jù)實時監(jiān)控,例如手機、平板電腦等。
2)應用范圍廣、效果好,穩(wěn)定性高。
3)硬件結(jié)構(gòu)簡單,成本低,體積小,可運用于飛機航拍等一些特殊環(huán)境場所。
圖5 系統(tǒng)運行效果圖
參考文獻
[1] SamsungElectronics S3C24 10X 32- BIT RISC MIC R O P R E SSO R SRSMANA L . Revision 1.2.Pu blication Number:21.2-S3-C 24 10-052003 ,May 2005.
[2] 韓超,王可人.基于DM9000的嵌入式系統(tǒng)的網(wǎng)絡接口的設計與實現(xiàn) [J].工業(yè)控制計算機 ,2005,20(4):17-18.
[3] BATCHAEVSS.Computer assisted monitoring systems use of computer network sandinter nettechnologies[J].BiomediealEngineering,2005,9(4):161-166.
[4] GENESIS MICROCHIP. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34.
[5] 李珊珊,王緒國.基于V4L2的遠程視頻采集系統(tǒng)設計與實現(xiàn)[D].武漢:武漢理工大學,2011.
[6] JTC 1/SC29/WG 1.ISO/IEC CD29199-2: 2010 JPEG XR image coding Specification[S]. ISO/IEC:2010.
[7] GUHA S,FRANCIS P.Characterization and Measurement of TCP Traversal Through NATs and FireWalls[C] //Proc of Internet Measurement Conference,2005-10.
[8] GYU SANG CHOI,J inHaKim,Deniz Ersoz,SO.A multithreaded P IPEL lNED Web server architecture for SMP/SoC machines[C].Proceedings of the 14 th internationaleonference onWorldWideWeb,ACM Press 2005:730-739.
memset(&vd->cap,0,sizeof(struct v4l2_capability));
ret=ioctl(vd>fd,VIDIOC_QUERYCAP, &vd->cap);
獲取攝像頭基本參數(shù)
vd->fmt.fmt.pix.width =vd>width;
捕獲視頻寬度像素
vd->fmt.fmt.pix.height=vd>height;
捕獲視頻高度像素
Struct v4l2_streamparm*setfps;
etfps=(struct v4l2_streamparm*)
calloc(1,sizeof(structv4l2_stre-amparm));
設置視頻幀頻率
memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers));
vd->rb.count = NB_BUFFER;
設置視頻幀緩沖區(qū)個數(shù)
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
將幀緩沖區(qū)數(shù)據(jù)映射到內(nèi)存
int uvcGrab(struct vdIn *vd);
獲取一幀視頻信號的圖像。
視頻數(shù)據(jù)采集具體流程如圖3所示。
圖3 視頻采集流程圖
3.2 格式轉(zhuǎn)換和MJPEG編碼壓縮
由于不同的攝像頭都有不同的輸出格式,所以進行合適的格式轉(zhuǎn)換是非常有必要的,由攝像頭所采集到的原始數(shù)據(jù)并不適合用于傳輸,為了減少傳輸視頻數(shù)據(jù)的碼流大小還需要對圖像進行壓縮。本系統(tǒng)所用的攝像頭輸出YUV 4:2:2格式的圖像數(shù)據(jù),將圖像數(shù)據(jù)轉(zhuǎn)換為RGB格式,再通過調(diào)用Linux下的Libjpeg庫對圖像進行壓縮。
格式轉(zhuǎn)換以及壓縮處理過程和基本代碼函數(shù)名如下:
1)上鎖全局變量的圖像緩沖區(qū)(pthread_mutex_Lock)。
2)判斷圖像顏色編碼格式,如果是YUV格式的顏色編碼(以YUV4:2:2為例,調(diào)用compress_yuyv_o_jpeg函數(shù))將一行YUV轉(zhuǎn)換RGB,并將一行RGB壓縮成JPEG格式[6],行加一,判斷圖像是否壓縮到最后一行。如果是MJPEG編碼格式輸出的圖像(調(diào)用int memcpy_picture函數(shù)),查找起始幀標志位,并插入Huffman數(shù)據(jù)表。
3)通知所有線程有一幀數(shù)據(jù)已經(jīng)處理為JPEG格式。
4)解鎖全局變量的圖像緩沖區(qū)。
3.3 視頻數(shù)據(jù)的傳輸
為了實現(xiàn)能將采集到的視頻數(shù)據(jù)通過網(wǎng)絡進行傳輸,本系統(tǒng)使用了在Linux下TCP協(xié)議的Socket編程[7]。Socket接口是一個在不同進程間的通訊端點,Socket在Linux系統(tǒng)中被看做是一個文件,當客戶端和服務器端的Socket被創(chuàng)建時,服務器端會調(diào)用accept()函數(shù),并以阻塞方式等待響應客戶端的連接請求,連接成功后,雙方就可以進行正常的數(shù)據(jù)通信,通訊結(jié)束后,釋放Socket結(jié)構(gòu)。其編程結(jié)構(gòu)如圖4所示。
當有多個客戶端提出請求時還需要建立多線程并發(fā)服務器[8],當客戶端提出連接請求時,會建立一個新的線程,這樣每一個客戶端都會有一個獨立的線程,實現(xiàn)多個線程數(shù)據(jù)的并發(fā)。線程可以對進程的內(nèi)存空間和資源進行訪問,并與同一進程中的其他線程共享數(shù)據(jù)區(qū)。因此,并發(fā)服務器線程的增加并不會讓服務器進程隨著客戶端的增加而線性增長,這樣就降低了服務器進程壓力,提高了其性能。代碼如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服務器監(jiān)聽IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客戶端連接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客戶端申請結(jié)構(gòu)
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客戶端線程創(chuàng)建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
圖4 Linux下TCP協(xié)議的Socket編程結(jié)構(gòu)
4 系統(tǒng)運行與實現(xiàn)
由于視頻傳輸數(shù)據(jù)量大、實時要求高,完成視頻傳輸,鏈路的數(shù)據(jù)吞吐量必須大于視頻數(shù)據(jù)流量。測試結(jié)果表明,本系統(tǒng)能夠達到穩(wěn)定的傳輸效果,圖像清晰,視頻無卡頓現(xiàn)象,并支持多個客戶端同時瀏覽頁面,最終實現(xiàn)了視頻數(shù)據(jù)采集傳輸。系統(tǒng)運行效果如圖5所示。在移動設備和網(wǎng)絡飛速發(fā)展的今天,將本系統(tǒng)網(wǎng)絡進行拓展,手機等移動設備也可作為客戶端,隨時隨地的進行遠程監(jiān)控,這樣也為以后的智能化控制提供了基礎。本設計主要有以下幾個特點:
1)實現(xiàn)了多方式無線局域網(wǎng)視頻數(shù)據(jù)采集傳輸,可以利用各種無線移動設備對視頻數(shù)據(jù)實時監(jiān)控,例如手機、平板電腦等。
2)應用范圍廣、效果好,穩(wěn)定性高。
3)硬件結(jié)構(gòu)簡單,成本低,體積小,可運用于飛機航拍等一些特殊環(huán)境場所。
圖5 系統(tǒng)運行效果圖
參考文獻
[1] SamsungElectronics S3C24 10X 32- BIT RISC MIC R O P R E SSO R SRSMANA L . Revision 1.2.Pu blication Number:21.2-S3-C 24 10-052003 ,May 2005.
[2] 韓超,王可人.基于DM9000的嵌入式系統(tǒng)的網(wǎng)絡接口的設計與實現(xiàn) [J].工業(yè)控制計算機 ,2005,20(4):17-18.
[3] BATCHAEVSS.Computer assisted monitoring systems use of computer network sandinter nettechnologies[J].BiomediealEngineering,2005,9(4):161-166.
[4] GENESIS MICROCHIP. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34.
[5] 李珊珊,王緒國.基于V4L2的遠程視頻采集系統(tǒng)設計與實現(xiàn)[D].武漢:武漢理工大學,2011.
[6] JTC 1/SC29/WG 1.ISO/IEC CD29199-2: 2010 JPEG XR image coding Specification[S]. ISO/IEC:2010.
[7] GUHA S,FRANCIS P.Characterization and Measurement of TCP Traversal Through NATs and FireWalls[C] //Proc of Internet Measurement Conference,2005-10.
[8] GYU SANG CHOI,J inHaKim,Deniz Ersoz,SO.A multithreaded P IPEL lNED Web server architecture for SMP/SoC machines[C].Proceedings of the 14 th internationaleonference onWorldWideWeb,ACM Press 2005:730-739.