王 鷹
(中南大學(xué)信息與網(wǎng)絡(luò)中心,湖南長沙410083)
在教育全球化、信息化的背景下,幕課、微課的出現(xiàn)給現(xiàn)代教育帶來了重大影響[1],在線開放教育資源已成為全球化教育的發(fā)展趨勢,教學(xué)視頻資源在現(xiàn)代教育中已變得尤為重要[2]。在以往和教師在教育技術(shù)交流活動(dòng)中,很多老師曾希望我們幫忙在某某網(wǎng)站下載一段教學(xué)視頻;在一些教學(xué)競賽的課件中,也觀察到插入的一些教學(xué)視頻很多來自優(yōu)酷、騰訊視頻等網(wǎng)站,視頻會(huì)打上網(wǎng)站標(biāo)志的水印而且視頻質(zhì)量很差;教學(xué)課件中如果插入的視頻是在線視頻鏈接,點(diǎn)擊往往會(huì)插播廣告,出現(xiàn)彈幕之類的干擾信息,影響教學(xué)效果。
設(shè)計(jì)并搭建一個(gè)校內(nèi)教學(xué)視頻資源共享框架,形成一個(gè)生態(tài)的教學(xué)視頻資源共享平臺,可以促進(jìn)共享視頻資源的建設(shè)[3],從而解決以上教師在教學(xué)視頻資源需求方面矛盾,提高教學(xué)效果。
共享平臺框架基于微軟.NET Framework平臺,采用B/S架構(gòu),通過VB.NET開發(fā)實(shí)現(xiàn)。硬件架構(gòu)由客戶端、WEB服務(wù)器、文件服務(wù)器、數(shù)據(jù)庫服務(wù)器構(gòu)成,如圖1所示。
圖1 共享平臺框架構(gòu)成
共享平臺框架系統(tǒng)功能包括三大功能模塊,視頻資源用戶模塊、視頻資源管理模塊、視頻資源共享模塊。視頻資源用戶模塊負(fù)責(zé)用戶及角色權(quán)限管理;視頻資源管理模塊負(fù)責(zé)視頻資源的上傳、編輯及刪除;視頻資源共享模塊負(fù)責(zé)共享項(xiàng)目及共享視頻的管理。共享平臺框架系統(tǒng)功能模塊如圖2所示。
圖2 共享平臺框架系統(tǒng)功能模塊
視頻通過4步完成共享:①用戶注冊平臺賬號,審核通過的用戶允許上傳視頻文件;②用戶通過web上傳視頻到自己的私有云空間,用戶可在線管理所上傳的視頻文件;③用戶發(fā)布共享項(xiàng)目,共享相關(guān)視頻,共享視頻進(jìn)入公共云空間;④管理員審核共享視頻,審核通過后,共享視頻鏈接對共享用戶可見。
視頻資源上傳是平臺實(shí)現(xiàn)的難點(diǎn)之一。適合教學(xué)的視頻最好是Html5支持的MP4格式的高清視頻,高清視頻文件通常較大,當(dāng)視頻碼率超過8M時(shí),一分鐘的視頻大小就會(huì)超過480M。目前,主流web服務(wù)器對向服務(wù)器端提交數(shù)據(jù)的大小都有限制。對于超過一定大小的文件,服務(wù)器端將報(bào)錯(cuò)。要想上傳超過2G的視頻文件,傳統(tǒng)的做法是通過FTP、Flash或ActiveX插件來實(shí)現(xiàn)。然而,F(xiàn)TP部署也比較麻煩,學(xué)校網(wǎng)絡(luò)防火墻有可能不允許FTP上傳,另外插件式的應(yīng)用程序在實(shí)際使用過程中也存在瀏覽器兼容性的各種弊端[4]。
為使視頻上傳更加方便,視頻資源上傳基于B/S架構(gòu)采用HTML5的大文件分片斷點(diǎn)續(xù)傳方案。HTML5在文件處理方面提供了Filelist、File、Blob、FileReader等一系列接口對象。其中,Blob對象能夠用來存儲二進(jìn)制數(shù)據(jù),F(xiàn)ile對象提供了Slice方法可以對文件進(jìn)行分片,F(xiàn)ileReader對象則能夠?qū)lob或者File對象讀取為二進(jìn)制的ArrayBuffer、文本類型的字符串或者Base64碼的DateURL[5]。
文件上傳操作流程是:①選取文件,通過input file標(biāo)簽的multiple屬性可以選擇多個(gè)文件,文件列表顯示;②點(diǎn)擊上傳,逐一上傳所選文件。文件上傳流程如圖3所示:
圖3 文件上傳流程
大文件分片上傳的策略是:首先利用JavaScript,通過HTML5 File API快速實(shí)現(xiàn)對本地文件的訪問。然后利用FormData對象,把大文件分成小片循環(huán)上傳到Server服務(wù)端,F(xiàn)ormData對象是HTML5 新增的一個(gè)對象,它可以上傳一個(gè)二進(jìn)制文件,服務(wù)端每接收一個(gè)分片二進(jìn)制文件就在緩存文件夾中寫入一個(gè)新建的臨時(shí)文件,當(dāng)接收到文件最后一片時(shí)將所有臨時(shí)文件按照順序合并成一個(gè)大文件并刪除臨時(shí)保存的分片文件。在上傳的同時(shí),利用AJAX技術(shù)獲得并顯示大文件分片上傳的進(jìn)度,AJAX 是一種在無需重新加載整個(gè)網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)[6],。
客戶端通過JavaScript利用FormData對象分片斷點(diǎn)上傳核心代碼如下:
var start = shard_index * shardSize,end = Math.min(file.size, start + shardSize); //分片起始點(diǎn)
var formData = new FormData();//構(gòu)造一個(gè)表單
formData.append("data", file.slice(start, end)); //slice方法用于切出文件的一部分
formData.append("name", file.name);
formData.append("total", shardCount); //總片數(shù)
formData.append("size", file.size); //總片數(shù)
formData.append("index", shard_index); //當(dāng)前是第幾片
MYM.ajax({
url: '/File/up1.aspx',
type: 'POST',
cache: false,
data: formData,
processData: false,
contentType: false
}).done(function (msg, status) {...});
Web客戶端FormData表單通過POST方法把大文件的分片信息上傳到服務(wù)端,服務(wù)端通過Request對象接收FormData表單中的上傳數(shù)據(jù)。服務(wù)端核心代碼如下:
Dim msg As String = "ok"
Dim name As String = Request("name")
Dim total As Integer = Convert.ToInt32(Request("total"))
Dim index As Integer = Convert.ToInt32(Request("index"))
Dim size_total As Long = Convert.ToInt64(Request("size"))
Dim Data = Request.Files("data") '上傳的分片數(shù)據(jù)文件
Dim Dir As String = Server.MapPath("~/Upload/") + UserID '服務(wù)端用戶目錄
Dim file_shard As String = Path.Combine(Dir, name + "_" + index) '分片文件保存路徑
Data.SaveAs(file_shard) '保存文件
Response.Write(msg)
服務(wù)端通過客戶端FormData表單中的文件名稱、大小及文件的MD5值來判斷文件上傳進(jìn)度并返回上傳成功與否的相關(guān)信息,客戶端與服務(wù)端的交互流程如圖4所示。
圖4 客戶端與服務(wù)端的交互流程
客戶端分片上傳視頻到服務(wù)端的時(shí)間會(huì)根據(jù)網(wǎng)絡(luò)通信的快慢發(fā)生改變,在上傳過程通過對上傳數(shù)據(jù)的大小與上傳的時(shí)間可以計(jì)算網(wǎng)絡(luò)的速度,預(yù)計(jì)上傳完成的時(shí)間,在這個(gè)過程中,客戶端會(huì)通過可視化界面呈現(xiàn)給用戶??蛻舳松蟼鹘缑嫒鐖D5所示。
用戶上傳的視頻文件,在服務(wù)端利用System.IO組件對上傳的視頻進(jìn)行管理,包括文件夾的管理,視頻文件的移動(dòng)或刪除。客戶端通過Html5及客戶端JavaScript腳本,實(shí)現(xiàn)對服務(wù)端視頻的瀏覽。具體方法是:首先,獲得服務(wù)端視頻文件的信息,文件信息包括文件大小、路徑等。然后,利用System.XML組件把獲得的文件信息轉(zhuǎn)化為XML文件[7],XML數(shù)據(jù)文件綁定到目錄樹或者表格呈現(xiàn)給客戶端。最后,客戶端通過Html5及客戶端JavaScript腳本實(shí)現(xiàn)對視頻的瀏覽。
圖5 客戶端上傳界面
在完成視頻上傳后,視頻資源的分享相對簡單。視頻通過視頻資源共享模塊對視頻進(jìn)行分享,視頻分享的機(jī)制是,首先要建立一個(gè)共享項(xiàng)目,項(xiàng)目可以是課程或者專題等,建立共享項(xiàng)目是避免分享的視頻過于凌亂;然后在共享項(xiàng)目下發(fā)布共享視頻,共享視頻需要填寫視頻的相關(guān)信息,比如視頻的分類、標(biāo)簽、共享的范圍等等。為了方便共享視頻的檢索,共享項(xiàng)目及共享視頻的分類信息都保存在數(shù)據(jù)庫中,共享的視頻文件會(huì)從用戶的私有云拷貝到公共云中,共享的視頻需要管理員審核才能被共享用戶瀏覽、引用及下載。
高校視頻資源共享框架實(shí)現(xiàn)了大視頻在線上傳,在線管理、在線瀏覽、在線分享等一系列問題,完全滿足了高校視頻資源共享建設(shè)的需要,在線輔助教學(xué)方面自主可控,不會(huì)像社會(huì)化視頻共享平臺那樣出現(xiàn)干擾教學(xué)的狀況,具有一定的推廣價(jià)值。高校視頻資源共享框架目前還面臨一些問題,首先是視頻文件的安全問題,用戶通過System.IO組件直接對服務(wù)器上的視頻文件進(jìn)行管理,存在一定的安全風(fēng)險(xiǎn),需要建立文件刪除安全保護(hù)機(jī)制;其次就是視頻斷點(diǎn)續(xù)傳過程形成的臨時(shí)分片文件,大文件會(huì)對存儲服務(wù)器形成壓力,需要建立策略周期性清理臨時(shí)分片文件。