呂 鹍,高譽菊,張 剛
(太原理工大學信息工程學院,太原山西030024)
中間件[1]是一種獨立的系統(tǒng)軟件或服務程序,一般作用于服務端與客戶端之間,起到信息管理、傳遞等作用。而針對多媒體流的流媒體中間件可以極大地降低多媒體網(wǎng)絡(luò)通信的復雜性,很好地管理和規(guī)范數(shù)據(jù)流在系統(tǒng)網(wǎng)絡(luò)中的傳輸。但是當今市面上針對視頻流媒體的中間件卻很難見到,大多數(shù)視頻監(jiān)控系統(tǒng)都是采取編碼服務器與客戶端直接進行點對點連接的網(wǎng)絡(luò)通信模式,作為一種大數(shù)據(jù)流媒體,對于視頻流數(shù)據(jù)在網(wǎng)絡(luò)中進行管理、調(diào)度、傳輸都有很高的要求,傳統(tǒng)的視頻通信原理已經(jīng)漸漸無法滿足這些需求。所以必須引入流媒體中間件技術(shù)來進行管理。為此本設(shè)計在編碼服務器與客戶端之間加入視頻流媒體中間件來作為一個第三方軟件控制、集中管理、調(diào)配解碼客戶端對視頻數(shù)據(jù)的要求,實現(xiàn)多點對多點的通信模式,并且可以減少數(shù)據(jù)通道,最大化地利用網(wǎng)絡(luò)資源。
“點—點”數(shù)據(jù)傳輸[2]:這種傳輸模式是直接對話,客戶端直接向編碼服務端呼叫,建立連接,然后編碼服務端向客戶端傳輸數(shù)據(jù)。在“一路對一路”的數(shù)據(jù)傳輸應用中因其實現(xiàn)較為簡單、方便,所以使用較為廣泛,但隨著市場及客戶的需求,“多路對多路”的視頻數(shù)據(jù)傳輸模式在實際應用中顯得越來越迫切,如果繼續(xù)基于“點—點”數(shù)據(jù)傳輸模式來實現(xiàn)“多路對多路”的傳輸模式(如圖1所示),有N路客戶端要與M路編碼端建立連接通信,那么就需要N×M路通道來實現(xiàn),如果M與N很大,則N×M更大,這樣網(wǎng)絡(luò)傳輸是很占用網(wǎng)絡(luò)資源并且相當復雜,很容易產(chǎn)生網(wǎng)絡(luò)擁塞現(xiàn)象,幾乎不可能實現(xiàn)。
圖1 “點—點”數(shù)據(jù)傳輸模式
流媒體中間件[3]:流媒體中間件在兩個獨立應用層之間起到管理、調(diào)度、交換信息、信息傳遞等作用。本設(shè)計中,流媒體中間件用來處理視頻監(jiān)控系統(tǒng)中視頻流數(shù)據(jù)在網(wǎng)絡(luò)上的傳遞和管理,如圖2所示,N路客戶端與M路編碼端連接通信,只需M+N路通道來實現(xiàn),占用網(wǎng)絡(luò)資源較少,而且規(guī)范了網(wǎng)絡(luò)傳輸?shù)臉藴?,克服了網(wǎng)絡(luò)擁塞現(xiàn)象,使系統(tǒng)由原始的編碼端與客戶端之間的“點—點”數(shù)據(jù)傳輸升級到了“點—塊—點”傳輸,而且避免了客戶端與編碼端的直接對話,在數(shù)據(jù)通路數(shù)量比較大的時候,可以很大限度地減輕編碼端的資源占用,優(yōu)勢更加明顯。
圖2 “點—塊—點”數(shù)據(jù)傳輸模式
本設(shè)計中間件在Linux平臺中用QT4[4]設(shè)計實現(xiàn),以SIP協(xié)議[5]作為控制協(xié)議來建立會話,利用RTP協(xié)議來傳輸視頻碼流。
視頻流中間件的工作過程與數(shù)據(jù)的傳輸過程是相反的,如圖3所示,中間件在網(wǎng)絡(luò)上進行SIP注冊以后,首先等待客戶端對中間件進行呼叫,呼叫信息中包含了客戶端用戶名、用戶權(quán)限等級、用戶IP地址、申請的通道端口、想要呼叫哪路攝像頭的視頻信息等。中間件將這些信息進行鑒別以后,根據(jù)客戶端不同用戶的權(quán)限,向相應的編碼攝像頭發(fā)送呼叫,通過這些呼叫與對應的編碼端建立SIP會話通道,然后通過RTP協(xié)議建立RTP數(shù)據(jù)傳輸通道,接收壓縮編碼的數(shù)據(jù),中間件首先將這些數(shù)據(jù)存入一定大小的緩沖區(qū),再給與對中間件發(fā)起呼叫的客戶端回應,并且與其建立會話通道,將剛收到的緩沖區(qū)內(nèi)數(shù)據(jù)傳送給客戶端進行處理。
圖3 流媒體中間件工作原理圖
本設(shè)計的流媒體中間件是專門針對于連接編碼端與客戶端之間視頻流數(shù)據(jù)的中間件。作為視頻監(jiān)控系統(tǒng)的一部分,中間件啟動后首先要在主線程中完成網(wǎng)上代理注冊,即向SIP注冊服務器登記自己的代理用戶名、IP地址、端口信息等。注冊完成后,可以從注冊服務器查看到中間件的一些信息,如圖4所示。
當客戶端想要獲取某路視頻信息的時候,向中間件發(fā)送呼叫請求,中間件接收到呼叫請求后,會對請求所攜帶的信息進行鑒別,這時候分兩種情況來做出處理。
第一種情況:若客戶端請求的這一路攝像頭編碼視頻信息之前沒有被其他的客戶端申請呼叫過,則中間件會先對這一路編碼攝像頭發(fā)出新的呼叫。當中間件對編碼攝像頭的呼叫被編碼端響應后,視頻流數(shù)據(jù)會沿著中間件與編碼攝像頭的會話通道傳送給中間件。中間件得到數(shù)據(jù)后,再給之前呼叫的客戶端發(fā)送響應信息,從而再與客戶端建立會話通路,最后將視頻數(shù)據(jù)傳送給客戶端。
第二種情況:客戶端請求視頻信息的編碼攝像頭之前已經(jīng)被其他客戶端呼叫過,也就是說已經(jīng)出現(xiàn)過第一種情況。這時中間件已經(jīng)開始從相應的這一路攝像頭編碼端接收這一路編碼后的視頻數(shù)據(jù)。中間件就不再向那一路編碼端發(fā)送請求,而是開辟一條新的線程,然后直接響應呼叫的客戶端,在新的線程中將數(shù)據(jù)傳輸過去。
中間件處理客戶端的視頻數(shù)據(jù)請求呼叫的流程如圖5所示。在整體的工作流程實現(xiàn)之后,對中間件進行了界面的設(shè)計,管理者可以直接通過界面進行操作實現(xiàn)相關(guān)功能。界面可以直接體現(xiàn)出當時系統(tǒng)中訪問的客戶端的數(shù)量、IP地址、客戶端用戶名等,管理者也可以直接對其進行操作,例如斷開某一客戶的鏈接等??蛻舳说男畔⑼ㄟ^中間件與客戶端的“交流”使中間件獲得,并且通過程序直接體現(xiàn)在界面中。
圖5 中間件處理客戶端呼叫流程
中間件的實現(xiàn)從最頂層、面向用戶的界面開始。在QT[6]中建立一個新的QT Gui應用工程,這個工程里包含了4種不同的類別,分別是頭文件、源文件、界面文件、資源文件。其中頭文件和源文件用來存放要實現(xiàn)功能的具體程序,界面文件可以直接讓用戶通過對控件的選擇來完成對界面的基本設(shè)計,然后通過對控件完成信號槽的鏈接,通過對控件的觸發(fā)運行某些程序。資源文件是存放一些對界面進行美化的圖、Logo等。
如圖6所示,本文設(shè)計的中間件界面有2個按鈕可供用戶進行點擊。這2個按鈕分別是注冊和退出,起到的功能也是注冊功能和退出功能。當程序運行時,單擊界面的這2個按鈕,則會直接運行這2個函數(shù)中的程序,完成注冊和退出的功能。這就是QT中的信號槽體制,也就是通過對界面控件的觸發(fā)而運行相應的程序。圖6中其他控件不可以通過用戶點擊直接運行,則需要信號槽的另一種用法來進行管理。例如“攝像頭連接狀態(tài)”這一控件要實現(xiàn)的功能是可以直接體現(xiàn)當前這一路攝像頭是否有數(shù)據(jù)傳到中間件,當有數(shù)據(jù)的時候,顯示為成功,可是這里無法點擊,要完成顯示狀態(tài)的改變,本文設(shè)計了利用定時器來進行定時刷新的方法。
圖6 管理4路攝像頭的中間件界面(截圖)
定時器的設(shè)計有許多種,包括利用系統(tǒng)自帶庫,C語言庫等。本文選用QT自帶的定時器,運用這種定時器要在serve2send.cpp中包含頭文件QTime.h。QTime的具體用法是:
程序的含義是指每隔指定的時間運行一次連接的函數(shù)。本文將間隔時間設(shè)定為1 s。通過定時器,每1 s運行一次status()函數(shù)。status()函數(shù)的功能是得到客戶端的IP地址,呼叫本路攝像頭視頻信息的客戶端數(shù),以及中間件是否與攝像頭編碼端有數(shù)據(jù)傳遞。然后將這些信息在中間件的界面中顯示出來。通過每秒監(jiān)測,可以不停地刷新中間件當前的狀態(tài),并且顯示給管理員進行管理操作。
在之前的原理分析和設(shè)計方案中已經(jīng)確定了中間件的數(shù)據(jù)轉(zhuǎn)發(fā)機制的實現(xiàn)方案:當某一路攝像頭編碼視頻信息在中間件中第一次被某客戶端呼叫的時候,中間件才會向該攝像頭進行呼叫請求來獲取這一路編碼后的視頻信息,然后再傳遞給客戶端。具體的實現(xiàn)方法是利用SIP協(xié)議來進行信令控制,然后利用RTP協(xié)議進行傳輸數(shù)據(jù)。
流媒體中間件是介于編碼服務器和多畫面[7]客戶端之間工作的,因此中間件的測試需要加入到整個視頻系統(tǒng)中,測試采用4路攝像頭進行實時采集,然后在4個達芬奇平臺進行D1分辨力的實時編碼,與流媒體中間建立連接,多畫面客戶端分別呼叫該4路進行視頻數(shù)據(jù)請求。最后結(jié)果流媒體中間件工作界面如圖7所示,表明4路通道均通過流媒體中間件與編碼端連接成功;多畫面客戶端同步實時顯示4路攝像頭采集畫面(如圖8所示),視頻畫面質(zhì)量和實時性較好。
圖7 流媒體中間件工作界面(截圖)
圖8 多畫面客戶端實時顯示(截圖)
本設(shè)計完全實現(xiàn)了流媒體中間件在視頻系統(tǒng)中的集中管理、數(shù)據(jù)調(diào)度、數(shù)據(jù)傳輸和轉(zhuǎn)發(fā)等功能,使系統(tǒng)由原始的編碼服務器端與客戶端之間的“點—點”數(shù)據(jù)傳輸升級到了“點—塊—點”傳輸,有效地降低了復雜視頻通信對網(wǎng)絡(luò)帶寬的需求,很大限度地減輕服務器的資源占用,優(yōu)勢明顯,真正滿足了用戶在任何地點、任何時間隨意觀看多路網(wǎng)絡(luò)視頻信息的需求,為網(wǎng)絡(luò)視頻通信的發(fā)展起到了一定推動作用,實用價值很高。
[1]谷和啟.中間件主流技術(shù)及其未來發(fā)展精解[EB/OL].[2013-06-02].http://articles.e-works.net.cn/soa/article28721.htm.
[2]溫仁鳳,馮俊杰,陳金坤.點對點通信軟件設(shè)計[J].智能計算機與應用,2013(1):13-16.
[3]肖丹,祝家鈺.基于CORBA的自適應流媒體中間件系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機與信息技術(shù),2007(8):8-10.
[4]劉艷青,蘇桂蓮.基于Qt4的圖形用戶界面程序的設(shè)計與實現(xiàn)[J].現(xiàn)代計算機,2009,3(3):170-172.
[5]萬曉榆,張溢華,樊自甫.基于SIP的視頻會議系統(tǒng)視頻模塊的設(shè)計與實現(xiàn)[J].電視技術(shù),2009,33(8):99-102.
[6]于邦偉,鄧華秋.基于Qt/Embedded的嵌入式數(shù)字監(jiān)控系統(tǒng)控制界面的實現(xiàn)[J].電視技術(shù),2011,35(24):25-28.
[7]胡健生,張倩,蔡艷軍.基于ARM11+FPGA的多路視頻監(jiān)控系統(tǒng)關(guān)鍵技術(shù)研究[J].電視技術(shù),2011,35(21):120-123.