孫彥景, 馬常偉, 王艷芬, 陳 巖, 李 松, 張曉光
(中國礦業大學 信息與控制工程學院, 江蘇 徐州 221116)
以培養學生創新與解決復雜工程問題能力、具備一定的軟硬件協同能力為目標,通過結合嵌入式系統、無線通信、計算機網絡和軟件設計等學科領域的技術,設計了一種基于無線多跳網絡的視頻傳輸實驗系統[1-3]。基于QCA9558芯片、嵌入式系統、無線組網技術、QT技術,設計完成了無線視頻傳輸系統。本系統由視頻采集節點、Wi-Fi無線多跳網絡、上位機客戶端軟件組成實現實時視頻數據流生成、傳輸、編解碼、顯示存儲等一系列功能。
設計時對硬件和軟件進行了綜合考慮,硬件平臺具有開放性、擴展性,從而為軟件提供支撐;軟件平臺也充分考慮了硬件平臺的性能變化,保持靈活性。在針對具體實驗內容進行設計時,不僅鍛煉學生掌握實驗設計方法、設計思路的能力,而且讓學生將當前的新技術、新方法能夠靈活地應用于實驗之中[4]。
本文基于無線多跳網絡技術所設計的無線視頻傳輸實驗系統包括嵌入式多跳節點視頻采集終端和PC客戶端兩部分,如圖1所示。多跳節點視頻采集終端實現視頻數據的采集、處理以及發送,PC客戶端負責數據的接收及顯示。多跳節點通過攝像頭采集視頻數據,進行編解碼壓縮處理后通過無線多跳網絡將數據發送到網關。網關節點是系統的重要組成部分,主要連接由Wi-Fi構建的無線多跳網絡和Internet網絡,實現異構網絡之間數據的轉發和控制協議的解析。無線多跳網絡傳輸部分是由各個多跳節點自尋路由實現自組網,完成多路視頻流向網關節點的傳輸。PC客戶端軟件通過IP地址和端口訪問獲取所需的數據進行實時解碼并顯示視頻畫面,同時將視頻進行存儲。

圖1 無線傳輸系統示意圖
系統硬件主要有主控模塊、電源模塊、射頻模塊、以太網模塊、存儲模塊和USB模塊等,其結構框圖見圖2。圖3為基于無線多跳網絡所設計的實際硬件實驗平臺。

圖2 硬件結構框圖

圖3 節點硬件平臺
(1) 主控模塊由QCA9558主控芯片、晶振電路、復位電路、電源轉換電路、濾波電路和調試電路組成。
(2) 電源模塊通過電壓轉換芯片RT8293B將外部輸入12 V電源進行轉換,得到平臺其他模塊所需要的供電電壓。
(3) 存儲模塊由Flash存儲模塊和SDRAM存儲模塊組成。Flash存儲模塊選取NOR-FLASH類型的芯片MX25L12835F,用于完成設備的初始化和操作系統的加載工作;SDRAM存儲模塊選取符合DDR2標準的EM68B16CWQH芯片,以并聯方式連接QCA9558內部集成的DDR控制器,實現擴大存儲空間的需求。
(4) USB模塊連接外設與主控模塊進行交互,芯片集成了USB2.0控制器,將相關信號線與USB引腳相連,即可完成USB模塊設計。
(5) 以太網模塊選取PHY芯片AR8327,主控芯片QCA9558內部集成了千兆以太網媒體訪問控制器,通過MII總線媒體獨立接口總線完成與PHY芯片的通信,實現千兆以太網LAN口和WAN口功能。
(6) QCA9558內部集成了射頻收發模塊。射頻收發模塊的輸入輸出信號經過功率放大電路和低噪聲放大電路將信號發送至天線模塊,完成射頻模塊與外部設備的通信工作。
系統中多跳節點視頻采集終端采用OpenWrt嵌入式操作系統[5]。無線網絡傳輸部分以無線多跳網絡技術為基礎,采用OLSR(Optimized Link State Routing)路由協議[6]。PC客戶端軟件是基于Qt開發框架的視頻解碼應用程序。系統軟件總體框架見圖4。總體流程是由USB攝像頭采集視頻數據,多跳節點通過無線Wi-Fi將數據發送到其他平臺的客戶端應用程序上進行顯示。

圖4 系統軟件總體框架
3.1.1 OpenWrt編譯環境搭建
本設計選擇在虛擬機中安裝Ubuntu16.04 版本的linux系統,然后執行命令,完成交叉編譯所需要的軟件包的安裝,主要有編譯器、解壓工具和特定庫等。通過如下命令搭建編輯環境:
#sudo apt-get update
#sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk subversion wine1.6-dev unzip wget zlib-devel autoconf binutils bison bzip2 flex gcc gcc-c++
3.1.2 OpenWrt系統定制
安裝完成OpenWrt系統后,進入源碼目錄,執行make menuconfig命令進入文本配置界面,如圖5所示,按照系統需求裁剪內核。

圖5 OpenWrt文本配置界面
根據視頻傳輸系統所需主要配置如下:
(1) CPU型號選擇:Atheros AR7xxx/AR9xxx;
(2) 建立交叉編譯環境:Build the OpenWrt SDK等;
(3) 內核驅動模塊:
USBSupport ---> <*>kmod-usb-core
VideoSupport ---> <*> kmod-video-core
(4) 網絡傳輸協議及多媒體視頻服務器軟件等,
Application→<*>luci-app-olsrMultimedia→等
(5) 其他設置包含web管理界面:Collections→ <*>luci,各種所需插件:Translations→<*>luci-i18n-chinese等。
3.1.3 OpenWrt系統移植
在系統硬件平臺上構建嵌入式Linux系統,需要引導程序Bootloader和系統固件。本系統的Bootloader采用開源的uboot軟件[7],將其燒寫到Flash中;然后連接硬件平臺串口與PC機,使用軟件TFTP進行固件的燒寫;最后從Flash中引導在PC機上交叉編譯后生成的固件,之后啟動Linux系統。
在無線多跳網絡[8]中,源節點到目的節點之間的典型路徑是由多跳組成的,該路徑中的中間節點可以充當端節點產生或接受數據分組,也可以充當路由器對來自其他節點的數據分組并進行轉發。無線多跳網絡技術能有效地避免有線和傳統無線方式的弊端,可以在不增加線纜和設備的基礎上有效地擴展通信范圍,提高網絡部署的靈活性,并降低成本。
路由協議是無線多跳網絡的核心部分[9]。本系統采用Ad-hoc工作模式傳輸數據,實現系統的無線傳輸功能。系統所研究的OLSR是一種基于表驅動先驗式路由協議。通過固件編譯添加OLSR路由協議,進入系統設置服務,啟用插件olsrd_jsoninfo.so.0.0完成OLSR協議的配置工作。
本系統中PC客戶端軟件圖形化界面采用Qt完成。Qt是一款基于C++語言的跨平臺圖形用戶界面應用程序框架[10-11],其面向對象的多線程應用可以解決并發和實時問題,因此能夠較好支持多流傳輸解碼需要。根據功能需求可以分為兩部分:
(1) 前端:用戶操作界面,提供多路視頻參數設定和實時顯示的功能;
(2) 后臺:利用QT信號與槽和多線程的方法,開辟主線程和多個子線程,主線程負責接收視頻幀和窗口部件的繪制工作,多個子線程負責多個視頻流解碼、編碼保存,以及利用信號函數將視頻幀發送至主線程的顯示窗口進行顯示。
客戶端采用FFmpeg采集視頻并生成數據流及推流,同時也可以對現有的測試視頻進行推流。FFmpeg是一款自由軟件,能夠對市面上大部分多媒體文件等數據信息進行一定的記錄和轉化,同時還可以將音視頻文件進行壓縮編碼和解碼,實現音頻和視頻數據的傳輸[12-13]。視頻編解碼流程如圖6所示。攝像頭采集數據之后,對視頻數據進行FFmpeg編碼,然后經由網絡傳輸至客戶端進行解碼接收。

圖6 視頻編解碼流程圖
編碼之前進行初始化的處理,對所有使用到的編解碼器完成注冊,同時對幀速率、圖像的格式及其分辨率等進行設定,保障編碼的順利完成和編碼參數設定。系統通過操作設備文件“/dev/video0”,即可完成對攝像頭的操作,主要流程為開啟設備、確定可用功能及視頻輸入、申請緩存、采集數據、停止采集、關閉設備。
如圖7所示,本系統實現5類功能,分別是Login(用戶登錄類)Setting(參數設定類)、VideoPlayer(視頻解碼類)、ShowVideo(視頻顯示類)和H264Encoder(視頻編碼保存類)。當用戶登錄成功后,系統開始進行初始化操作,在接收到視頻流之后,配置相關參數開啟編解碼器;然后不斷接收視頻流信息,并將視頻流送至解碼器解碼;最后將解碼后的視頻送至視頻顯示模塊進行顯示,并同時送至視頻編碼存儲模塊,進行重新編碼與保存。登錄見圖8。

圖7 客戶端工作流程圖

圖8 無線傳輸實驗系統登錄界面
對搭建完成的無線多跳網絡的各項性能指標進行測試,結果見表1。

表1 網絡性能測試結果
實驗結果表明,系統硬件工作正常,無線多跳網絡構造成功。經過多跳傳輸之后,系統性能良好,能夠滿足視頻傳輸的要求。
對系統軟硬件測試表明,該系統能滿足設計目標,具有一定的通用性和可擴展性,客戶端上位機接收到的視頻圖像失真低,清晰穩定且實時性好,可以用于無線視頻傳輸、視頻編解碼、無線網絡等方面科研及教學。