方曉翠, 周淵平, 王小紅
(四川大學 電子信息學院,四川 成都 610065)
近年來,隨著計算機、網絡以及圖像處理、傳輸技術的飛速發展,視頻監控傳輸技術得到了顯著的發展。與此同時,嵌入式設備也以其功能強,實時性好、資源占用量小,受到了越來越多人的關注,在嵌入式設備上進行視頻傳輸和監控的開發已逐漸成為一種趨勢[1]。但是目前已有的嵌入式視頻監控傳輸設備大多都是基于局域網環境下,使得監控系統受到地域限制,而基于第三代移動通信技術(3G,3rd-generation)網絡的視頻監控系統[2]由于其成本過高也得不到廣泛推廣。基于此,提出了一種低成本高效能的方案,將NAT穿越技術、嵌入式技術結合起來設計了嵌入式跨網視頻傳輸系統。
系統基于S3C2440開發板的嵌入式Linux平臺,采用USB接口的攝像頭捕捉視頻,將視頻數據傳輸到開發板,開發板上通過視頻采集、處理等模塊對視頻數據進行處理,然后將處理后的視頻數據通過網絡傳輸至接收端PC,接收端PC運行相應軟件程序,接收并解碼視頻數據,最后將數據圖像顯示在電腦上。系統總體結構如圖1所示。

圖1 系統總體
1.1.1 硬件開發板結構
本系統硬件平臺選用的是北京揚創科技有限公司提供的utu2440-F開發板,它由核心板與底板組成,核心板上集成了了 64 MB Nand Flash和 64 MB SDRAM,底板上集成了DM9000A網卡、音頻、串口、USB 模塊等外設接口和芯片。開發板CPU芯片采用的是三星公司的微處理器S3C2440A,該處理器內部集成了ARM920T內核的32位微控制器,工作頻率高達 400 MHz,該處理器還支持協處理器、片上調試和內存管理單元等,具有體積小,高性能、低功耗等優點。
系統的主要模塊如圖2所示。

圖2 2440開發板結構
各個模塊主要功能為:Nand Flash保存了操作系統和文件系統;RS232串口用于與宿主機通信,輸入調試和運行命令;有線網用于進行網絡通信,比如用簡單文件傳輸協議(TFTP,Trivial File Transfer Protocol)或網絡文件系統(NFS,Network File System)下載文件;LCD用于顯示接收到的客戶端視頻圖像;USB攝像頭用于視頻的采集;無線網卡用來無線傳送視頻圖像。
1.2.1 建立交叉編譯環境
嵌入式系統一般資源有限,不利于調試,因此通常通過采用交叉編譯調試的方式來編譯嵌入式軟件。交叉編譯調試環境是搭建在宿主機上的,對應的嵌入式開發板叫做目標板,他們通過串口相連,其示意如圖3所示。開發時,先在宿主機上編寫程序,安裝交叉編譯環境,將所寫代碼,使用交叉編譯器進行編譯,匯編,以及連接,生成可執行的二進制代碼。這種可執行代碼并不能在宿主機上執行,而只能在目標板上執行,然后將可執行代碼通過串口,仿真器等進行下載到目標板的RAM或FLASH中,在目標板中運行即可[3]。

圖3 交叉編譯
1.3.1 NAT技術
NAT技術通過將局域網上的主機地址映射為 Internet上的有效IP地址,從而實現了網絡地址的復用。NAT技術不僅隱藏了內部網絡地址信息,使外界無法直接訪問內部網絡設備,保護內部網絡,也減少對Ipv4地址的需求量。NAT允許任何內部主機訪問 Internet上的任何服務, 而不允許外部主機用戶直接向私有網絡中的主機發起通信請求[4]。NAT示意如圖4所示。

圖4 NAT技術
如圖 4所示,當內部網絡要訪問外部網絡時,就通過NAT將自己的IP地址和端口號轉換為外部的IP地址和端口號;當外部主機要訪問內部網絡時,可以通過配置內部網絡中特定的應用服務器和NAT轉換來訪問內部服務。當發送方位于私有網絡中,接收方位于公網上時,如果UDP通信請求是由內網用戶即發送方發起的,則可以在發送方與接收方之間建立起通信;如果 UDP通信請求是由接收方發起的,NAT尚未給發送方分配合法的公有地址,由于私有地址在Internet上是非法的,接收方發出的數據包將無法到達發送端,不能建立起正常的通信。當接收方是位于另一個私有網絡中時,由于發送方和接收方都沒有分配到公網IP地址, 因而無法建立起通信;即使發送方和接收方的公網 IP地址是已知的,由于之前沒有通信過,NAT仍然阻止了客戶間的正常通信。也就是,位于NAT后面的主機用戶可以作為客戶機訪問外網,但不能夠充當服務器向公網提供服務。
以上這些限制使得存在NAT的網絡中,外部網主機無法穿過NAT主動與內部網主機進行通信,特別是位于不同NAT之后的不同內網中的雙方更無法相互連接,無法實現信息的交換和共享?;诖耍岢隽薔AT對UDP的簡單穿越(STUN,Simple Traversal of UDP Through NAT)協議來解決 NAT穿越問題。STUN協議由IETF RFC 3489[5]定義,是UDP對NAT的簡單穿越方式。利用STUN實現NAT穿越主要是利用STUN Client向STUN Server發送STUN請求消息和接收STUN響應消息,得知其在出口NAT上的映射外部地址以及NAT類型等相關消息,然后就將報文信息中的地址信息直接填寫出口NAT上的對外地址,并且告知目的端節點自己的接收地址和端口號。同時,根據發送端和接收端所處的NAT類型,采取適當的策略來完成對NAT的穿透。
1.3.2 MJPEG編解碼
運動靜止圖像壓縮技術(M-JPEG,Motion- Join Photographic Experts Group),廣泛應用于視頻傳輸和圖像處理領域,它是一種基于靜態圖像壓縮技術(JPEG,Joint Photographic Experts Group)發展起來的動態圖像壓縮技術[6],這種壓縮方式單獨完整地壓縮每一幀,其中每一幀圖像都分別使用 JPEG編碼。其主要特點是基本不考慮視頻流中不同幀之間的變化,只單獨對某一幀進行壓縮,不對幀間的時間冗余進行壓縮,因此造成了大量冗余信息被重復存儲,存儲占用的空間大,壓縮效率不高。也正因為如此,它的編碼與解碼相對比較容易,并不需要過多的運算能力,也使得軟件或者芯片可以十分容易地對 Motion JPEG進行處理,實現較為容易,成本也較低。此外,M-JPEG壓縮方式并沒有統一的規定格式。這也就是說,每個型號的視頻服務器或編碼板有自己的 M-JPEG版本,有利于開發出適合自己需求的視頻壓縮方案。
1.3.3 SDL顯示
跨平臺多媒體開發庫(SDL,Simple DirectMedia Layer)用C語言編寫的,支持多種操作系統,為應用程序開發以及代碼移植提供了很多便利。使用者不必知道操作系統間的具體差別,只需要調用SDL提供的API函數就可以實現音視頻的操作[7]。
SDL的程序代碼主要由4部分組成,分別是初始化階段,程序運行階段,事件等待與處理階段,資源釋放階段。初始化階段主要完成程序的初始化工作。如SDL的函數初始化,還有程序自身的一些初始化操作,如窗口的建立,背景色的設置等。程序運行階段,主要完成程序中所需要的媒體載入和顯示等,比如窗口的初始化內容的刷新等。事件等待與處理階段,主要是用于等待窗口、鍵盤、搖桿、鼠標等事件然后進行相應的操作。資源釋放階段,主要用于釋放程序中所用到的系統資源。
本系統基于嵌入式視頻監控系統的開發[8],在傳統的視頻傳輸上增加了嵌入式平臺,使得發送端與接收端任何一方均可處于便攜可操作的環境中。發送端可以通過小型嵌入式開發板連接攝像頭,將監控到的視頻圖像通過網絡遠程傳輸給接收端,接收端既可以通過電腦也可以通過嵌入式開發板或者手機終端接收到視頻圖像并顯示出來。大大提高了視頻監控的力度以及靈活性。并且通過利用 NAT技術,使得發送端和接收端所處的環境更加多樣化復雜化,它們可以同時位于 NAT內部子網中,豐富了這套系統的用途功能以及適用環境。
整個系統分為發送端和接收端,發送端主要用來對視頻圖像進行采集、編碼、封裝處理,并且利用NAT技術跨網發送出去。接收端用UDP穿越NAT技術接收到壓縮封裝的視頻數據,然后進行解封裝、解碼,最后調用SDL庫將視頻顯示出來。系統實現的模型如圖5所示。
發送端應用多線程進行處理,即采集線程和發送線程,使用互斥機制協調2個線程。采集線程主要負責采集視頻數據,并進行編碼。發送線程則具體實現UDP穿越NAT技術將發送端與接收端建立了直接通道,不經由服務器直接將視頻數據發送給接收端。雖然視頻發送采用的是UDP方式,不能確保數據的完整性,但是由于省去了建立連接、握手等步驟,因此大大加快了視頻傳輸速度,使得即使在較差的網絡環境下也能得到較好的視頻流。發送流程如圖6所示。

圖5 系統設計模型

圖6 發送端流程
接收端主程序通過NAT技術建立通道,然后向發送端發送申請視頻傳輸的信令,發送端收到此信令后開始發送視頻數據。此時接收端即準備緩沖區接收,在緩沖區滿一幀后,接收端進入處理函數部分。在處理函數中,接收端先進行初始化工作,初始化成功后就對緩沖區的數據進行解碼并顯示出來。接收端流程如圖7所示。

圖7 接收端流程
實驗測試環境為校園網和電信寬帶的局域網,檢測到2個網絡的NAT環境都屬于端口受限型NAT。其中電信寬帶用戶Client A內網IP為192.168.1.101,端口號為10050,公網IP為220.166.196.106,端口為2489。校園網用戶Client B內網IP為202.115.52.146,端口號為10050,公網IP為125.71.200.12,端口為3478。2個用戶都向公網代理服務器注冊自己的信息,服務器返回對方用戶的信息,此時Client A和Client B都可以與公網服務器通信了,然后Client A通過發送UDP數據報在Client B上打洞,打洞指令由服務器發送,當打洞成功后,服務器向Client A發送打洞成功的消息,Client A就可以發送UDP視頻數據包給Client B了,至此雙方可以進行UDP直連,接收端可以收到發送端發送過來的視頻數據流,并且顯示在終端電腦上。圖8為接收端電腦接收到的發送端發送的視頻圖像。

圖8 接收端顯示的視頻圖像
在視頻傳輸和嵌入式系統結合的基礎上,利用UDP穿越NAT提出并技術設計了一套遠程傳輸視頻系統的方案,并介紹了其實現方法和關鍵技術。實驗測試證明該解決方案可以較好地解決NAT穿越問題,并且能成功進行跨網傳輸視頻。且本系統具有一定的可擴展性,能夠適應不同的開發平臺和網絡環境,對嵌入式開發有一定的意義。
[1]劉紅. 嵌入式系統技術發展趨勢淺析[J]. 中國建設教育, 2006,10(10): 51-54.
[2]李楠, 房好帥. 基于 3G的嵌入式無線視頻監控系統典型方案及分析[J]. 北華航天工業學院學報, 2010, 20(03): 16-20.
[3]楊創科技. YC2440開發指南-utuLinux2.6.24篇[M]. 北京: 北京揚創科技有限公司, 2008.
[4]楊天路. P2P網絡技術原理與系統開發案例[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]劉峰. 視頻圖像編碼技術及國際標準[M]. 北京: 北京郵電大學出版社, 2005.
[7]江達秀, 許建龍, 孫樹森. 應用SDL及GTK+實現視頻多路回放[J].浙江理工大學學報, 2009, 26(06): 16-20.
[8]郝衛東,李靜. 基于 Linux的嵌入式網絡視頻監控系統的研究[J].計算機系統應用, 2008(08): 69-71.