何洪磊,朱文明
(1. 連云港職業(yè)技術(shù)學院 信息工程學院,江蘇 連云港 222006;2. 深圳信息職業(yè)技術(shù)學院 公共課教學部,廣東 深圳 518172)
在互聯(lián)網(wǎng)時代,在線教學部分替代了傳統(tǒng)的課堂授課。有一些實踐性很強的課程,例如電子信息類、機械類課程,傳統(tǒng)的課堂授課效果并不理想;而在線教學平臺不但提供課程內(nèi)容,而且提供了實驗環(huán)境,學生通過在線實驗?zāi)軌蚝芎玫卣莆照n程知識點[1-2]。
本文基于WebRTC、Canvas、Web Audio等技術(shù),提出的一種去中心化的在線教學平臺解決方案。該平臺不但提供教學信息的發(fā)布和查詢功能,而且提供了白板系統(tǒng)、在線PPT、語音視頻通信、MOOC系統(tǒng)、桌面共享、在線錄制和回放等功能。平臺的服務(wù)器只負責前期用戶信息交換工作,而教學過程中的通信采用P2P模式,減輕了服務(wù)器的壓力,保障了通信的可靠性。在大規(guī)模的并發(fā)教學活動中,該在線教學平臺可以有效降低故障率,保證教學過程的服務(wù)質(zhì)量。
在線教學平臺的功能模塊設(shè)計如圖1所示,包括教學的分類管理、用戶管理、信息管理、在線教學、學習資料管理、公告通知等模塊。平臺的整個操作是由系統(tǒng)管理員、教師、學生共同完成。
去中心化的教學平臺由服務(wù)器端、教師端、學生端構(gòu)成,如圖2所示。教師端和學生端使用PC機或者移動終端,需要連接攝像頭、麥克風、耳機,這些設(shè)備用于在線學習使用。服務(wù)器端的Web和應(yīng)用服務(wù)提供平臺的理論學習、學生管理等功能;實驗服務(wù)提供在線實驗編程服務(wù);信令服務(wù)和stun服務(wù)提供在線學習的服務(wù)。

圖1 在線教學平臺的功能模塊

圖2 去中心化的在線教學平臺架構(gòu)
圖2中,理論知識模塊的功能由通信①②實現(xiàn)。其中通信①是教師對課件、習題、教學視頻等教學資料的管理;通信②是學生對課程的理論知識學習。
實驗知識模塊的功能由通信⑦⑧實現(xiàn)。其中通信⑦是教師對實驗環(huán)境的管理或?qū)嶒灥脑诰€演示,通信⑧是學生進行在線實驗練習。
在線學習模塊由通信①②③④⑤⑥⑨實現(xiàn),通信①②對教師和學生身份驗證,通信⑤⑥是教師和學生分別獲取自己的公網(wǎng)地址,通信③④是教師和學生之間的信令傳遞。通信⑨是教師和學生之間直接建立通信連接,進行在線交流。
在線教學平臺的體系結(jié)構(gòu)如圖3所示。服務(wù)器端包括數(shù)據(jù)層和服務(wù)層。諸如教學分類管理、用戶管理、信息管理、學習資料管理等模塊的業(yè)務(wù)邏輯均由服務(wù)器端實現(xiàn)。
用戶端只需要瀏覽器,瀏覽器通過DOM顯示用戶界面,運行 JavaScript引擎支持在線教學模塊WebRTC、在線ppt、視頻通信、白板模塊、桌面共享等。WebRTC模塊負責兩個瀏覽器之間的通信,其他幾個模塊產(chǎn)生的信息交給 WebRTC模塊并傳輸?shù)綄Ψ健?/p>

圖3 在線教學平臺的體系結(jié)構(gòu)
當用戶訪問服務(wù)器時,通過https協(xié)議通信。當用戶之間進行在線教學時(假設(shè)A為教師瀏覽器,B為學生瀏覽器),瀏覽器之間使用UDP或者TCP協(xié)議通信。
服務(wù)器是在線教學平臺的中心節(jié)點,提供Web服務(wù)、信令服務(wù)、ICE服務(wù)。其中,Web服務(wù)器使用Windows Server 2012操作系統(tǒng)的IIS搭建;信令服務(wù)器使用 node.js的 WebSocket模塊搭建[3-4];ICE服務(wù)器通過在Centos7上安裝coturn搭建,因為coturn功能比較齊全,既可以提供turn服務(wù),又可以提供stun服務(wù)[5-7]。
Web服務(wù)器的安裝過程比較簡單,使用IIS配置即可。因為使用了https協(xié)議,所以需要為服務(wù)器安裝證書,并選擇使用SSL協(xié)議,端口使用默認的443[8]。
教學分類管理、用戶管理、信息管理、學習資料管理等模塊的業(yè)務(wù)邏輯由服務(wù)器端實現(xiàn),通過asp.net腳本和SQL Server數(shù)據(jù)庫完成。
在線教學模塊是平臺的核心,由瀏覽器端的JavaScript引擎完成。其中,WebRTC模塊是負責用戶之間通信的核心,白板、PPT、桌面共享、語音視頻是完成教學過程的工具,都必須依賴WebRTC模塊完成通信。
2.2.1 WebRTC模塊的實現(xiàn)
當進行遠程語音和視頻交流時,教師和學生須連接到服務(wù)器,服務(wù)器將的他們的信息轉(zhuǎn)發(fā),教師和學生就可以直接通信,將攝像頭和麥克捕獲的語音、視頻流發(fā)送到對方。
實現(xiàn)的關(guān)鍵代碼如下:

2.2.2 白板模塊
白板模塊由畫板(canves)和繪圖工具條構(gòu)成[9-11]。畫板是一個900×650像素的區(qū)域,工具條內(nèi)的工具按鈕包括保存、清除、撤銷、恢復、鉛筆、直線、矩形、圓、文字、圖片、橡皮、寬度、大小、顏色。
教師端白板的工程流程如圖4所示。在工具條初始化后,JavaScript引擎監(jiān)聽工具條的鼠標事件,在某個按鈕被單擊之后,判斷這個按鈕的命令類型。

圖4 教師端的白板工作流程圖
如果命令類型是非繪圖命令,直接執(zhí)行。如果命令類型是繪圖命令(例如“鉛筆”工具),則首先修改命令參數(shù)和按鈕樣式,然后監(jiān)聽畫板的鼠標事件:鼠標鍵按下將flag設(shè)置為1,鼠標鍵抬起flag設(shè)置為0;鼠標移動并且flag為1時,清空畫板,載入上次的畫板緩存,執(zhí)行本次繪圖操作。繼續(xù)監(jiān)聽鼠標事件,如果鼠標一直在移動,循環(huán)執(zhí)行上述步驟,如果鼠標抬起,說明本次繪圖動作結(jié)束,將當前的畫板內(nèi)容存入緩存,并且將本次命令和參數(shù)轉(zhuǎn)換成標準格式存放到堆棧中。通過這個堆棧,可以實現(xiàn)“撤銷”“恢復”等功能。不同瀏覽器之間的白板同步通信就是通過這個堆棧的內(nèi)容傳遞實現(xiàn)的[12-14]。
在虛擬教室內(nèi),教師和學生都有唯一的UserID。為了保證通信的可靠,設(shè)計了如圖5所示的白板通信過程:
(1)學生向教師發(fā)送 hello報文,報文中序列號seq設(shè)置為 0,表示第一次通信,UserID字段中包括發(fā)送方和接收方的UserID;
(2)教師收到學生發(fā)來的 hello報文,將學生的姓名和UserID添加到學生列表中,然后發(fā)回一個應(yīng)答的hello報文;
(3)教師將當前白板命令的堆棧中所有命令轉(zhuǎn)成字符串格式,并通過message報文發(fā)給學生,如果當前堆棧中一個有N(且N>0)條命令,將 message報文中序列號seq設(shè)置為N;

圖5 教師和學生之間的白板通信過程
(4)學生收到教師的message報文,將報文中的命令字符串轉(zhuǎn)換成為堆棧,然后發(fā)給教師一個ack報文(序列號ack=N+1),確認已經(jīng)收到;
(5)教師收到學生的ack報文后,獲得ack的序列號(N+1);假設(shè)當前教師白板的命令堆棧中共有k條命令,當k=(N+1)時,將第N+1條命令通過message報文發(fā)送給學生;當k>(N+1)時,將(N+1)到k之間的命令通過 message報文發(fā)送給學生;當k<(N+1)時,發(fā)送ack報文給學生;
(6)每次發(fā)送報文后啟動計時器,超過時間后重傳報文;
(7)教師和學生端都可以發(fā)送end報文,結(jié)束教學通信。
2.2.3 桌面捕獲和視頻錄制
視頻的錄制需要使用 Chrome瀏覽器的擴展功能捕獲桌面的視頻[15],然后通過Web Audio將幾路音頻混音,把混音后的音頻放置到桌面視頻的音軌上,然后使用 MediaRecorder接口將音視頻流按照選定的格式錄制。圖6是1名教師和2名學生在線授課的視頻錄制實現(xiàn)流程。

圖6 視頻錄制實現(xiàn)流程
教師在授課時打開在線實驗平臺演示,會顯示 3個人的交流視頻。將3個人的語音混合后添加到整個桌面的視頻中,就可以錄制整個教學活動。錄制的視頻可以保存到本地或是上傳共享。
實驗環(huán)境為2臺服務(wù)器和10臺客戶機。一臺服務(wù)器為Web服務(wù)器,另一臺為信令和STUN服務(wù)器,分別安裝Windows Server 2016和centos7.0操作系統(tǒng)。硬件配置為用Intel Xeon Gold 6130(主頻2.1 GHz)雙CPU、內(nèi)存為6 GB、硬盤2 TB;客戶機使用CPU為Intel core i5(主頻3 GHz)、內(nèi)存為 4 GB、硬盤500 GB,操作系統(tǒng)是Windows7。瀏覽器使用chrome,版本為71.0.3578.98。
通過任務(wù)管理器對教學活動產(chǎn)生的負載數(shù)據(jù)進行了收集,包括內(nèi)存使用數(shù)量和CPU的占用率,如表1所示。其中,白板教學活動產(chǎn)生的負載最低;桌面共享和視頻錄制由于需要處理視頻信息,所以負載較高;當同時使用各種教學工具時負載最高。但是相對于客戶端4 GB的總內(nèi)存來說,占用比例還是較少的,說明在線教學活動對于系統(tǒng)沒有產(chǎn)生大的負載。

表1 客戶端教學活動產(chǎn)生的負載
為了比較去中心化的教學平臺和傳統(tǒng)的集中式教學平臺的抗壓能力,對服務(wù)器性能進行了壓力測試。模擬了N個在線用戶按照不同的訪問頻率測試服務(wù)器的響應(yīng)時間。
兩種服務(wù)器的綜合響應(yīng)時間對比數(shù)據(jù)如圖 7所示。隨著客戶端訪問頻率的增加,去中心化教學平臺的響應(yīng)時間在逐步增加,當訪問頻率達到 80請求/s時,系統(tǒng)的響應(yīng)時間趨于穩(wěn)定。這是因為去中心化的教學平臺只是在初始化的時候需要服務(wù)器的參與,之后的教學通信活動不再依賴服務(wù)器。由于初始化的時間非常短,通常在幾秒的時間內(nèi)完成,所以服務(wù)器的負載非常低。而集中式教學平臺,由于所有客戶端教學活動的通信過程必須經(jīng)過服務(wù)器轉(zhuǎn)發(fā),所以隨著客戶端訪問頻率的不斷增加,服務(wù)器的負載會持續(xù)增加,導致響應(yīng)時間一直在增加,服務(wù)器性能下降。
去中心化的在線教學系統(tǒng)提供了在線教學的功能模塊,包括分類管理、用戶管理、信息管理、在線教學、學習資料管理、公告通知等。這些模塊能夠滿足在線教學的需求,去中心化的設(shè)計使教學過程的通信直接在用戶的瀏覽器之間傳遞,并不由中心節(jié)點的服務(wù)器中轉(zhuǎn),大大降低了系統(tǒng)的負載,提高了系統(tǒng)的健壯性,能夠支持大規(guī)模的并發(fā)教學活動。