王 東,林 宏,左 欣
(貴州師范學院a.數(shù)學與計算機科學學院;b.教育信息網(wǎng)絡(luò)中心;c.繼續(xù)教育學院,貴陽 550018)
隨著互聯(lián)網(wǎng)Web2.0和云計算等技術(shù)的成熟,網(wǎng)絡(luò)在線學習得到了前所未有的發(fā)展,近年來出現(xiàn)了一批在線學習平臺。學習者通過在線學習平臺參與各種學習活動,其中,觀看視頻是最核心的學習環(huán)節(jié)。平臺通過自動記錄學習者的觀看行為,將其作為評價或考核學習者的主要依據(jù)[1-3]。目前,多數(shù)在線學習平臺記錄觀看行為的方法仍比較簡單,僅記錄學習者播放視頻的時間長度,該方法未完整記錄下學習者的各種觀看行為。為了強制學習者必須觀看所有視頻片段,一些學習平臺隱藏了視頻播放器自帶的進度控制功能,視頻只能從頭到尾按時間順序播放。這種方式限制了學習者的學習自主性,容易使學習者產(chǎn)生觀看疲勞,失去學習興趣。本文對視頻播放器的進度條進行了擴展設(shè)計,實現(xiàn)對學習者觀看行為的實時采集、存儲和呈現(xiàn),基本思路是:(1)重新設(shè)計播放器進度條,用不同顏色分塊表示視頻片段的學習狀態(tài),學習者對觀看過程有完全的播放控制權(quán),以視頻片段被播放的覆蓋率作為學習的評價標準;(2)播放進度條自動記錄和存儲學習者的詳細觀看行為數(shù)據(jù),為學習者學習行為的跟蹤與分析提供基本依據(jù);(3)進度條提供播放詳情的直觀呈現(xiàn),讓學習者了解自己的學習過程。
視頻播放器自帶的播放進度條只能顯示當前播放的時間點,不能更加詳細的呈現(xiàn)已播放的各個片段。因此,我們對視頻播放器的進度條進行擴展設(shè)計。用一個div作為自定義進度條的容器,其背景色作為進度條的背景色;用戶的每個觀看行為定義為一個播放片段,每個播放片段用一個span標簽表示,span標簽置于div容器中,span標簽的背景色作為進度條的前景色;用span標簽的left屬性(左邊距)代表播放起點,width屬性表示播放片段的時間長度。每個播放片段在用戶觸發(fā)播放器的播放行為事件時被初始化,每當一個播放片段開始時,在div容器中追加一個新的span標簽,span標簽在div容器中的位置代表播放開始時間點,span標簽的初始長度為0。隨著視頻播放進度的推進,通過實時同步改變span標簽的width屬性值,從而模擬出播放進度不斷增加的效果。圖1為進度條生成流程圖。
圖1 進度條生成流程圖
實時同步需要用Web計時器采集播放器當前播放點時間,因此,Web計時器的準確性很關(guān)鍵。JavaScript提供的計時器最常用,但易受環(huán)境干擾,計時不準確,因此,選用了jQuery[4]的 timer插件,計時準確性較好。當通過計時器采集到當前播放點后,由于進度條和視頻播放器自帶進度條所使用的度量單位不相同(分別為像素和時間),需要進行單位轉(zhuǎn)換,轉(zhuǎn)換關(guān)系為:
式(1)將進度條當前進度轉(zhuǎn)換為播放器的當前播放時間,px為當前span標簽的width+left,div.width為進度條總長度,totaltime為視頻總時長;式(2)將播放器的當前播放時間轉(zhuǎn)換為進度條當前進度,time為視頻已播放時長。
視頻播放過程中用戶執(zhí)行一系列播放控制,將在div容器中生成多個對應的span標簽,它們分散或者重疊地分布在div容器中,由于span標簽的背景色是相同的,在用戶看來,是一個整體,從而完全模擬出分塊進度條的效果。圖2描述了多個播放行為后進度條的內(nèi)部結(jié)構(gòu)。
圖2是一次視頻觀看會話中分塊進度條生成的分解圖。狀態(tài)①表示進度條容器為空,用戶未執(zhí)行任何觀看行為;狀態(tài)②表示視頻載入后用戶執(zhí)行了播放并持續(xù)觀看了一個時間片段;狀態(tài)③表示用戶執(zhí)行暫停后再繼續(xù)播放了一個時間片段;狀態(tài)④表示用戶執(zhí)行了拖動播放,并持續(xù)觀看了一個時間片段;狀態(tài)⑤表示用戶將播放器進度往前拖動播放,觀看的時間片段與之前的時間片段有相交;狀態(tài)⑥表示用戶將播放器進度往前拖動播放,觀看的時間片段包含于之前的時間片段中;狀態(tài)⑦表示狀態(tài)疊加后呈現(xiàn)的整體效果。
圖2 視頻播放觀看會話分解圖
在線視頻觀看行為數(shù)據(jù)對進行教育大數(shù)據(jù)分析具有不可估量的價值,通過對海量學習行為進行深入挖掘,對用戶的學習行為進行跟蹤、記錄并建模分析,就能全面跟蹤、掌握學習者的學習行為、學習過程和學習特點,從而有針對性地改善課程視覺效果和教學方法[5-7]。所設(shè)計的進度條本身具備存儲用戶學習行為的功能,但通過網(wǎng)頁上的html標簽存儲用戶觀看行為數(shù)據(jù)是暫時的,當頁面被刷新或重新載入時數(shù)據(jù)會被清除。因此,需要將用戶觀看行為數(shù)據(jù)存儲到服務端數(shù)據(jù)庫中。為了減少客戶端與服務端連接的次數(shù),客戶端并不會實時向服務器提交行為數(shù)據(jù),采取定時提交行為數(shù)據(jù)的方法。通過定義一個DBCLOCK計時器,每隔一定時長向服務器提交一次行為數(shù)據(jù)。客戶端向服務器提交的行為數(shù)據(jù)為進度條容器中所有span標簽上的屬性值集合,通過遍歷div容器中的span標簽并獲取屬性值,得到一個二維數(shù)組,再用JSON.stringify()方法處理后作為$.post提交方法的參數(shù)傳遞給后臺處理程序。后臺處理程序用json_decode方法解析后還原成二維數(shù)組,將二維數(shù)組中的每行插入到行為數(shù)據(jù)表中。在向服務器提交數(shù)據(jù)時,為了不刷新頁面,采用 AJAX[8-9]技術(shù)提交數(shù)據(jù),用 JSON[10-11]作為數(shù)據(jù)交換格式。同時為了避免寫入重復數(shù)據(jù),寫入前先將同次視頻觀看會話的所有記錄刪除,再將前端播放數(shù)據(jù)寫入數(shù)據(jù)庫。
在span標簽自定義6個屬性(action,playdatatime,playstarttime,playendtime,dragstarttime,dragendtime),用以記錄用戶的觀看行為。其中,action表示播放類型,其取值為{‘play’,‘pauseplay’,‘dragplay’},分別表示載入后播放、暫停后播放和拖動播放;playdatatime為初始化視頻時系統(tǒng)的當前時間;playstarttime存儲當前片段播放的開始時間點,playendtime存儲當前片段播放的結(jié)束時間點;dragstarttime表示拖動起點;dragendtime表示拖動結(jié)束點。dragstarttime和 dragendtime只在action取值dragplay時有效,代表拖動起點和拖動結(jié)束點;當action取值play或pauseplay時,dragstarttime和dragendtime被定義為0。相應地,在數(shù)據(jù)庫中建立學習行為記錄表存儲每個span標簽的屬性值(表1)。
表1 學習行為記錄表
表1中每一條記錄代表用戶觀看的一個時間片段,videoID唯一標識一個視頻,userID標識一個用戶。給定videoID和userID條件下,playdatetime值相同的所示記錄表示一個用戶的一次觀看會話的所有觀看行為。通過left字段和width字段,可以在客戶端頁面上生成歷史播放詳情。通過統(tǒng)計playstarttime和playendtime字段可以獲得時間片段長度,統(tǒng)計:dragstarttime和dragendtime可以獲得播放過程中被跳過的視頻片段。當海量數(shù)據(jù)記錄形成后,這些數(shù)據(jù)將成為大數(shù)據(jù)分析的有力證據(jù),比如:當某個視頻片段經(jīng)常被用戶跳過,就有可能是這部分視頻制作不清,或者是課程內(nèi)容安排不當。
要記錄視頻觀看行為數(shù)據(jù),就要準確捕獲用戶的播放行為。大多數(shù)視頻播放器都提供一系列監(jiān)聽事件接口,只需要在監(jiān)聽事件中編寫好相應的處理程序即可。本文所使用的是ckplayer播放器,表2中列出了使用到的監(jiān)聽事件及該事件中要執(zhí)行的主要動作。
表2 監(jiān)聽事件列表
載入歷史播放數(shù)據(jù)的過程就是將數(shù)據(jù)庫中符合條件的記錄在Web端生成相應標簽的過程。主要呈現(xiàn)內(nèi)容包括兩個方面:一是歷史總播放進度,將當前觀看者、當前視頻的所有歷史記錄進行合并后在前端呈現(xiàn)一條進度條;二是歷史播放詳情,將當前觀看者、當前視頻的所有記錄按播放時間會話分組合并,每個會話形成一條進度條呈現(xiàn)在前端。
用戶在一次觀看會話中往往會觸發(fā)若干觀看行為,數(shù)據(jù)表中存儲了許多記錄,如果將每條記錄在前端頁面上生成一個span標簽,在初始化前端頁面時會增加負載。因此,在后臺處理程序中將每次播放的歷史數(shù)據(jù)進行合并后再輸出到前端。由于數(shù)據(jù)表中的每一條記錄對應一個span標簽,采用span標簽的合并來描述數(shù)據(jù)表記錄的合并操作。分析觀看會話中產(chǎn)生的span標簽,span標簽之間可能產(chǎn)生三種關(guān)系:(1)相離關(guān)系:span1和span2無重疊;(2)相交關(guān)系:span1和span2部分區(qū)域重疊;(3)包含關(guān)系:span2完全位于span1區(qū)域內(nèi),如圖3所示。
合并后的狀態(tài):對于(1)來說,不需要合并;對于(2),修改span1的width值,刪除 span1;對于(3),直接刪除span2。
圖3 span標簽關(guān)系圖
觀看行為記錄的合并過程描述如下:
Step 1:對所有span標簽按left屬性值升序排列;
Step2:若span標簽數(shù)大小2,反復執(zhí)行:
Step 2.1從第1個標簽開始至第n-1個標簽,取相鄰span標簽,反復執(zhí)行:
Step 2.2若兩個span標簽為包含關(guān)系,刪除第二個span標簽,跳step2;
Step 2.3若兩個span標簽為相交關(guān)系,更新第一個span標簽的 width屬性值,刪除第二個 span標簽,跳step2。
帶標尺及參考線的進度條能顯著提高用戶體驗,用戶可直觀地觀察到視頻的時間刻度及播放進度。生成標尺首先需要準備一張帶刻度線的圖作為標尺容器的背景圖,背景圖水平平鋪橫向填充標尺容器。標尺的刻度值則需要根據(jù)視頻時長動態(tài)生成。
參考線的主要作用包括兩個方面:一方面作為對齊播放片段的垂直參考線,當鼠標移動到進度條容器區(qū)域內(nèi)會跟隨鼠標移動,方便用戶察看觀看片段的時間點;另一個方面是作為當前播放頭實時向后移動。為協(xié)調(diào)好參考線的呈現(xiàn),當鼠標位于進度條內(nèi)時,使參考線隨鼠標移動,當鼠標離開進度條區(qū)域外時,使參考線作為播放頭實時向后移動。
為驗證本文所述方法的有效性,準備了一個時長為3.37分鐘的視頻文件,在播放視頻過程中多次模擬學習者的各種觀看行為,分別執(zhí)行載入視頻后播放、播放中暫停、暫停后繼續(xù)播放、播放中拖動、暫停中拖動、不同方向的拖動播放等觀看行為,并在此過程中進行人工記載。通過歷史觀看行為數(shù)據(jù)的重新呈現(xiàn)。如圖4所示,與人工記載的學習斷點完全吻合,學習者的各種觀看行為被準確的記錄了下來。
圖4 歷史播放詳情運行圖
知識全球化的MOOC運行,以一種新型的學習方式正在興起,這種以學習者在線觀看視頻為主的學習形式,不僅要求視頻內(nèi)容制作要有過硬的質(zhì)量,也對播放過程的用戶體驗及用戶觀看行為數(shù)據(jù)的分析提出了很高的要求。本文基于開源播放器擴展了播放進度條的設(shè)計,有效解決了用戶觀看行為數(shù)據(jù)的記錄與呈現(xiàn)問題,使學習者能夠精確地觀察了解自己的學習過程,增強了播放器的用戶體驗,也為用戶學習行為大數(shù)據(jù)分析儲備了數(shù)據(jù)。
[1] 楊金來,洪偉林,張翼翔.網(wǎng)絡(luò)學習行為的實時監(jiān)控研究與實踐[J].開放教育研究,2008,14(4):87-92.
[2] 楊玉芹.MOOC學習者個性化學習模型建構(gòu)[J].中國電化教育,2014(6):6-10.
[3] 呂佳寧,魏芳.大數(shù)據(jù)下網(wǎng)絡(luò)視頻類用戶行為分析[J].新聞愛好者,2014(7):38-40.
[4] 潘杰,周傳生.基于jQuery框架的Web研究與實現(xiàn)[J].沈陽師范大學學報:自然科學版,2015,33(1):96-99.
[5] 蔣卓軒,張巖,李曉明.基于MOOC數(shù)據(jù)的學習行為分析與預測[J].計算機研究與發(fā)展,2015,52(3):614-628.
[6] 胡藝齡,顧小清,趙春.在線學習行為分析建模及挖掘[J].開放教育研究,2014,20(2):102-108.
[7] 彭文輝,楊宗凱,黃克斌.網(wǎng)絡(luò)學習行為分析及其模型研究[J].中國電化教育,2006(10):31-35.
[8] 呂林濤,萬經(jīng)華,周紅芳.基于Ajax的Web無刷新頁面快速更新數(shù)據(jù)方法[J].計算機應用研究,2006,23(11):199-223.
[9] 熊文,熊淑華,孫旭,等.Ajax技術(shù)在 Web2.0網(wǎng)站設(shè)計中的應用研究[J].計算機技術(shù)與發(fā)展,2012,22(3):145-148.
[10] 屈展,李嬋.JSON在Ajax數(shù)據(jù)交換中的應用研究[J].西安石油大學學報:自然科學版,2011,26(1):95-98.
[11] 李志秀,張軍,陳光,等.jQuery Ajax異步處理JSON數(shù)據(jù)在項目管理系統(tǒng)中的應用[J].云南大學學報:自然科學版,2011,33(S2):247-250.