王一名 張至柔 趙鴻至 吳娟



摘 要 由于疫情影響了各大高校正常開學與授課,網絡教學成為當下主要的教學方式。針對當前網絡視頻存在老師與學生之間交互性、實時性、反饋客觀性等方面的缺陷,提出一種基于視頻時間軸的用戶播放行為監測HTML5播放器,實現了對學生觀看視頻全過程的行為監控、記錄和反饋,客觀地分析出該視頻的重難點所在、學生的掌握情況等信息,用于輔助教學雙方。
關鍵詞 大數據;網絡教學播放器;時間軸;用戶行為抓取及反饋;HTML5應用
引言
隨著計算機的普及和社交網絡的發展,教學不再拘泥于傳統的教學模式。MOOC、網易云課堂、雨課堂等網絡教學平臺網絡的網絡授課模式也逐漸完善,再加之網絡教學平臺不斷地和高校開展合作,萌生了許多優質課程[1]。
當前由于新型冠狀病毒疫情的影響,很多高校都取消開學,老師和學生們難以像之前一般采用傳統課堂的方式教學。因此,網絡教學成為當下主要的教學方式。但網絡教學相比傳統教學有一些不足之處:網絡授課導航系統不強,學生難以集中于線上課堂;網絡授課缺少評價與反饋,學生難以及時了解課程重點,老師難以及時把握學生學習情況[2]。因此,本文針對學生希望快速了解課程重點和老師希望快速把握學生學習情況這兩個愿望出發,利用HTML5制作播放器,用hadoop大數據框架處理數據,來解決這些問題。
抓取用戶行為的播放器設計,在國內外互聯網媒體上已經有了許多實現方案。同時國外部分媒體上也有使用此功能。但是在網絡教學平臺上,尚未利用這一方案。并且實現該方案的技術并不統一,很多方案未能充分使用到云計算。
基于以上問題,我們分析了各個平臺使用該技術的案例,在此基礎上提出了一種適用于網絡教學平臺的播放器解決方案。圖1為方案實現的整體流程圖。
1程序和算法設計
1.1 前端獲取用戶行為
(1)播放器
使用Spring-mvc架構[3],運用HTML+CSS+JavaScript自定義HTML播放器。主要功能是獲取用戶行為數據和將用戶行為分析數據展示在進度條上。
(2)獲取用戶行為
使用JavaScript調用HTML Video播放器的HTML DOM API[4-5],從而提取當前頁面的url、用戶id、用戶上一次拖動進度條結束時刻(本片段播放開始時刻)startTime、本次拖動進度條開始時刻(本片段播放結束時刻)endTime、當前視頻長度length和當前視頻播放速率speed。再使用Ajax給服務器發送記錄用戶行為數據的請求。實現方法如圖2所示。
1.2 MVC設計及控制器Servlet轉發
基于MVC設計的思想。我們將項目分為三個模塊,如圖3所示。其中作為控制器的Servlet在接受記錄用戶行為數據的請求后,將其發送的JSON文件轉成文本格式寫入磁盤。
1.3 多線程處理大并發數據
考慮到大量用戶同時觀看視頻、提交用戶行為數據的情況下,大并發大批量數據傳入服務器,可能會發生內存溢出,導致服務器宕機和大量數據丟失。在轉發過程中采用多線程池處理,設置線程池大小,這樣就可避免這一問題。
本項目采用的線程池空間如下:
線程數: [6]
其中:為計算機處理器數目,為請求的等待時間,為請求的服務時間
1.4 服務器與Hadoop文件系統HDFS通信
以文本格式保存的記錄用戶行為數據寫入磁盤后通過調用Hadoop的API方法[7]: FileSystem.copyFromLocalFile(Path src, Path dst) 方法來將數據上傳至HDFS,隨后刪除本地文件以保證磁盤空間。相反地,將HDFS中的文件下載到本地磁盤中則調用FileSystem.copyToLocalFile(Path src, Path dst)方法。
1.5 MapReduce程序
為了定時在閑時進行計算,處理未計算數據,我們通過使用定時調用的daemon程序對存入HDFS的原始用戶行為數據進行計算。
同時為了保存原始數據另作數據分析,我們采用了二重MapReduce程序串聯的方式。第一重用于排序原始數據,第二重用于數據計算獲得統計結果,如下圖所示。
二重MapReduce程序工作過程如下:
(1)第一重:快速排序保存原始數據
因為MapReduce的shuffle過程中默認即為字典排序,所以僅需對原始數據進行一重MapReduce即可得到以url為key值按照字典順序進行快速排序后的原始數據集。隨后將Reduce輸出結果在本地磁盤中保存備份。
(2)第二重:計算進度條高度矩陣
將第一重Reduce在HDFS中的輸出結果作為第二重MapReduce程序的輸入對該數據進行累加計算:
上式為任一視頻中進度條矩陣計算式,其中speed為視頻播放倍速,startTime和endTime分別為上一次拖動結束時刻和該次視頻拖動開始時刻,startTime到endTime的時間跨度即為在兩次拖動進度條之間用戶以speed速度播放視頻的時間,對其進行累加即可得到在任一秒中用戶觀看頻率的權重。累加完成后,在MapReduce中以視頻的url為key,以進度條矩陣為最終返回值value,則可以確保任一url的所有數據均在一個節點的Reduce程序中進行運行計算。每個url為key的返回值value即對應著進度條高度矩陣。該矩陣表征了用戶觀看視頻中每秒視頻權重的分布。最終將url和所對應的進度條高度矩陣作為結果輸出保存在HDFS中用于響應前端請求,將進度條高度矩陣轉化為用戶觀看曲線顯示在播放器中。