方曉翠, 周淵平, 王小紅
(四川大學(xué) 電子信息學(xué)院,四川 成都 610065)
近年來,隨著計算機、網(wǎng)絡(luò)以及圖像處理、傳輸技術(shù)的飛速發(fā)展,視頻監(jiān)控傳輸技術(shù)得到了顯著的發(fā)展。與此同時,嵌入式設(shè)備也以其功能強,實時性好、資源占用量小,受到了越來越多人的關(guān)注,在嵌入式設(shè)備上進行視頻傳輸和監(jiān)控的開發(fā)已逐漸成為一種趨勢[1]。但是目前已有的嵌入式視頻監(jiān)控傳輸設(shè)備大多都是基于局域網(wǎng)環(huán)境下,使得監(jiān)控系統(tǒng)受到地域限制,而基于第三代移動通信技術(shù)(3G,3rd-generation)網(wǎng)絡(luò)的視頻監(jiān)控系統(tǒng)[2]由于其成本過高也得不到廣泛推廣?;诖?,提出了一種低成本高效能的方案,將NAT穿越技術(shù)、嵌入式技術(shù)結(jié)合起來設(shè)計了嵌入式跨網(wǎng)視頻傳輸系統(tǒng)。
系統(tǒng)基于S3C2440開發(fā)板的嵌入式Linux平臺,采用USB接口的攝像頭捕捉視頻,將視頻數(shù)據(jù)傳輸?shù)介_發(fā)板,開發(fā)板上通過視頻采集、處理等模塊對視頻數(shù)據(jù)進行處理,然后將處理后的視頻數(shù)據(jù)通過網(wǎng)絡(luò)傳輸至接收端PC,接收端PC運行相應(yīng)軟件程序,接收并解碼視頻數(shù)據(jù),最后將數(shù)據(jù)圖像顯示在電腦上。系統(tǒng)總體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體
1.1.1 硬件開發(fā)板結(jié)構(gòu)
本系統(tǒng)硬件平臺選用的是北京揚創(chuàng)科技有限公司提供的utu2440-F開發(fā)板,它由核心板與底板組成,核心板上集成了了 64 MB Nand Flash和 64 MB SDRAM,底板上集成了DM9000A網(wǎng)卡、音頻、串口、USB 模塊等外設(shè)接口和芯片。開發(fā)板CPU芯片采用的是三星公司的微處理器S3C2440A,該處理器內(nèi)部集成了ARM920T內(nèi)核的32位微控制器,工作頻率高達 400 MHz,該處理器還支持協(xié)處理器、片上調(diào)試和內(nèi)存管理單元等,具有體積小,高性能、低功耗等優(yōu)點。
系統(tǒng)的主要模塊如圖2所示。
圖2 2440開發(fā)板結(jié)構(gòu)
各個模塊主要功能為:Nand Flash保存了操作系統(tǒng)和文件系統(tǒng);RS232串口用于與宿主機通信,輸入調(diào)試和運行命令;有線網(wǎng)用于進行網(wǎng)絡(luò)通信,比如用簡單文件傳輸協(xié)議(TFTP,Trivial File Transfer Protocol)或網(wǎng)絡(luò)文件系統(tǒng)(NFS,Network File System)下載文件;LCD用于顯示接收到的客戶端視頻圖像;USB攝像頭用于視頻的采集;無線網(wǎng)卡用來無線傳送視頻圖像。
1.2.1 建立交叉編譯環(huán)境
嵌入式系統(tǒng)一般資源有限,不利于調(diào)試,因此通常通過采用交叉編譯調(diào)試的方式來編譯嵌入式軟件。交叉編譯調(diào)試環(huán)境是搭建在宿主機上的,對應(yīng)的嵌入式開發(fā)板叫做目標板,他們通過串口相連,其示意如圖3所示。開發(fā)時,先在宿主機上編寫程序,安裝交叉編譯環(huán)境,將所寫代碼,使用交叉編譯器進行編譯,匯編,以及連接,生成可執(zhí)行的二進制代碼。這種可執(zhí)行代碼并不能在宿主機上執(zhí)行,而只能在目標板上執(zhí)行,然后將可執(zhí)行代碼通過串口,仿真器等進行下載到目標板的RAM或FLASH中,在目標板中運行即可[3]。
圖3 交叉編譯
1.3.1 NAT技術(shù)
NAT技術(shù)通過將局域網(wǎng)上的主機地址映射為 Internet上的有效IP地址,從而實現(xiàn)了網(wǎng)絡(luò)地址的復(fù)用。NAT技術(shù)不僅隱藏了內(nèi)部網(wǎng)絡(luò)地址信息,使外界無法直接訪問內(nèi)部網(wǎng)絡(luò)設(shè)備,保護內(nèi)部網(wǎng)絡(luò),也減少對Ipv4地址的需求量。NAT允許任何內(nèi)部主機訪問 Internet上的任何服務(wù), 而不允許外部主機用戶直接向私有網(wǎng)絡(luò)中的主機發(fā)起通信請求[4]。NAT示意如圖4所示。
圖4 NAT技術(shù)
如圖 4所示,當內(nèi)部網(wǎng)絡(luò)要訪問外部網(wǎng)絡(luò)時,就通過NAT將自己的IP地址和端口號轉(zhuǎn)換為外部的IP地址和端口號;當外部主機要訪問內(nèi)部網(wǎng)絡(luò)時,可以通過配置內(nèi)部網(wǎng)絡(luò)中特定的應(yīng)用服務(wù)器和NAT轉(zhuǎn)換來訪問內(nèi)部服務(wù)。當發(fā)送方位于私有網(wǎng)絡(luò)中,接收方位于公網(wǎng)上時,如果UDP通信請求是由內(nèi)網(wǎng)用戶即發(fā)送方發(fā)起的,則可以在發(fā)送方與接收方之間建立起通信;如果 UDP通信請求是由接收方發(fā)起的,NAT尚未給發(fā)送方分配合法的公有地址,由于私有地址在Internet上是非法的,接收方發(fā)出的數(shù)據(jù)包將無法到達發(fā)送端,不能建立起正常的通信。當接收方是位于另一個私有網(wǎng)絡(luò)中時,由于發(fā)送方和接收方都沒有分配到公網(wǎng)IP地址, 因而無法建立起通信;即使發(fā)送方和接收方的公網(wǎng) IP地址是已知的,由于之前沒有通信過,NAT仍然阻止了客戶間的正常通信。也就是,位于NAT后面的主機用戶可以作為客戶機訪問外網(wǎng),但不能夠充當服務(wù)器向公網(wǎng)提供服務(wù)。
以上這些限制使得存在NAT的網(wǎng)絡(luò)中,外部網(wǎng)主機無法穿過NAT主動與內(nèi)部網(wǎng)主機進行通信,特別是位于不同NAT之后的不同內(nèi)網(wǎng)中的雙方更無法相互連接,無法實現(xiàn)信息的交換和共享?;诖?,提出了NAT對UDP的簡單穿越(STUN,Simple Traversal of UDP Through NAT)協(xié)議來解決 NAT穿越問題。STUN協(xié)議由IETF RFC 3489[5]定義,是UDP對NAT的簡單穿越方式。利用STUN實現(xiàn)NAT穿越主要是利用STUN Client向STUN Server發(fā)送STUN請求消息和接收STUN響應(yīng)消息,得知其在出口NAT上的映射外部地址以及NAT類型等相關(guān)消息,然后就將報文信息中的地址信息直接填寫出口NAT上的對外地址,并且告知目的端節(jié)點自己的接收地址和端口號。同時,根據(jù)發(fā)送端和接收端所處的NAT類型,采取適當?shù)牟呗詠硗瓿蓪AT的穿透。
1.3.2 MJPEG編解碼
運動靜止圖像壓縮技術(shù)(M-JPEG,Motion- Join Photographic Experts Group),廣泛應(yīng)用于視頻傳輸和圖像處理領(lǐng)域,它是一種基于靜態(tài)圖像壓縮技術(shù)(JPEG,Joint Photographic Experts Group)發(fā)展起來的動態(tài)圖像壓縮技術(shù)[6],這種壓縮方式單獨完整地壓縮每一幀,其中每一幀圖像都分別使用 JPEG編碼。其主要特點是基本不考慮視頻流中不同幀之間的變化,只單獨對某一幀進行壓縮,不對幀間的時間冗余進行壓縮,因此造成了大量冗余信息被重復(fù)存儲,存儲占用的空間大,壓縮效率不高。也正因為如此,它的編碼與解碼相對比較容易,并不需要過多的運算能力,也使得軟件或者芯片可以十分容易地對 Motion JPEG進行處理,實現(xiàn)較為容易,成本也較低。此外,M-JPEG壓縮方式并沒有統(tǒng)一的規(guī)定格式。這也就是說,每個型號的視頻服務(wù)器或編碼板有自己的 M-JPEG版本,有利于開發(fā)出適合自己需求的視頻壓縮方案。
1.3.3 SDL顯示
跨平臺多媒體開發(fā)庫(SDL,Simple DirectMedia Layer)用C語言編寫的,支持多種操作系統(tǒng),為應(yīng)用程序開發(fā)以及代碼移植提供了很多便利。使用者不必知道操作系統(tǒng)間的具體差別,只需要調(diào)用SDL提供的API函數(shù)就可以實現(xiàn)音視頻的操作[7]。
SDL的程序代碼主要由4部分組成,分別是初始化階段,程序運行階段,事件等待與處理階段,資源釋放階段。初始化階段主要完成程序的初始化工作。如SDL的函數(shù)初始化,還有程序自身的一些初始化操作,如窗口的建立,背景色的設(shè)置等。程序運行階段,主要完成程序中所需要的媒體載入和顯示等,比如窗口的初始化內(nèi)容的刷新等。事件等待與處理階段,主要是用于等待窗口、鍵盤、搖桿、鼠標等事件然后進行相應(yīng)的操作。資源釋放階段,主要用于釋放程序中所用到的系統(tǒng)資源。
本系統(tǒng)基于嵌入式視頻監(jiān)控系統(tǒng)的開發(fā)[8],在傳統(tǒng)的視頻傳輸上增加了嵌入式平臺,使得發(fā)送端與接收端任何一方均可處于便攜可操作的環(huán)境中。發(fā)送端可以通過小型嵌入式開發(fā)板連接攝像頭,將監(jiān)控到的視頻圖像通過網(wǎng)絡(luò)遠程傳輸給接收端,接收端既可以通過電腦也可以通過嵌入式開發(fā)板或者手機終端接收到視頻圖像并顯示出來。大大提高了視頻監(jiān)控的力度以及靈活性。并且通過利用 NAT技術(shù),使得發(fā)送端和接收端所處的環(huán)境更加多樣化復(fù)雜化,它們可以同時位于 NAT內(nèi)部子網(wǎng)中,豐富了這套系統(tǒng)的用途功能以及適用環(huán)境。
整個系統(tǒng)分為發(fā)送端和接收端,發(fā)送端主要用來對視頻圖像進行采集、編碼、封裝處理,并且利用NAT技術(shù)跨網(wǎng)發(fā)送出去。接收端用UDP穿越NAT技術(shù)接收到壓縮封裝的視頻數(shù)據(jù),然后進行解封裝、解碼,最后調(diào)用SDL庫將視頻顯示出來。系統(tǒng)實現(xiàn)的模型如圖5所示。
發(fā)送端應(yīng)用多線程進行處理,即采集線程和發(fā)送線程,使用互斥機制協(xié)調(diào)2個線程。采集線程主要負責采集視頻數(shù)據(jù),并進行編碼。發(fā)送線程則具體實現(xiàn)UDP穿越NAT技術(shù)將發(fā)送端與接收端建立了直接通道,不經(jīng)由服務(wù)器直接將視頻數(shù)據(jù)發(fā)送給接收端。雖然視頻發(fā)送采用的是UDP方式,不能確保數(shù)據(jù)的完整性,但是由于省去了建立連接、握手等步驟,因此大大加快了視頻傳輸速度,使得即使在較差的網(wǎng)絡(luò)環(huán)境下也能得到較好的視頻流。發(fā)送流程如圖6所示。
圖5 系統(tǒng)設(shè)計模型
圖6 發(fā)送端流程
接收端主程序通過NAT技術(shù)建立通道,然后向發(fā)送端發(fā)送申請視頻傳輸?shù)男帕?,發(fā)送端收到此信令后開始發(fā)送視頻數(shù)據(jù)。此時接收端即準備緩沖區(qū)接收,在緩沖區(qū)滿一幀后,接收端進入處理函數(shù)部分。在處理函數(shù)中,接收端先進行初始化工作,初始化成功后就對緩沖區(qū)的數(shù)據(jù)進行解碼并顯示出來。接收端流程如圖7所示。
圖7 接收端流程
實驗測試環(huán)境為校園網(wǎng)和電信寬帶的局域網(wǎng),檢測到2個網(wǎng)絡(luò)的NAT環(huán)境都屬于端口受限型NAT。其中電信寬帶用戶Client A內(nèi)網(wǎng)IP為192.168.1.101,端口號為10050,公網(wǎng)IP為220.166.196.106,端口為2489。校園網(wǎng)用戶Client B內(nèi)網(wǎng)IP為202.115.52.146,端口號為10050,公網(wǎng)IP為125.71.200.12,端口為3478。2個用戶都向公網(wǎng)代理服務(wù)器注冊自己的信息,服務(wù)器返回對方用戶的信息,此時Client A和Client B都可以與公網(wǎng)服務(wù)器通信了,然后Client A通過發(fā)送UDP數(shù)據(jù)報在Client B上打洞,打洞指令由服務(wù)器發(fā)送,當打洞成功后,服務(wù)器向Client A發(fā)送打洞成功的消息,Client A就可以發(fā)送UDP視頻數(shù)據(jù)包給Client B了,至此雙方可以進行UDP直連,接收端可以收到發(fā)送端發(fā)送過來的視頻數(shù)據(jù)流,并且顯示在終端電腦上。圖8為接收端電腦接收到的發(fā)送端發(fā)送的視頻圖像。
圖8 接收端顯示的視頻圖像
在視頻傳輸和嵌入式系統(tǒng)結(jié)合的基礎(chǔ)上,利用UDP穿越NAT提出并技術(shù)設(shè)計了一套遠程傳輸視頻系統(tǒng)的方案,并介紹了其實現(xiàn)方法和關(guān)鍵技術(shù)。實驗測試證明該解決方案可以較好地解決NAT穿越問題,并且能成功進行跨網(wǎng)傳輸視頻。且本系統(tǒng)具有一定的可擴展性,能夠適應(yīng)不同的開發(fā)平臺和網(wǎng)絡(luò)環(huán)境,對嵌入式開發(fā)有一定的意義。
[1]劉紅. 嵌入式系統(tǒng)技術(shù)發(fā)展趨勢淺析[J]. 中國建設(shè)教育, 2006,10(10): 51-54.
[2]李楠, 房好帥. 基于 3G的嵌入式無線視頻監(jiān)控系統(tǒng)典型方案及分析[J]. 北華航天工業(yè)學(xué)院學(xué)報, 2010, 20(03): 16-20.
[3]楊創(chuàng)科技. YC2440開發(fā)指南-utuLinux2.6.24篇[M]. 北京: 北京揚創(chuàng)科技有限公司, 2008.
[4]楊天路. P2P網(wǎng)絡(luò)技術(shù)原理與系統(tǒng)開發(fā)案例[M]. 北京: 人民郵電出版社, 2007.
[5]ROSENBERG J, WENBERGER J, MAHY R. RFC3489, STUN simple of User Datagram Protocol (UDP) through Network Address Translators(NATs) [S]. 2003.
[6]劉峰. 視頻圖像編碼技術(shù)及國際標準[M]. 北京: 北京郵電大學(xué)出版社, 2005.
[7]江達秀, 許建龍, 孫樹森. 應(yīng)用SDL及GTK+實現(xiàn)視頻多路回放[J].浙江理工大學(xué)學(xué)報, 2009, 26(06): 16-20.
[8]郝衛(wèi)東,李靜. 基于 Linux的嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的研究[J].計算機系統(tǒng)應(yīng)用, 2008(08): 69-71.