摘 要: 研究了一種基于ARM11的視頻采集無線傳輸系統,實現了主體家庭網關通過攝像頭對各個分散房間的有效監控。系統選用ARM11內核的S3C6410作為系統處理器,CMOS攝像頭OV9650作為采集端,在自主設計的硬件平臺上搭建Linux軟件系統,利用系統內部的V4L2提供的數據結構、應用函數等完成攝像頭的采集;在傳輸系統方面,采用傳輸速度較快的WIFI-Ad-Hoc模式(端對端傳輸),依靠TCP/IP協議的傳輸方式使采集端與家庭網關之間建立連接,成功實現家庭網關對各個分散采集點視頻信息的接收。
關鍵詞: 視頻;采集;傳輸;無線網絡;ARM11
在信息、通信不斷發展的今天,人們對生活環境的安全性越來越重視,有效的視頻監控系統為人們解決了這個問題。隨著電子信息技術、網絡技術和多媒體技術的迅速發展,嵌入式的無線視頻監控隨即出現并且飛速發展,整個視頻監控市場朝著集成化、網絡化、數字化和實時化的方向發展,而家庭視頻監控中對采集傳輸的要求越來越高[1]。由于視頻數據信息量大、實時傳輸要求高,因此視頻監控技術中視頻的采集和傳輸顯得尤為重要。而ARM嵌入式系統的小型化、成本低廉、結構緊湊、占用空間小、可裁減性好、支持無線網絡等特點,使得利用ARM11+Linux構成的采集傳輸系統在現實中具有很大的實用價值。
本文針對網絡視頻采集傳輸的實際應用需求,結合圖像采集、無線傳輸和嵌入式系統等新技術,設計了基于ARM11內核S3C6410微處理器的無線視頻傳輸系統,在Linux系統平臺上實現通過遠程控制家庭網關來對各個分散房間環境的有效監控。
1 系統的整體結構
家居視頻采集傳輸系統的整體結構可以分為視頻采集系統和視頻傳輸系統兩個部分。其中家庭網關是視頻采集與傳輸的關鍵,是家庭監控系統的主節點核心設備,視頻采集傳輸的各項命令都需要家庭網關下達。整個系統構成如圖1所示。
家庭網關的中央處理器的選擇方案比較多,考慮到家庭網關的功能和成本,選擇S3C6410微處理器作為基本的中央處理單元完成視頻信息的存儲及傳輸。為了方便采集模塊攝像頭視頻信息的采集處理,選擇功能強大的S3C6410處理器作為采集端的核心,方便家庭網關與采集模塊同時擴展WIFI模塊來建立Ad-Hoc點對點的無線網絡連接,實現視頻的快速、平穩、流暢的傳輸。
整個系統的工作流程如下:
(1)整個系統上電,使房間各個設備處于待機狀態,室內每個房間安裝帶有攝像頭的采集模塊,并且在采集模塊上集成WIFI模塊,家庭主節點(家庭網關)也擴展相同的WIFI模塊,每塊WIFI模塊都設置成Ad-Hoc工作模式;
(2)處于待機狀態的家庭網關接收到用戶的命令,判斷用戶需要哪個房間的具體信息,使家庭網關與所需房間所在攝像頭采集模塊建立連接(兩者通過Ad-Hoc網絡建立連接)。家庭網關發送采集視頻指令給某個房間的采集模塊,相應的采集端接收采集指令使處于待機狀態的采集模塊分析指令,從而開啟攝像頭采集存儲房間的視頻信息;
(3)采集模塊采集視頻信息,根據命令將采集的視頻信息通過TCP/IP的傳輸方式發送到家庭網關,家庭網關根據用戶命令檢測采集是否完成,選擇是否關閉會話,使房間設備處于待機狀態,等待下次采集命令。
2 視頻采集系統的實現
2.1 采集系統硬件設計
采集系統硬件部分設計主要包括微處理器單元S3C6410、電源模塊、CMOS攝像頭采集模塊、SD-WIFI無線網絡模塊、NAND Flash和SDRAM、SD卡等外圍電路模塊等。本系統利用S3C6410處理器控制接收CMOS攝像頭的視頻信號,利用其內部集成的Video4Linux2提供的數據結構、應用函數等完成攝像頭的采集;SD-WIFI模塊建立Ad-hoc端對端網絡連接,通過TCP/IP協議的傳輸方式使采集端與家庭網關之間建立連接,成功實現家庭網關對各個分散采集點視頻信息的接收;在此基礎上,配置了1 GB的NAND Flash,用于存放嵌入式Linux操作系統、應用程序和數據,128 MB的SDRAM內存,用于存放運行程序及攝像頭采集的數據; SD卡用于程序的下載和簡易安裝;整個硬件系統設計統一的電源模塊供電。
整個視頻采集終端中,除了核心處理器S3C6410外,最重要的就是CMOS攝像頭,其中攝像頭的選擇與硬件電路連接是系統硬件設計的關鍵。
CMOS攝像頭是一種采用CMOS圖像傳感器的攝像頭,是數碼設備用來感光成像的部件,集成在被稱做金屬氧化物的半導體材料上。CMOS圖像傳感器可通過CMOS技術將像素陣列與外圍支持電路(如圖像傳感器核心、單一時鐘、所有的時序邏輯、可編程功能和A/D轉換器)集成在同一塊芯片上,具有體積小、重量輕、功耗低、成本低、編程方便、易于控制等優點[2],因此,CMOS圖像傳感器的應用已經變得越來越廣泛。
本設計選用傳感器芯片OV9650。OV9650傳感器具有130萬像素的配置,分辨率可達1 280×1 024,具有標準的SSCB接口和10 bit數據接口,由于S3C6410片內有攝像頭接口外設,所以將OV9650攝像頭芯片直接與處理器攝像頭接口引腳相連,圖像并行傳輸,圖像數據速度明顯提高,CMOS攝像頭電路原理圖如圖2所示。
該芯片支持RGB(4:2:2)、YUV(4:2:2)、YCrCb(4:2:2)三種數據輸出格式,內置138個設備控制寄存器,地址范圍0x00~0x8A,通過SCCB接口可以方便地設置傳感器視窗大小、增益、白平衡校正、曝光控制、飽和度、色調等參數。
2.2 采集模塊軟件實現
系統軟件可以控制實現硬件設備CMOS攝像頭對房間視頻信息的采集、存儲,這里選擇Linux作為操作系統。Linux系統下,對視頻設備的各種操作是通過Video4Linux2(簡稱V4L2)實現的。Video4Linux2是Linux內核中支持影像設備的一組APIs,配合適當的視頻采集設備和相應的驅動程序,可以實現影像采集、AM/FM廣播、頻道切換等功能,在遠程會議、可視電話、視頻監控系統中有著廣泛的應用。V4L2在Linux下進行視頻采集的接口函數主要有open、read、write、select、mmap以及ioctl等,這與普通字符設備的驅動接口形式上都是一致的,但是V4L2為設備控制接口函數ioctl提供了豐富的控制字來實現對設備的管理,管理的內容包括對設備信息的查詢、幀緩沖的設置、圖像屬性的設置、視頻的捕捉等。
在Linux下,所有的外設均被看成是一種特殊文件進行處理,稱之為設備文件。系統調用和各種函數庫直接或間接地提供了內核及應用程序之間的接口,而設備的驅動程序則是內核及外設之間的接口,它完成設備的初始化和釋放、對設備文件的各種操作和對中斷進行處理等各項功能。由于應用程序屏蔽了外設硬件的細節,使得應用程序可以像普通文件一樣對外進行操作而無需關注具體細節[3]。因此,在進行視頻圖像采集之前,必須先加載Video4Linux2模塊為視頻采集設備提供函數接口。同時在內核中,加載采用OV9650接口芯片的CMOS攝像頭的驅動,通過OV9650芯片就可以采集視頻數據并保存在Linux系統中進行數據處理。
Video4Linux2分兩層式架構,最上層為Video4Linux2驅動程序本身,最下層架構則是影像設備的驅動程序。本系統中則是使用V4L2的最上層驅動程序,即V4L2本身所提供給程序開發人員的APIs。Linux系統中把設備看成設備文件,在用戶空間可以通過標準的I/O系統調用函數操作此設備文件,從而達到與設備通信交互的目的。
采集端在接收到家庭網關的采集指令之后開始視頻采集,整個視頻數據采集的流程如圖3所示。
3 視頻傳輸系統的實現
3.1 視頻傳輸模塊設計
3.1.1 傳輸方式選擇
相較于有線網絡的繁瑣,無線網絡漸漸成為家庭網絡的首選。在流行的無線網絡產品中,最為熟悉的網絡標準主要有WIFI、BlueTooth、ZigBee、3G等[4],具體詳見表1。
連接ARM與WIFI模塊常用的硬件接口有SPI、SDIO和USB,其中SPI是大多數微處理器都集成的一種接口,具有硬件連接方便、軟件設計簡單、節省系統資源等特點。本系統采用的WIFI模塊支持SPI和SDIO連接。本系統中采用SPI接口來連接S3C6410處理器,通過CON11針腳引出,它是一個2.0間距的20Pin插針腳,為了配合SDIO使用,該接口還包含1路SPI、2個GPIO。
3.2 視頻數據傳輸的實現
3.2.1 無線傳輸模式的搭建
傳輸模式的搭建可分為兩個部分,一是內核模塊的加載,二是工作模式的設置。內核加載WIFI模塊,通過insmod命令來實現,這里需要加載相應的運行文件,這兩個文件可以在Marvel官方網站下載;設定工作模式之前要先使用ifconfig命令設定目標板的IP地址,然后通過iwconfig命令設置模塊的工作模式和用戶名,為增加安全性,也可以設置相應的密碼。
3.2.2 TCP/IP協議的視頻數據傳輸
TCP(傳輸控制協議)是TCP/IP體系中面向連接的傳輸層協議,它可以保證數據可靠地傳輸。Linux作為一個通用的操作系統,支持所有的網絡協議包括TCP/IP協議。首先,Linux的TCP/IP協議的實現是基于Linux的一整套內核控制機制,如進程調度機制、進程通信機制、軟中斷機制等,一個基于TCP/IP應用程序的執行是一個進程,所以操作系統的支持是顯然的,同時也是必須在操作系統的上述機制的控制下才能得以實現。
應用程序使用傳輸層的TCP協議來完成視頻數據的可靠傳輸,是因為TCP協議能夠保證數據準確完整地、按正確的序列在網絡上傳送到目標地址。TCP協議的特性是能夠提供可靠的、面向連接、字節流傳送服務,TCP 協議能夠在兩個通信的主機之間建立點到點的邏輯連接。TCP實現傳送的過程為:首先在通信雙方-客戶端與服務器之間提供連接,一個TCP客戶與某個給定的服務器建立連接,通過建立的連接與服務器交換數據信息,最后結束連接。本文將采集發送端、接收端看做相應的服務器、客戶端。
在Linux系統中,如果希望通過網絡和其他程序進行通信,就只能通過套接口socket()實現。套接口是一種使用操作系統中的文件描述符和系統進程進行通信的一種方法。Linux支持多種類型的套接口,每種類型的套接口都有自己的尋址方法,這里支持TCP/IP協議的套接口類型是INET。一旦申請了一個套接口以后,就可以利用Linux提供的網絡函數進行網絡編輯[7]。具體傳輸過程如圖5所示。
套接口通信的進程使用的是采集端/家庭網關模式,服務器采集端用來提供服務,家庭網關端則可以使用服務器采集端提供的服務。這里采集端首先創建一個套接口,然后給它指定一個名字。名字的形式取決于套接口的地址簇,事實上也就是采集端的本地地址,系統使用數據結構sockaddr來指定套接口的名字和IP地址。當采集端指定套接口以后,它將監聽與此地址有關的連接請求,而請求的發起者(家庭網關)將會創建一個套接口,然后再創建連接請求并指定采集端的目的地址,對于一個套接口來說,采集端的地址就是它的IP地址和端口號[8],當然,對于不同的采集端所分配的IP地址是在一個網段的不同地址。通信過程中的連接請求必須通過各種協議層,然后等待采集端的監聽套接口,一旦采集端收到了連接請求,它可以接受或者拒絕這個請求。當接受連接請求后,采集端通過accept()響應接受連接,建立起數據連接之后,雙方就會進入傳輸狀態,數據傳輸完畢之后,數據連接有選擇地循環繼續傳輸或者撤銷,如此循環反復,直到會話結束,從而實現將視頻文件從采集端傳送到家庭網關。
以往的嵌入式視頻采集傳輸系統都是在ARM9開發平臺上的,視頻的處理要采用相應多媒體處理設備。而本文采用的ARM11內核自身集成了視頻的采集處理功能,簡化了開發難度,節約了成本。相較于以往有線家居視頻監控系統,本設計采用了比較新穎的無線WIFI監控,傳輸速度快捷,滿足了大視頻數據傳輸的要求。本系統構建了低成本、低功耗、實時性強的無線視頻監控平臺,除應用于家居監控外,還可以用于搭建各種各樣的應用,具有可觀的實用價值。
參考文獻
[1] 郝東東,紀珂.基于S3C2440_Linux的視頻傳輸系統設計[J].計算機光盤軟件與應用,2012(1):141-142.
[2] 丁昊杰,劉敬彪,盛慶華.基于CMOS圖像傳感器的視頻采集系統設計[J].現代電子技術,2012,35(14):178-188.
[3] 郝俊,孟傳良.基于V4L2的ARM11 USB視頻采集終端的設計與實現[J].貴州大學學報,2011,28(4):74-78.
[4] 陳玉坤,李波.基于嵌入式Linux的Ad-Hoc網絡視頻傳輸研究[J].測控技術,2011,30(1):83-86.
[5] 曾磊,張海峰,侯維巖.基于WIFI的無線測控系統的設計與實現[J].電測與儀表,2011,48(7):81-83.
[6] 鄭曉東,王建.基于WIFI技術的無線傳感器網絡節點設計[J].科技研究,2011(7):61-62.
[7] 何勁,謝松巍.基于Socket的TCP/IP網絡通訊模式研究[J].計算機應用與研究,2001,18(8):134-135.
[8] 王鳳純,魯靜.基于RTP/RTCP的音視頻同步方法研究[J].軟件,2011,32(6):78-80.