邵澤靖,胡 靜,宋鐵成,黃 秦
(東南大學 信息科學與工程學院,江蘇 南京 210096)
隨著社會經濟的發展,交通運輸業成為國民經濟發展重要經濟命脈。移動通信技術的發展,為物聯網技術提供了強有力的支持,在交通運輸行業催生了車聯網這一概念。車聯網概念引申自物聯網(Internet of Things,IoT)。行業背景不同,對車聯網的定義也不相同。傳統的車聯網定義是指裝載在車輛上的電子標簽,通過無線射頻等識別技術實現在信息網絡平臺上,對所有車輛的屬性信息和靜、動態信息進行提取和有效利用。根據不同的功能需求,對所有車輛的運行狀態,進行有效的監管并提供綜合服務的系統。車載視頻監控是車聯網領域的一個重要研究課題,它能方便用戶實時、直觀地監控車輛安全情況[1]。為了更有效地對車輛情況進行監管,本設計使用Hi3520D作為車載終端核心芯片,基于Linux嵌入式進行程序設計,實現采集、顯示、存儲視頻數據功能,將車載終端作為流媒體服務器,供遠程視頻監控軟件查看視頻終端內的視頻文件。
本系統使用車載終端掛載攝像頭對車體四周進行監控,遠程監控客戶端通過網絡訪問車載終端視頻監控系統,查看車輛情況,系統總體設計如圖1所示。在本系統中,在每個車載終端上掛載4路攝像頭。車載終端對采集到的視頻數據進行處理與顯示,并將視頻數據保存在本地存儲設備之中。遠程監控客戶端通過網絡訪問車載終端中的視頻文件,查看車輛情況。此時,車載終端不僅能作為視頻采集與存儲的設備,而且可以作為視頻文件的流媒體服務器,將本地視頻以流的方式推送到視頻監控客戶端。
系統硬件總體結構如圖2所示。其中車載核心芯片使用了基于ARM9處理器的HI3520D,使用130萬像素的AHD高清車載專用攝像頭,通過NVP6114視頻解碼芯片將數據傳送到HI3520D核心芯片中。4G模塊主要采用了移遠LTE EC20進行視頻數據傳輸。WiFi模塊主要使用了RTL8188 CUS芯片。通過RS232串口進行信息調試的輸入和輸出,USB可以接外置存儲設備和鼠標設備。

圖1 系統總體設計

圖2 系統硬件架構
車載視頻監控系統核心芯片主要使用了搭載Linux操作系統的HI3520D。HI3520D是針對多路D1和多路高清DVR,NVR產品應用開發的一款專業SOC芯片。其采用ARM9處理器內核,處理器頻率高達600 MHz,集成8路D1多協議編解碼能力的引擎與豐富的視頻輸入輸出接口(CVBS、高清VGA、BT1120),充分滿足客戶產品的高質量圖像體驗與車載視頻監控應用軟件開發需求[2]。海思提供的媒體處理軟件平臺(Media Process Platform,MPP),可支持HI3520D應用軟件快速開發。該平臺對應用軟件屏蔽了芯片相關的復雜的底層處理,并對應用軟件直接提供MPP程序接口(MPP Programe Interface,MPI)完成相應功能。該平臺支持應用軟件快速開發以下功能:輸入視頻捕獲、H.264/MJPEG/JPEG/MPEG4 編碼、H264/VC1/MPEG4/MPEG2/AVS 解碼、視頻輸出顯示、視頻圖像前處理(包括去噪、增強、銳化、Deinterlace)、編碼碼流疊加 OSD、視頻偵測分析、智能分析、音頻捕獲及輸出、音頻編解碼等功能[5]。
視頻采集模塊主要使用了NextChip NVP6114作為視頻采集芯片。NVP6114作為AHD1.0的接收芯片RX,可以接收960 H CVBS/Comet,720 p(AHD)。NVP6124作為AHD2.0的接收芯片R,用于DVR的時候,因為能接收所有960 H CVBS/Comet,1 280 H CVBS/Comet,720 p(AHD),1 080 p(AHD)圖像,所以能夠處理多種視頻圖像。
EC20是移遠通信最近推出的LTE Cat.3模塊;采用LTE 3GPP Rel.9技術;支持最大下行速率100 Mbps和最大上行速率50 Mbps,可以滿足視頻傳輸的高帶寬要求。EC20在封裝上兼容移遠通信UMTS/HSPA+ UC20模塊,實現了3G與4G網絡之間的無縫切換,并且向后兼容現存的EDGE和GSM/GPRS網絡,以確保在缺乏3G和4G網絡的偏遠地區也能正常工作。EC20使用多輸入多輸出技術,使信號通過發射端與接收端的多個天線傳送和接收,從而降低誤碼率,改善通信質量。同時,它結合了高速無線連接與內置多星座高精度定位GPS+GLONASS接收器。EC20內置豐富的網絡協議,集成多個工業標準接口,可以工作在多種嵌入式設備中。
嵌入式在存儲空間與處理器速度等硬件資源上有限,所以不可能直接在車載終端上直接進行開發,必須在上位機PC上進行所有的軟件開發與調試,通過串口或者網絡將目標程序下載到目標機上運行,這就需要搭建交叉編譯環境[3]。使用VMware安裝Linux操作系統,本文使用的Linux操作系統為Ubuntu 16.04。安裝完操作系統之后需要安裝交叉編譯器,本系統開發所使用的編譯器是arm-hisiv100nptllinux-gcc,版本是4.4.1。為了加快開發速度,不使用串口或者網絡將目標程序下載到目標機上運行的方式,而是使用NFS網絡文件系統,將宿主機上的指定目錄作為共享文件夾,通過NFS網絡文件系統將共享文件掛載在目標機上,這樣免去了下載程序的步驟,直接在目標機器上運行程序查看效果。
海思圖標幀緩沖區(Hisilicon Framebuffer,HiFB)是海思數字媒體處理平臺提供的用于管理疊加圖形層的模塊,它不僅提供Linux Framebuffer的基本功能,還在Linux Framebuffer的基礎上增加層間colorkey、層間colorkey mask、層間Alpha、原點偏移等擴展功能[4]。可以使用支持Linux Framebuffer的Qt進行GUI程序設計。Qt是一個跨平臺的C++圖形用戶界面應用程序框架。它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象的,很容易擴展,并且允許真正地組件編程。使用Qt進行嵌入式軟件開發需要使用交叉編譯器進行交叉編譯后方可使用,本系統使用的是經過剪裁后的Qt 4.8.6 。
車載終端不僅作為視頻采集與存儲的設備,還作為視頻播放的服務器。使用了基于RTP/RTCP/RTSP/SIP的開源Live555進行視頻服務器的開發。Live555是一個為流媒體提供解決方案的跨平臺的C++開源項目。標準流媒體傳輸是一個為流媒體提供解決方案的跨平臺的C++開源項目,它實現了對標準流媒體傳輸協議如RTP/RTCP,RTSP,SIP等的支持。Live555實現了對多種音視頻編碼格式的音視頻數據的流化、接收和處理等支持,包括MPEG,H.263+,DV,JPEG視頻和多種音頻編碼。Live555現已經支持嵌入式開發,但需要使用交叉編譯工具在宿主機上進行移植后方可使用。
終端軟件設計主要包括3個部分,視頻采集與顯示、GUI界面交互、流媒體服務器,整個軟件設計架構如圖3所示。

圖3 系統軟件設計架構
本車載終端默認使用4路720P視頻進行錄制,使用VGA進行輸出。視頻采集與顯示主要使用MPP平臺下視頻輸入、視頻處理與視頻輸出3個模塊。視頻輸入模塊捕獲視頻圖像,可對其作剪切、縮放、鏡像處理,并輸出多路不同分辨率的圖像數據。視頻處理模塊接收視頻輸入發送過來的圖像數據,可對圖像進行去噪、圖像增強、銳化等處理,并實現同源輸出多路不同分辨率的圖像數據,用于編碼、預覽或抓拍。視頻輸入模塊接收視頻處理模塊處理后的輸出圖像,可進行播放控制等處理,最后按用戶配置的輸出協議輸出給外圍視頻設備。MPP提供將系統綁定接口,即通過數據接受者綁定數據源,來建立二者的關聯關系,綁定后數據源生成的數據將直接發送給接受者,整個過程如圖4所示。

圖4 視頻采集與顯示流程
步驟1:計算視頻緩存池大小及初始化系統。視頻緩存池主要向媒體業務提供大塊內存管理功能,負責內存的分配與回收,充分發揮內存緩存池的作用,讓物理資源在各個媒體處理模塊中合理使用。
步驟2:打開視頻輸入模塊,HI3520D視頻輸入模塊有兩個視頻輸入設備Dev0和Dev1,每個視頻輸入設備有4個通道。打開視頻輸入模塊步驟,主要是依次打開每個視頻輸入設備之后,再打開每個視頻輸入設備的通道。
步驟3:開啟視頻處理模塊,并將視頻處理模塊與視頻輸入模塊進行綁定。視頻處理模塊通過提供組(Group)的概念,將每組分為3種通道:物理通道、直通通道和擴展通道。HI3520D不支持擴展通道,只含有物理通道和直通通道,如表1所示 。將視頻輸入設備Dev0的4個通道分別與視頻處理模塊每組的物理通道0進行綁定。

表1 HI3520D視頻處理模塊通道規格
步驟4:打開視頻輸出模塊并將其與視頻處理模塊進行綁定。HI3520D視頻輸出模塊支持3個圖形層(G0~G2),1個鼠標層。其中,G0~G2圖形層分別固定綁定到高清設備(DHD0)、標清設備0(DSD0)和標清設備1(DSD1)。鼠標層可以綁定到DHD0,DSD0,DSD1。其中,每個高清設備有16個通道,標清設備有32個通道[5]。啟動高清設備后,將高清設備的0~8號通道分別與視頻處理模塊的每個組的物理通道2進行綁定。
在使用Qt進行界面GUI設計之前,需要調用open函數將制定HiFB打開。整個HiFB開發流程如圖5所示。使用Qt進行GUI設計主要是為了控制視頻文件存儲打開/關閉,相關視頻參數的設置。視頻文件存儲打開/關閉主要是使用MPP平臺下的視頻編碼模塊。視頻編碼模塊同樣使用組,首先創建組,其次打開相應通道,然后將相應通道注冊到相應組,之后打開相應通道接收圖像數據,最后將視頻處理模塊與視頻編碼模塊進行綁定。本系統中將獲取視頻碼流存儲為H.264編碼的功能封裝到了一個相應的函數中,在Qt界面中點擊相應按鈕便可以完成視頻文件存的打開/關閉功能。
車載終端流媒體服務器主要是使用Live555開源項目中的live555MediaServer通過RTSP/RTP協議傳輸視頻流。在本項目中流媒體服務器是作為子進程運行的。通過進程間的通信方式,可以在父進程,也就是GUI界面中關閉和開啟流媒體服務器。Live555MediaServer程序中首先創建BasicTaskScheduler和BasicUsageEnvironment對象。TaskScheduler是任務調度中心,實現事件的異步處理、事件處理函數的注冊,主要負責任務的調度與執行。UsageEnvironment可以輸入輸出消息,代表整個系統環境。然后創建DynamicRTSPServer對象。RTSPServer實現相應端口的監聽,對于請求進行應答。最后開啟時間主循環,不斷監聽客戶端請求,實現應答[6]。
系統測試主要是用本地PC與車載終端進行聯合測試,兩者連接到名稱為TP-HISI的WiFi,將車載終端啟動完成后,PC通過WiFi訪問車載終端,車載終端實物如圖6所示。圖6中,1為串口轉USB接口,2為以太網口,3為VGA接口,4為電源接口,5為攝像頭接口,6為攝像頭,7為RTL8188 CUS WiFi模塊,8為SIM卡槽,9為SD存儲卡接口,10為7寸顯示器。圖7為核心板背面,圖7中,1為Hi3520D芯片,2為NVP6114視頻采集芯片。

圖5 HiFB開發流程

圖6 車載終端視實物

圖7 核心板背面
將圖6中7寸顯示器通過VGA接口與車載終端相連接,啟動車載終端程序,界面顯示如圖8所示。通過圖8可看出,視頻采集與顯示功能完好,圖8中右下角start和stop按鈕分別控制視頻文件的存儲開關。通過測試,視頻文件存儲功能正常,存儲在本地磁盤上文件名稱為stream_chnx.264,其中x表示通道號。

圖8 車載終端界面顯示效果
將車載終端與本地電腦連接至無線TP-HISI,分配地址IP分別為192.168.100.77與192.168.100.100。本地電腦使用VLC播放器訪問車載終端,訪問格式為:rtsp://IP:Port/filename。其中,IP為車載終端,Port表示地址端口號,測試端口號為554,filename使用視頻存儲的文件名,文件名為“stream_chnx.264”,其中x表示通道號。訪問通道0的視頻錄像文件stream_chn0.264,播放效果如圖9所示,播放速率實測為25幀/s。圖10是VLC播放器對當前播放的統計,從圖中可看出,播放器丟幀率較低,使用WiFi傳輸碼流速度很高。

圖9 VLC播放效果

圖10 VLC播放統計
本文使用Hi3520D作為嵌入式核心芯片,通過NVP6114采集視頻,移植Qt設計GUI界面程序,控制H.264編碼視頻的存儲開關,使用戶更易于控制視頻終端,達到了良好的交互效果。本設計將車載終端作為視頻流媒體服務器,可使遠程視頻監控客戶端通過網絡訪問車載終端視頻文件,達到了瀏覽監控視頻的效果,滿足車載視頻監控的各項要求,可以應用于車載視頻監控系統中。