袁鑫攀 彭成
基于node.js的遠(yuǎn)程視頻教育系統(tǒng)
袁鑫攀 彭成
遠(yuǎn)程視頻教育突破了時(shí)空的界線(xiàn),具有資源共享、快速靈活等優(yōu)點(diǎn)。論文采用Nodejs服務(wù)器技術(shù)實(shí)現(xiàn)了音視頻的Web服務(wù)器; 結(jié)合WebRTC規(guī)范的Web API接口實(shí)現(xiàn)了客戶(hù)端音視頻交互模塊,設(shè)計(jì)實(shí)時(shí)互動(dòng)的遠(yuǎn)程視頻教育系統(tǒng)。
遠(yuǎn)程視頻教育是指通過(guò)音頻、視頻(直播或錄像)以及包括實(shí)時(shí)和非實(shí)時(shí)在內(nèi)的計(jì)算機(jī)技術(shù)把課程傳送到校園外的教育。論文主要采用Node.js服務(wù)器技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了WebRTC音視頻通信的信令實(shí)時(shí)服務(wù)器,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)集音視頻交互、課件點(diǎn)播、白板寫(xiě)作等功能的遠(yuǎn)程視頻教育系統(tǒng)。
論文中視頻會(huì)議系統(tǒng)主要分為三層結(jié)構(gòu):人機(jī)交互層主要負(fù)責(zé)用戶(hù)的接口。業(yè)務(wù)層主要負(fù)責(zé)實(shí)現(xiàn)用戶(hù)的功能;控制層完成主要完成媒體流連接信令的建立以及控制,資源請(qǐng)求響應(yīng)的路由處理控制。持久層采用MongoDB數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù)。網(wǎng)絡(luò)層將采用WebRTC中的網(wǎng)絡(luò)傳輸協(xié)議控制流媒體的傳輸。
遠(yuǎn)程視頻教育系統(tǒng)的關(guān)鍵技術(shù)模塊是音視頻實(shí)時(shí)處理,論文主要闡述系統(tǒng)服務(wù)端的實(shí)現(xiàn)和視頻會(huì)議模塊。
(一)系統(tǒng)服務(wù)端的實(shí)現(xiàn)
1.Web服務(wù)器的實(shí)現(xiàn)
Node.js是一個(gè)服務(wù)器端JavaScript解釋器。Node.js的每個(gè)連接發(fā)射一個(gè)在Node引擎的進(jìn)程中運(yùn)行的事件,Node.js內(nèi)建了HTTP服務(wù)器,其服務(wù)器代碼主要在Webserver.js中。
2.實(shí)時(shí)服務(wù)器的實(shí)現(xiàn)
Websocket是基于TCP協(xié)議,其目的能讓W(xué)eb應(yīng)用能夠想桌面網(wǎng)絡(luò)應(yīng)用具有實(shí)時(shí)的通訊能力。在Nodejs的編程框架里,采用異步的事件驅(qū)動(dòng)方式來(lái)開(kāi)發(fā)Websocke服務(wù)器。為了實(shí)現(xiàn)連接之間的通信和消息的廣播,設(shè)計(jì)實(shí)現(xiàn)了一個(gè)manager類(lèi),給每一個(gè)連接創(chuàng)建一個(gè)id,在內(nèi)存中維護(hù)一個(gè)連接鏈表,并提供了上線(xiàn)和下線(xiàn)的自動(dòng)管理Websocket服務(wù)器的設(shè)計(jì)采用訂閱通知的設(shè)計(jì)模式,客戶(hù)端訂閱服務(wù)器制定的消息,當(dāng)事件發(fā)生將自動(dòng)通知客戶(hù)端。
(二)視頻會(huì)議模塊的實(shí)現(xiàn)
視頻會(huì)議模塊是系統(tǒng)業(yè)務(wù)功能的核心模塊,它在已實(shí)現(xiàn)WebSocket實(shí)時(shí)服務(wù)器上,完成呼叫的建立、媒體流的傳輸?shù)裙δ?,最終建立音視頻的通訊。
1.音視頻的采集
首先瀏覽器會(huì)通過(guò)websocket與服務(wù)器進(jìn)行連接,如果連接成功,瀏覽器的設(shè)備函數(shù)get User Media調(diào)用時(shí)會(huì)提示用戶(hù)是否允許調(diào)用當(dāng)前媒體設(shè)備的音視頻設(shè)備,比如攝像頭和麥克風(fēng)。如果用戶(hù)選擇允許,該函數(shù)的回調(diào)函數(shù)success Callback將會(huì)觸發(fā)stream_ created事件。配置音視頻的實(shí)例如下:
Media Stream 接口定義的屬性方法和get User Media函數(shù)為獲取音視頻數(shù)據(jù)提供了有效的途徑,降低了開(kāi)發(fā)人員獲取本地媒體設(shè)備的難度。
2.音視頻的傳輸
在音視頻的通訊中,采用Web RTC規(guī)范的RTC Peer Connectiong接口定義的一些列的屬性和方法,用來(lái)處理客戶(hù)端的信令,連接建立,媒體傳輸?shù)热蝿?wù)。視頻會(huì)議通訊連接的交互模式由發(fā)起連接發(fā)送請(qǐng)求給接聽(tīng)者,再有接聽(tīng)者發(fā)送應(yīng)答給發(fā)起者,發(fā)送方和接收方記性交換SDP。通過(guò)交換SDP分別告訴雙方的網(wǎng)絡(luò)環(huán)境以及媒體流格式,達(dá)成協(xié)議,將通過(guò)WebSocket實(shí)時(shí)服務(wù)器的轉(zhuǎn)發(fā)信令,建立了呼叫方和接收方之間的握手協(xié)議。這樣就可以進(jìn)行正常的視頻會(huì)議了。
論文以視頻遠(yuǎn)程教育系統(tǒng)中關(guān)鍵部件-音視頻處理模塊為例詳細(xì)的描述了系統(tǒng)的實(shí)現(xiàn)。Node.js和WebRTC技術(shù)目前并不完善,瀏覽器兼容性還存在很大問(wèn)題,推廣到商用任重而道遠(yuǎn)。隨著Node.js 和WebRTC技術(shù)的普及,可以想象所有的瀏覽器都支持WebRTC技術(shù)標(biāo)準(zhǔn),人們將擁有一個(gè)快速便捷而且免費(fèi)的音視頻交互平臺(tái),音視頻的應(yīng)用將得到更寬廣的發(fā)展。
[1]馮堅(jiān).基于云計(jì)算的現(xiàn)代遠(yuǎn)程教育展望[J].
[2]屈振華,李慧云,張海濤,龍顯軍.WebRTC技術(shù)初探.[J].電信科學(xué).2012/1.
[3]孫凱龍.基于WebRTC的視頻會(huì)議系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).[J].
(作者單位:湖南工業(yè)大學(xué)計(jì)算機(jī)通信學(xué)院)