蘇威積 杜 煒 李 劍
1(北京航天愛威電子技術(shù)有限公司 北京 100854)2 (北京郵電大學(xué)計(jì)算機(jī)學(xué)院 北京 100876)
隨著互聯(lián)網(wǎng)的發(fā)展,高效、安全地傳遞信息及實(shí)現(xiàn)信息的共享已成為現(xiàn)代社會(huì)發(fā)展的一個(gè)必要條件.視頻編碼系統(tǒng)作為視頻安防監(jiān)控系統(tǒng)[1]的一部分,對網(wǎng)絡(luò)有實(shí)時(shí)性的要求,是不允許網(wǎng)絡(luò)出現(xiàn)故障的.但網(wǎng)絡(luò)涉及到的環(huán)節(jié)非常多,任何一個(gè)環(huán)節(jié)出現(xiàn)問題都會(huì)導(dǎo)致整個(gè)網(wǎng)絡(luò)傳輸運(yùn)行的停止.所以應(yīng)該給用戶提供冗余的網(wǎng)絡(luò)、冗余的通道等確保網(wǎng)絡(luò)的暢通[2].在我們的視頻編碼系統(tǒng)里,編碼板與交換設(shè)備實(shí)現(xiàn)通信時(shí),通過網(wǎng)線將它們的網(wǎng)口連接起來.其中,交換設(shè)備網(wǎng)口中的邏輯端口通過設(shè)置的硬件接口與編碼板設(shè)備實(shí)現(xiàn)數(shù)據(jù)傳輸.在網(wǎng)口中1個(gè)邏輯端口的通信通路出現(xiàn)故障時(shí),可以切換至另一個(gè)邏輯端口的通信通路,實(shí)現(xiàn)直接、高效的網(wǎng)口故障防護(hù).在視頻編碼系統(tǒng)中使用雙網(wǎng)口冗余方法[3]可以提高鏈路可靠性,冗余設(shè)備的成員能夠相互動(dòng)態(tài)備份.當(dāng)某一個(gè)鏈路中斷時(shí)其他成員可以迅速接替其工作,切換在1 s內(nèi)完成,而用戶并不會(huì)感覺到.
圖1 系統(tǒng)架構(gòu)
現(xiàn)在實(shí)現(xiàn)雙網(wǎng)口冗余的通常做法是用戶設(shè)備上只設(shè)置1個(gè)硬件接口,通過特制的I轉(zhuǎn)2網(wǎng)線連接到交換設(shè)備的2個(gè)硬件接口上,交換設(shè)備上設(shè)置內(nèi)置或外置的開關(guān)器件.當(dāng)交換設(shè)備的1個(gè)邏輯端口的通信通路發(fā)生故障時(shí),通過切換開關(guān),斷開故障邏輯端口這一通信通路的物理連接,將連接通路切換至另一個(gè)邏輯端口的通信通路,以保證數(shù)據(jù)的傳輸[4].這種方式用戶設(shè)備只要有1個(gè)接口即可,切換用的開關(guān)器件集成在交換設(shè)備上.但是由于開關(guān)器件的引入,將會(huì)影響信號傳輸?shù)目煽啃裕瑢?dǎo)致收發(fā)信號的實(shí)際波形無法達(dá)標(biāo).開關(guān)控制狀態(tài)變換常常引起各種信號震蕩,且開關(guān)器件本身的可靠性導(dǎo)致其電氣防護(hù)特性也是有限的,因此這種方式會(huì)導(dǎo)致交換設(shè)備本身的可靠性降低[5].所以我們需要通過軟件控制來使用雙網(wǎng)口冗余技術(shù),以保證視頻編碼系統(tǒng)的穩(wěn)定性及實(shí)時(shí)性.
本文的目的是使用海思Hi353x開發(fā)板實(shí)現(xiàn)一種雙網(wǎng)口冗余的視頻編解碼系統(tǒng),使得該系統(tǒng)穩(wěn)定可靠[6].Hi3531是針對多路D雙網(wǎng)口1和多路高清DVR和NVR產(chǎn)品應(yīng)用開發(fā)的一款專業(yè)高端SOC芯片.Hi3531內(nèi)置高性能雙核A9處理器、高達(dá)5路1080P實(shí)時(shí)多協(xié)議編解碼能力的引擎和專用TOE網(wǎng)絡(luò)加速模塊,并且支持2個(gè)GMAC接口,可以實(shí)現(xiàn)雙網(wǎng)口冗余.
本文采用的技術(shù)方案如下:
雙網(wǎng)口冗余采用的方法是交換設(shè)備上的2個(gè)邏輯端口分別對應(yīng)2個(gè)硬件接口,2個(gè)硬件接口分別通過2根網(wǎng)線與交換設(shè)備上的2個(gè)硬件接口配合,連接成2個(gè)通路,2個(gè)通路互相冗余,一旦一個(gè)邏輯端口對應(yīng)的通路壞掉,則可以自動(dòng)切換至另一個(gè)邏輯端口對應(yīng)的通路上去.這種雙網(wǎng)口冗余就是把2個(gè)網(wǎng)口當(dāng)成1個(gè)網(wǎng)口使用,起到冗余的作用.
雙網(wǎng)口冗余[7]使用的技術(shù)是鏈路聚合技術(shù),也稱為捆綁技術(shù).其實(shí)是將幾條物理鏈路“組合”成邏輯上的一條數(shù)據(jù)通道,稱為1條聚合鏈路.將交換機(jī)與防火墻之間的2條物理鏈路link1和link2組成1條邏輯鏈路,該鏈路在邏輯上是一個(gè)整體,鏈路內(nèi)部組成和傳輸細(xì)節(jié)對上層是透明的,對外不再使用物理端口號fe1或fe2,而是使用冗余網(wǎng)口號(可命名為rd1).冗余網(wǎng)口對上層來說是一個(gè)整體,冗余設(shè)備由什么物理設(shè)備組成、物理設(shè)備之間如何進(jìn)行協(xié)調(diào)動(dòng)態(tài)備份,對上層都是透明的.冗余網(wǎng)口內(nèi)部聚合的物理鏈路共同完成收發(fā)任務(wù)并相互備份,只要還存在能正常工作的成員,整個(gè)傳輸鏈路就不會(huì)失效.也就是說如果link1失效,它的任務(wù)會(huì)迅速轉(zhuǎn)移到link2上,因此編碼板與交換設(shè)備之間的連接不會(huì)中斷.這種實(shí)現(xiàn)雙網(wǎng)口冗余的技術(shù)簡單易用,很適用于雙接口的設(shè)備上.
在本系統(tǒng)中,整個(gè)雙網(wǎng)口冗余的視頻編解碼系統(tǒng)包括視頻編碼模塊、視頻解碼模塊、冗余網(wǎng)絡(luò)模塊和IO傳輸模塊,如圖1所示.
在視頻編碼模塊,我們使用了海思Hi3531開發(fā)板進(jìn)行視頻編碼,編碼模塊主要由圖2所示的4個(gè)部分組成,分別為視頻輸入、視頻處理、視頻編碼、視頻輸出[8].
1) 視頻輸入(VI).將芯片外的視頻數(shù)據(jù),通過ITU-R BT656/601/1120接口或digital camera接口,存入到指定的內(nèi)存區(qū)域.在此過程中,VI可以對接收到的原始視頻圖像數(shù)據(jù)進(jìn)行裁剪、水平垂直縮小和水平垂直翻轉(zhuǎn),并輸出多個(gè)不同分辨率的視頻流及對應(yīng)的直方圖信息.
2) 視頻處理(VPSS).該部分完成視頻的圖像增強(qiáng)、去噪、De-Interlace、OSD疊加、銳化等功能.也就是對輸入的視頻進(jìn)行前期的處理.
3) 視頻編碼(VENC).本部分支持多路實(shí)時(shí)編碼,且每路編碼彼此獨(dú)立,編碼協(xié)議和編碼profile可以不同.在支持視頻編碼的同時(shí),調(diào)度VPP模塊對視頻圖像進(jìn)行視頻前處理,調(diào)度REGION模塊對編碼圖像內(nèi)容進(jìn)行疊加和遮擋.VENC的數(shù)據(jù)流程如圖3所示.
其中編碼通道可分為主編碼通道和次編碼通道,能夠同時(shí)輸出2路碼流:一路主碼流,另一路為次碼流.
4) 視頻輸出(VO).該部分是本模塊的最后一步,輸入的視頻經(jīng)過VNEC模塊編碼后,由輸出模塊傳給交換設(shè)備,在這個(gè)過程中采用雙網(wǎng)口冗余來進(jìn)行傳輸,保證了傳輸?shù)目煽啃?
圖2 視頻編碼模塊
圖3 VENC的數(shù)據(jù)流程圖
這4個(gè)部分組成了本系統(tǒng)的視頻編碼模塊,完成了視頻從輸入到編碼、再輸出的整個(gè)過程.
在視頻解碼模塊,我們使用了海思Hi3536開發(fā)板進(jìn)行視頻編碼,解碼模塊主要由圖4所示的4個(gè)部分組成,分別為視頻輸入、視頻處理、視頻解碼、視頻輸出[9].
1) 視頻輸入(VI).將芯片外的視頻數(shù)據(jù),也就是視頻編碼模塊得到編碼后的視頻通過IO模塊傳輸過來,存入到指定的內(nèi)存區(qū)域.
圖4 視頻解碼模塊
2) 視頻處理(VPSS).該部分完成視頻的圖像增強(qiáng)、去噪、De-Interlace、OSD疊加、銳化等功能.也就是對輸入的視頻進(jìn)行前期的處理,同編碼模塊的視頻處理部分.
3) 視頻解碼(VDEC).本部分支持多路實(shí)時(shí)解碼,且每路解碼彼此獨(dú)立,解碼協(xié)議和解碼profile可以不同.其中解碼通道可分為主編碼通道和次編碼通道,能夠同時(shí)輸出2路碼流:一路主碼流,一路為次碼流.
4) 視頻輸出(VO).該部分是本模塊的最后一步,輸入的視頻經(jīng)過VDEC部分解碼以后,由輸出模塊傳給屏幕.
這4個(gè)部分組成了本系統(tǒng)的視頻解碼模塊,完成了視頻從輸入到解碼、再輸出的整個(gè)過程,將由編碼模塊傳來的視屏解碼后輸出到屏幕上,完成了視頻安防監(jiān)控系統(tǒng)的最后部分,保障了視頻監(jiān)控系統(tǒng)的穩(wěn)定性.
雙網(wǎng)口配置設(shè)置虛擬為一個(gè)網(wǎng)口,實(shí)現(xiàn)網(wǎng)口的冗余,其中一個(gè)網(wǎng)口壞掉后網(wǎng)絡(luò)通信仍可正常使用,實(shí)現(xiàn)網(wǎng)口層面的負(fù)載均衡和高可用性[10].
主要是在Linux開發(fā)板上進(jìn)行配置,具體步驟如下:
1) 進(jìn)入網(wǎng)口配置目錄;
2) 創(chuàng)建雙網(wǎng)口綁定配置文件;
3) 修改綁定網(wǎng)口(建議:在網(wǎng)口綁定前,先對先前的網(wǎng)口配置信息進(jìn)行備份),分別修改網(wǎng)口1和網(wǎng)口2的配置;
4) 配置modprobe參數(shù);
5) 關(guān)閉網(wǎng)絡(luò)管理程序.
在本模塊里我們采用了select[11]模型,這是一種IO多路復(fù)用模型.一般網(wǎng)絡(luò)程序,使用accept,recv等接口.則服務(wù)端,在調(diào)用accept時(shí),如果此時(shí)沒有客戶端連接則服務(wù)端需要等待.recv也是一樣.這種情況下服務(wù)端只能阻塞等待.select模塊,則是使用select函數(shù)去查詢你使用到的socket的狀態(tài).比如,是否有客戶端連接,是否有客戶端發(fā)送數(shù)據(jù).這樣可以針對有數(shù)據(jù)的socket進(jìn)行操作.避免盲目等待.
最主要的一個(gè)函數(shù)就是select函數(shù).該函數(shù)有5個(gè)參數(shù).
maxfdp:是一個(gè)整數(shù)值,是指集合中所有文件描述符(socket)的范圍,即所有文件描述符的最大值加1.
readfds,writefds,errorfds都是fd_set類型的指針,是1個(gè)socket的數(shù)組指針.
readfds:進(jìn)行可讀操作查詢的文件描述符的集合,不需要讀操作,則可傳入NULL.
writefds:進(jìn)行可寫操作查詢的文件描述符的集合,不需要寫操作,則可傳入NULL.
errorfds:進(jìn)行文件異常錯(cuò)誤查詢的文件描述符,也可以傳入NULL.
timeout:第一,若將NULL以形參傳入,即不傳入時(shí)間結(jié)構(gòu),就是將select置于阻塞狀態(tài),一定等到監(jiān)視文件描述符集合中某個(gè)文件描述符發(fā)生變化為止;第二,若將時(shí)間值設(shè)為0秒0毫秒,就變成一個(gè)純粹的非阻塞函數(shù),不管文件描述符是否有變化,都立刻返回繼續(xù)執(zhí)行;第三,timeout的值大于0,這就是等待的超時(shí)時(shí)間,即select在timeout時(shí)間內(nèi)阻塞,超時(shí)時(shí)間之內(nèi)有事件到來就返回,否則在超時(shí)后不管怎樣一定返回.
返回值:如果有錯(cuò)誤,則返回值為-1,如果超時(shí)返回則返回值為0,如果文件描述符里面有變化,則返回值大于0.
本文描述了一種雙網(wǎng)口冗余的視頻編碼方法及系統(tǒng),是安防視頻系統(tǒng)的一部分,所以要求高實(shí)時(shí)性和高穩(wěn)定性.我們將視頻通過Hi3531進(jìn)行視頻編碼后傳給IO模塊輸出,在輸出過程中我們采用了select多路復(fù)用實(shí)現(xiàn)多路傳輸,并利用冗余模塊保證了一個(gè)網(wǎng)口斷掉,視頻可以在另一個(gè)網(wǎng)口上繼續(xù)傳輸,視頻傳輸?shù)紿i3536進(jìn)行解碼,最終輸出到屏幕上.
[1]雷玉堂. 安防視頻監(jiān)控實(shí)用技術(shù)[M]. 北京: 電子工業(yè)出版社, 2012
[2]丁鑫. 基于網(wǎng)絡(luò)冗余技術(shù)的應(yīng)用[J]. 工業(yè)控制計(jì)算機(jī), 2014, 27(5): 162-162
[3]王華, 劉冰, 劉煥敏, 等. 一種雙網(wǎng)實(shí)時(shí)串口通信的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2017, 26(3): 234-238
[4]劉錫祥, 徐曉蘇, 劉建娟, 等. VxWorks環(huán)境下基于TCP/IP協(xié)議的多網(wǎng)卡數(shù)據(jù)傳輸與雙網(wǎng)卡冗余設(shè)計(jì)[J]. 工業(yè)儀表與自動(dòng)化裝置, 2006, 36(3): 30-32
[5]張士民. 基于TCP/IP網(wǎng)絡(luò)環(huán)境下網(wǎng)卡冗余熱備的實(shí)現(xiàn)[J]. 信息技術(shù)與信息化, 2016, 41(11): 26-28
[6]皮玉華. 基于海思Hi3531的高清視頻解碼器硬件系統(tǒng)設(shè)計(jì)[J]. 中國公共安全: 學(xué)術(shù)版, 2016, 15(2): 124-126
[7]劉玉賓. 基于VxWorks的雙冗余熱切換以太網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 天津: 天津大學(xué), 2008
[8]于鳳. 基于Hi3511的H.264編解碼器的設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安: 西安電子科技大學(xué), 2013
[9]馬林. 基于 H.264的遠(yuǎn)程視頻傳輸軟件系統(tǒng)的開發(fā)[D]. 長春: 吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 2014
[10]王哲梁. 基于嵌入式Linux的遠(yuǎn)程視頻監(jiān)控系統(tǒng)[D]. 杭州: 杭州電子科技大學(xué), 2014
[11]劉運(yùn)強(qiáng), 王匯源. Socket和多線程在視頻傳輸中的應(yīng)用[J]. 山東大學(xué)學(xué)報(bào): 工學(xué)版, 2004, 34(2): 46-50