欒博悅+張鎣+趙慧元
收稿日期:2013-05-27
作者簡介:欒博悅(1990—),男,山東牟平人,學士生,研究方向:電子科學與技術。
文章編號:1003-6199(2014)02-0101-04
摘 要:對基于ARM的視頻數據采集傳輸系統進行研究及設計,通過ARM新一代嵌入式開發平臺,與現在流行的互聯網及無線傳輸技術相結合,實現視頻數據的采集和遠程數據的傳輸。設計中采用嵌入式Linux系統通過USB攝像頭進行視頻數據的采集,解決圖像的格式轉換和MJPEG編碼壓縮的數據處理,以及通過軟件的設計實現MJPEG格式文件到流媒體輸出等問題,最終實現視頻數據采集和傳輸。本系統有以下幾個方面的應用:家庭環境的實時監測、家居的智能化控制、高危車間廠房無線監控與控制、中長距離的家庭視頻通訊、企業實時視頻監控等。
關鍵詞:嵌入式;視頻;數據采集;傳輸
中圖分類號: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 引 言
隨著人們日常生活工作的網絡化,各種系統的無線化,以及多媒體技術、寬帶網絡傳輸技術的不斷發展,視頻數據的采集和傳輸已成為遠程監控和工業自動化控制領域的一項核心技術。在日益成熟的ARM嵌入式開發平臺下,其穩定性也大大提高,通過CMOS攝像頭將視頻信號數字化后再將視頻數據進行壓縮,經由網絡模塊上傳至局域網或互聯網,實現了視頻數據采集傳輸。
2 系統總體設計
整個系統的設計分為三個部分:USB攝像頭、ARM嵌入式開發平臺、網絡模塊。系統整體結構如圖1所示。
系統中所采用的攝像頭是中星微公司生產的ZC301芯片的攝像頭,該攝像頭將CMOS圖像傳感器所產生的圖像信號送到微處理器,處理后再轉換為數字信號輸出到外部設備。ARM嵌入式開發平臺使用了三星公司S3C2440微處理器[1],其最高時鐘頻率為533MHZ,并且平臺包括了256M的NAND Flash、4M NOR Flash、64M SDRAM 和一個USB host接口。USB host接口用于和攝像頭相接。網絡模塊采用DAVICOM公司的以太網控制芯片DM9000CEP [2],該芯片裝配有標準10M/100M自適應收發器,16K大容量FIFO,支持以太網接口協議,當從內存中接收到的壓縮后的碼流數據后,通過TCP/IP網絡通信協議對數據進行打包,如果接收到瀏覽器向服務器的數據訪問請求,則將數據發送至瀏覽器[3]。以太網芯片與嵌入式微處理器S3C2440接口電路如圖2所示。
圖1 系統整體結構
圖2 以太網接口電路
計算技術與自動化2014年6月
第33卷第2期欒博悅等:基于ARM的視頻數據采集傳輸系統的設計與實現
3 系統軟件結構設計
系統的軟件設計主要包括:視頻設備的掛載,視頻數據的采集,數據格式轉換、編碼壓縮,視頻數據傳輸等。本系統的視頻圖像顯示涉及到了顏色空間轉換問題,即對于現代數字圖像傳感器的數據輸出格式一般為YUV/YCbCr 顏色格式對RGB顏色格式的一種轉換。RGB色彩空間,其顏色在三維空間模型的3個軸分別對應著紅(Red)、綠(Green)、藍(Blue),模型內部的點對應不同顏色。YUV空間中顏色的三個分量為亮度Y(Luminance),色度U、V(Chrominance),其中YCbCr也是由YUV經過偏移縮放形成的。具體的轉換關系如下所示[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)
視頻數據的傳輸離不開網絡,但是只有遵循一定的協議才能在網絡中正確的實現數據的傳送。其中TCP/IP(網絡通訊協議)是因特網最基本的協議,也是互聯網絡的基礎。TCP/IP通訊協議采用了4層的層次結構,分別是應用層、傳輸層、網絡層、網絡接口層,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。傳輸層協議主要是傳輸控制協議TCP和用戶數據報協議UDP。應用層協議主要有:FTP、TELNET、HTTP(超文本傳輸協議)等,本系統所用的傳輸層協議是TCP協議,應用層協議為HTTP協議。
3.1 視頻數據采集
系統實現視頻數據采集主要是利用Linux操作系統中通用的Vedio 4 Linux 2接口[5]。Vedio 4 Linux是Linux操作系統中音視頻設備統一的API,同時也可以提供無線電通信、文字電視廣播解碼和垂直消隱的數據接口。通過該接口就可以很方便的將視頻數據進行采集。利用以下程序代碼,可以任意按用戶需要進行配置。
memset(&vd->cap,0,sizeof(struct v4l2_capability));
ret=ioctl(vd>fd,VIDIOC_QUERYCAP, &vd->cap);
獲取攝像頭基本參數
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;
設置視頻幀緩沖區個數
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
將幀緩沖區數據映射到內存
int uvcGrab(struct vdIn *vd);
獲取一幀視頻信號的圖像。
視頻數據采集具體流程如圖3所示。
圖3 視頻采集流程圖
3.2 格式轉換和MJPEG編碼壓縮
由于不同的攝像頭都有不同的輸出格式,所以進行合適的格式轉換是非常有必要的,由攝像頭所采集到的原始數據并不適合用于傳輸,為了減少傳輸視頻數據的碼流大小還需要對圖像進行壓縮。本系統所用的攝像頭輸出YUV 4:2:2格式的圖像數據,將圖像數據轉換為RGB格式,再通過調用Linux下的Libjpeg庫對圖像進行壓縮。
格式轉換以及壓縮處理過程和基本代碼函數名如下:
1)上鎖全局變量的圖像緩沖區(pthread_mutex_Lock)。
2)判斷圖像顏色編碼格式,如果是YUV格式的顏色編碼(以YUV4:2:2為例,調用compress_yuyv_o_jpeg函數)將一行YUV轉換RGB,并將一行RGB壓縮成JPEG格式[6],行加一,判斷圖像是否壓縮到最后一行。如果是MJPEG編碼格式輸出的圖像(調用int memcpy_picture函數),查找起始幀標志位,并插入Huffman數據表。
3)通知所有線程有一幀數據已經處理為JPEG格式。
4)解鎖全局變量的圖像緩沖區。
3.3 視頻數據的傳輸
為了實現能將采集到的視頻數據通過網絡進行傳輸,本系統使用了在Linux下TCP協議的Socket編程[7]。Socket接口是一個在不同進程間的通訊端點,Socket在Linux系統中被看做是一個文件,當客戶端和服務器端的Socket被創建時,服務器端會調用accept()函數,并以阻塞方式等待響應客戶端的連接請求,連接成功后,雙方就可以進行正常的數據通信,通訊結束后,釋放Socket結構。其編程結構如圖4所示。
當有多個客戶端提出請求時還需要建立多線程并發服務器[8],當客戶端提出連接請求時,會建立一個新的線程,這樣每一個客戶端都會有一個獨立的線程,實現多個線程數據的并發。線程可以對進程的內存空間和資源進行訪問,并與同一進程中的其他線程共享數據區。因此,并發服務器線程的增加并不會讓服務器進程隨著客戶端的增加而線性增長,這樣就降低了服務器進程壓力,提高了其性能。代碼如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服務器監聽IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客戶端連接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客戶端申請結構
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客戶端線程創建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
圖4 Linux下TCP協議的Socket編程結構
4 系統運行與實現
由于視頻傳輸數據量大、實時要求高,完成視頻傳輸,鏈路的數據吞吐量必須大于視頻數據流量。測試結果表明,本系統能夠達到穩定的傳輸效果,圖像清晰,視頻無卡頓現象,并支持多個客戶端同時瀏覽頁面,最終實現了視頻數據采集傳輸。系統運行效果如圖5所示。在移動設備和網絡飛速發展的今天,將本系統網絡進行拓展,手機等移動設備也可作為客戶端,隨時隨地的進行遠程監控,這樣也為以后的智能化控制提供了基礎。本設計主要有以下幾個特點:
1)實現了多方式無線局域網視頻數據采集傳輸,可以利用各種無線移動設備對視頻數據實時監控,例如手機、平板電腦等。
2)應用范圍廣、效果好,穩定性高。
3)硬件結構簡單,成本低,體積小,可運用于飛機航拍等一些特殊環境場所。
圖5 系統運行效果圖
參考文獻
[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的嵌入式系統的網絡接口的設計與實現 [J].工業控制計算機 ,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的遠程視頻采集系統設計與實現[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);
獲取攝像頭基本參數
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;
設置視頻幀緩沖區個數
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
將幀緩沖區數據映射到內存
int uvcGrab(struct vdIn *vd);
獲取一幀視頻信號的圖像。
視頻數據采集具體流程如圖3所示。
圖3 視頻采集流程圖
3.2 格式轉換和MJPEG編碼壓縮
由于不同的攝像頭都有不同的輸出格式,所以進行合適的格式轉換是非常有必要的,由攝像頭所采集到的原始數據并不適合用于傳輸,為了減少傳輸視頻數據的碼流大小還需要對圖像進行壓縮。本系統所用的攝像頭輸出YUV 4:2:2格式的圖像數據,將圖像數據轉換為RGB格式,再通過調用Linux下的Libjpeg庫對圖像進行壓縮。
格式轉換以及壓縮處理過程和基本代碼函數名如下:
1)上鎖全局變量的圖像緩沖區(pthread_mutex_Lock)。
2)判斷圖像顏色編碼格式,如果是YUV格式的顏色編碼(以YUV4:2:2為例,調用compress_yuyv_o_jpeg函數)將一行YUV轉換RGB,并將一行RGB壓縮成JPEG格式[6],行加一,判斷圖像是否壓縮到最后一行。如果是MJPEG編碼格式輸出的圖像(調用int memcpy_picture函數),查找起始幀標志位,并插入Huffman數據表。
3)通知所有線程有一幀數據已經處理為JPEG格式。
4)解鎖全局變量的圖像緩沖區。
3.3 視頻數據的傳輸
為了實現能將采集到的視頻數據通過網絡進行傳輸,本系統使用了在Linux下TCP協議的Socket編程[7]。Socket接口是一個在不同進程間的通訊端點,Socket在Linux系統中被看做是一個文件,當客戶端和服務器端的Socket被創建時,服務器端會調用accept()函數,并以阻塞方式等待響應客戶端的連接請求,連接成功后,雙方就可以進行正常的數據通信,通訊結束后,釋放Socket結構。其編程結構如圖4所示。
當有多個客戶端提出請求時還需要建立多線程并發服務器[8],當客戶端提出連接請求時,會建立一個新的線程,這樣每一個客戶端都會有一個獨立的線程,實現多個線程數據的并發。線程可以對進程的內存空間和資源進行訪問,并與同一進程中的其他線程共享數據區。因此,并發服務器線程的增加并不會讓服務器進程隨著客戶端的增加而線性增長,這樣就降低了服務器進程壓力,提高了其性能。代碼如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服務器監聽IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客戶端連接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客戶端申請結構
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客戶端線程創建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
圖4 Linux下TCP協議的Socket編程結構
4 系統運行與實現
由于視頻傳輸數據量大、實時要求高,完成視頻傳輸,鏈路的數據吞吐量必須大于視頻數據流量。測試結果表明,本系統能夠達到穩定的傳輸效果,圖像清晰,視頻無卡頓現象,并支持多個客戶端同時瀏覽頁面,最終實現了視頻數據采集傳輸。系統運行效果如圖5所示。在移動設備和網絡飛速發展的今天,將本系統網絡進行拓展,手機等移動設備也可作為客戶端,隨時隨地的進行遠程監控,這樣也為以后的智能化控制提供了基礎。本設計主要有以下幾個特點:
1)實現了多方式無線局域網視頻數據采集傳輸,可以利用各種無線移動設備對視頻數據實時監控,例如手機、平板電腦等。
2)應用范圍廣、效果好,穩定性高。
3)硬件結構簡單,成本低,體積小,可運用于飛機航拍等一些特殊環境場所。
圖5 系統運行效果圖
參考文獻
[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的嵌入式系統的網絡接口的設計與實現 [J].工業控制計算機 ,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的遠程視頻采集系統設計與實現[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);
獲取攝像頭基本參數
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;
設置視頻幀緩沖區個數
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
將幀緩沖區數據映射到內存
int uvcGrab(struct vdIn *vd);
獲取一幀視頻信號的圖像。
視頻數據采集具體流程如圖3所示。
圖3 視頻采集流程圖
3.2 格式轉換和MJPEG編碼壓縮
由于不同的攝像頭都有不同的輸出格式,所以進行合適的格式轉換是非常有必要的,由攝像頭所采集到的原始數據并不適合用于傳輸,為了減少傳輸視頻數據的碼流大小還需要對圖像進行壓縮。本系統所用的攝像頭輸出YUV 4:2:2格式的圖像數據,將圖像數據轉換為RGB格式,再通過調用Linux下的Libjpeg庫對圖像進行壓縮。
格式轉換以及壓縮處理過程和基本代碼函數名如下:
1)上鎖全局變量的圖像緩沖區(pthread_mutex_Lock)。
2)判斷圖像顏色編碼格式,如果是YUV格式的顏色編碼(以YUV4:2:2為例,調用compress_yuyv_o_jpeg函數)將一行YUV轉換RGB,并將一行RGB壓縮成JPEG格式[6],行加一,判斷圖像是否壓縮到最后一行。如果是MJPEG編碼格式輸出的圖像(調用int memcpy_picture函數),查找起始幀標志位,并插入Huffman數據表。
3)通知所有線程有一幀數據已經處理為JPEG格式。
4)解鎖全局變量的圖像緩沖區。
3.3 視頻數據的傳輸
為了實現能將采集到的視頻數據通過網絡進行傳輸,本系統使用了在Linux下TCP協議的Socket編程[7]。Socket接口是一個在不同進程間的通訊端點,Socket在Linux系統中被看做是一個文件,當客戶端和服務器端的Socket被創建時,服務器端會調用accept()函數,并以阻塞方式等待響應客戶端的連接請求,連接成功后,雙方就可以進行正常的數據通信,通訊結束后,釋放Socket結構。其編程結構如圖4所示。
當有多個客戶端提出請求時還需要建立多線程并發服務器[8],當客戶端提出連接請求時,會建立一個新的線程,這樣每一個客戶端都會有一個獨立的線程,實現多個線程數據的并發。線程可以對進程的內存空間和資源進行訪問,并與同一進程中的其他線程共享數據區。因此,并發服務器線程的增加并不會讓服務器進程隨著客戶端的增加而線性增長,這樣就降低了服務器進程壓力,提高了其性能。代碼如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服務器監聽IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客戶端連接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客戶端申請結構
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客戶端線程創建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
圖4 Linux下TCP協議的Socket編程結構
4 系統運行與實現
由于視頻傳輸數據量大、實時要求高,完成視頻傳輸,鏈路的數據吞吐量必須大于視頻數據流量。測試結果表明,本系統能夠達到穩定的傳輸效果,圖像清晰,視頻無卡頓現象,并支持多個客戶端同時瀏覽頁面,最終實現了視頻數據采集傳輸。系統運行效果如圖5所示。在移動設備和網絡飛速發展的今天,將本系統網絡進行拓展,手機等移動設備也可作為客戶端,隨時隨地的進行遠程監控,這樣也為以后的智能化控制提供了基礎。本設計主要有以下幾個特點:
1)實現了多方式無線局域網視頻數據采集傳輸,可以利用各種無線移動設備對視頻數據實時監控,例如手機、平板電腦等。
2)應用范圍廣、效果好,穩定性高。
3)硬件結構簡單,成本低,體積小,可運用于飛機航拍等一些特殊環境場所。
圖5 系統運行效果圖
參考文獻
[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的嵌入式系統的網絡接口的設計與實現 [J].工業控制計算機 ,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的遠程視頻采集系統設計與實現[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.