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