文/馬晨輝 趙春,2 徐艷艷 沈富可
讓在線教學更靈活,你還需知道:如何讓Sakai里的視頻“活”起來
文/馬晨輝1趙春1,2徐艷艷1沈富可1
作為世界上最大的開源教學平臺,Sakai系統(tǒng)對視頻功能的支持卻相對簡單,難以滿足高校日常化教學的需要,這也是目前很多高校在使用Sakai來建設教學平臺過程中面對的共同問題。
Sakai是由美國印第安納大學、密西根大學、斯坦福大學、麻省理工學院于2004年共同開發(fā)的開源課程管理系統(tǒng);目前,Sakai在世界范圍內被廣泛使用,在國內外一流高校中的應用尤為普遍,已日益成為高校教學過程中的重要手段。
Sakai系 統(tǒng) 以J2EE中 的Spring + Hibernate框架作為其基本框架,為用戶提供基本表示層和交互服務;具體的教學功能主要以工具插件的形式給用戶提供服務,如通知、日程、課程大綱、論壇、作業(yè)、在線測試等工具,為用戶提供課程內容組織、課程資源管理、在線交流等服務。
近年來,隨著視頻公開課和MOOC的發(fā)展,教學視頻逐漸成為各類教學平臺的核心內容。以教學和視頻為關鍵字搜索近十年的研究文獻,先以“視頻”和“教學”同時為關鍵字搜索的文獻數(shù)量,再單獨以“教學”為關鍵字搜索到的文獻情況,結果如表1:
表 1 近十年視頻在教學研究中的比例趨勢
表1中各列第二行與第三行的比例,可以視作教學研究中對視頻研究的熱度,如圖1所示。
圖 1 近十年視頻在教學研究中的比例趨勢
從圖1中不難發(fā)現(xiàn),近十年對教學視頻的研究呈迅速增長的態(tài)勢,尤其是從2012年開始,隨著MOOC的興起,在教學平臺中引入教學視頻迅速成為近年教學研究的熱點。然而,這一波研究浪潮與Sakai教學平臺關聯(lián)甚少。以Sakai和視頻為關鍵字進行搜索,僅搜到兩篇文獻。《視頻播放控件在Sakai中的兼容性實踐》從本地化的角度,針對Sakai自帶視頻插件的編碼問題,分析了不能正常播放教學視頻的原因,并提出了解決方法;《開源視頻系統(tǒng)在Sakai中的集成與應用》引入了開源視頻系統(tǒng)Kaltura,使用插件開發(fā)的方式拓展Sakai系統(tǒng)對視頻的支持。
作為世界上最大的開源教學平臺,Sakai系統(tǒng)對視頻功能的支持卻相對簡單,難以滿足高校日常化教學的需要,這也是目前很多高校在使用Sakai來建設教學平臺過程中面對的共同問題;而目前已有研究僅僅局限對本地化問題的解決和獨立插件與開源系統(tǒng)對接,沒有考慮到視頻資源與其他教學資源以及知識單元的關聯(lián)性,難以實現(xiàn)在教學平臺中將教學內容與視頻的深入整合,因此有必要對Sakai與視頻的契合展開研究,這也是本文的研究起點。
圖 2 Sakai原生視頻框架
針對Sakai平臺對視頻支持薄弱這一現(xiàn)狀,筆者從Sakai視頻支持框架著手,分析該框架存在的缺陷,并對Sakai教學平臺視頻支持實施重新設計,將視頻服務從Sakai平臺的耦合中獨立出來,同時對Sakai的教學資源整合工具Lessonbuilder進行二次開發(fā),并與視頻平臺進行對接,從而優(yōu)化視頻資源的管理與提高訪問視頻服務的用戶體驗。
Sakai原生框架分析
Sakai對視頻的支持零散而單一,其視頻支持框架如圖2所示。
從圖2中可以看出,Sakai系統(tǒng)自身對視頻的支持主要通過Lessonbuilder和Content組件進行集成。Lessonbuilder組件主要集成了視頻上傳和播放的入口,用戶可以通過上傳模塊上傳本地PC上的視頻、引用視頻鏈接以及獲取已經上傳的視頻并將請求提交給Content組件進行后續(xù)處理,上傳成功之后通過調用自帶Flash視頻播放器進行視頻播放;Content組件是Sakai的資源統(tǒng)一管理組件,接收來自Lessonbuilder組件的上傳請求后,將文件名進行編碼并存儲到Sakai自身服務器存儲上,并生成文件訪問映射寫入數(shù)據(jù)庫記錄中,當接收到來自Lessonbuilder的訪問視頻請求時,通過數(shù)據(jù)庫的映射記錄來訪問視頻文件。
盡管原有的視頻框架能夠滿足最基本的視頻資源需求,但同時也伴隨著無法忽視的缺陷:
1.視頻播放存在性能瓶頸。
相對于教學平臺的其他功能模塊,視頻上傳、存儲及播放有其特殊性,隨著視頻資源及的用戶數(shù)增加,對服務器的CPU、內存、I/O、帶寬、存儲空間的要求會急劇增加,從而影響教學平臺其他基本功能的響應,造成系統(tǒng)等待超時甚至宕機,這是非常大的故障風險點。
2.視頻播放器的兼容性較差。
Sakai系統(tǒng)自帶視頻播放器對視頻文件的兼容性及用戶終端對視頻播放器的兼容性都有一定的問題。在Lessonbuilder組件中上傳視頻資源后,系統(tǒng)自動調用Flash播放器進行視頻播放,而Flash視頻播放器本身支持的視頻格式較少。同時,隨著移動設備的普及與校園無線網絡的全覆蓋,越來越多的人使用各種移動終端來訪問系統(tǒng),而Sakai自帶Flash播放器在移動設備上的兼容性較差,在這些終端上往往無法正常播放。
3.視頻管理缺乏統(tǒng)一標準。
在Sakai教學平臺中,系統(tǒng)本身對上傳視頻的格式沒有任何過濾和限制,也沒有提供統(tǒng)一轉換視頻編碼的功能支持,用戶可以上傳任意格式的視頻甚至非視頻文件,而實際上由于其自帶播放器在兼容性上的缺陷,從而導致了并不是每個上傳的視頻都能夠正常播放,同時也造成了資源管理上的混亂。
Sakai新框架設計
針對原有視頻支持框架的弊端,對視頻框架進行重新設計,如圖3所示。
圖 3 重新設計的視頻框架
在新的視頻框架中,將視頻服務獨立出來,以接口服務的形式對Sakai系統(tǒng)中的組件提供支持。同時,對Lessonbuilder組件中的用戶層進行二次開發(fā),調用視頻平臺上傳接口進行視頻資源上傳,并將返回的視頻訪問信息存入數(shù)據(jù)庫,實現(xiàn)本地僅僅存放引用,而不存放文件本身。另外,替換Lessonbuilder組件自帶視頻播放器,結合視頻平臺轉碼服務,實現(xiàn)視頻編碼格式的統(tǒng)一與播放的穩(wěn)定性。
視頻上傳流程設計
獨立的視頻平臺能夠避免多用戶并發(fā)訪問給教學平臺本身帶來額外的壓力,同時新增的視頻轉碼服務對視頻的編碼格式進行統(tǒng)一處理,增加了視頻的可播放性,系統(tǒng)主要邏輯如圖4所示。
視頻服務器接收到上傳請求時,將視頻文件保存在視頻服務器的存儲上。目前,由于MP4幾乎能夠被所有移動設備、操作系統(tǒng)原生支持,有著非常良好的兼容性,因此采用MP4作為系統(tǒng)中的統(tǒng)一編碼格式。視頻服務器對用戶上傳的視頻編碼進行判斷,如果不是MP4格式,則調用轉碼服務將其轉成MP4格式之后再存儲。存儲成功后生成視頻id并保存視頻相關信息至數(shù)據(jù)庫,同時返回視頻的訪問地址等信息。
視頻上傳結束,用戶可以直接訪問返回的視頻播放地址,或是使用播放器進行視頻播放。
當視頻服務器接收到刪除請求時,根據(jù)請求的視頻id,刪除相應的視頻文件和數(shù)據(jù)庫記錄,并返回刪除結果。
圖 4 獨立視頻服務
基于以上系統(tǒng)架構設計,需要進行視頻系統(tǒng)開發(fā)、Lessonbuilder組件二次開發(fā)以及Sakai系統(tǒng)與視頻系統(tǒng)的集成。
視頻系統(tǒng)二次開發(fā)
為了不影響視頻系統(tǒng)本身的正常運行,需要將待開發(fā)的功能與原有功能進行代碼層面的隔離,因此需要在原有視頻系統(tǒng)的基礎上做增量開發(fā)。
1.基本功能分析
視頻系統(tǒng)主要包括上傳視頻和刪除視頻兩個功能。為了統(tǒng)一視頻的編碼格式,系統(tǒng)還應當包含視頻編碼轉換的功能。
2.功能用例描述
為了增加系統(tǒng)的可擴展性,這里不具體定義上傳和刪除視頻請求的客戶端(Client),具體對接時再詳細定義。通過用例圖進行功能描述,如圖5所示。
3.基本類與主要成員描述
系統(tǒng)收到客戶端請求后,一方面要對上傳的文件進行操作,另一方面需要記錄視頻的相關信息以及請求的相關參數(shù),因此基本類應劃分為文件操作類和數(shù)據(jù)庫操作類,基本類及其主要成員如圖6所示。
UploadHandler是處理視頻上傳文件的基本類,主要成員變量options是數(shù)組類型的數(shù)據(jù),主要描述了服務器上存儲視頻的目錄;成員方法中,handle_ file_upload是處理視頻文件上傳的主要方法,上傳完成后,再執(zhí)行generate_response方法,回傳相關信息給請求的客戶端。
content_model是數(shù)據(jù)庫操作基本類,主要成員變量category用來記錄視頻所在的欄目,便于視頻的分類處理;成員方法add_content(data)在上傳時將視頻相關信息記錄至數(shù)據(jù)庫,delete_content(id, catid)方法用來刪除已經存在的視頻。
圖5 功能用例描述
4.數(shù)據(jù)庫設計
視頻系統(tǒng)在存儲視頻時,需要將視頻的相關信息存入數(shù)據(jù)庫,刪除視頻時也需要根據(jù)數(shù)據(jù)庫中已有的記錄進行操作,其數(shù)據(jù)庫表結構如下:
由于用戶上傳視頻的編碼格式多種多樣,而用戶觀看視頻使用的終端設備以及瀏覽器也不盡相同,很可能會因為兼容性問題而出現(xiàn)視頻無法播放的情況。為了增加視頻播放的兼容性,需要將視頻的編碼格式進行統(tǒng)一。MP4是當前世界上較為主流的一種視頻封裝格式,能夠兼容絕大多數(shù)瀏覽器,更是當前流行的Html5技術原生支持的視頻格式,因此在本系統(tǒng)中采用MP4作為統(tǒng)一視頻編碼格式。
FFMPEG是一個集錄制、轉換、音/視頻編解碼功能為一體的、完整的開源解決方案,支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多種編碼,AVI、MPEG、OGG、ASF等90多種解碼,完全能夠滿足本系統(tǒng)的轉碼需求。
Lessonbuilder組件二次開發(fā)
圖6 基本類與主要成員描述
Lessonbuilder是Sakai平臺中的教學內容組織工具,它可以將各種教學文檔、圖片、音視頻、作業(yè)、在線測試、討論主題等教學元素按照特定的方式組織起來,并呈現(xiàn)完整的知識單元與情境,實現(xiàn)了各類教學資源的深度融合。
表 2 視頻信息表video
根據(jù)新的視頻框架設計,為了與獨立的視頻平臺進行對接,需要對Lessonbuilder組件中的視頻上傳模塊進行二次開發(fā),并替換播放模塊中自帶的播放器。
Lessonbuilder組 建 使 用 了 RSF(Reasonable Server Faces)開發(fā)框架,RSF是一個基于Spring的輕量級開源框架,用戶層使用純XHTML模板進行開發(fā)。
1.前端頁面開發(fā)
在Lessonbuilder組件中,用戶層上傳視頻的模板文件是ShowPage.html,需要對其中的上傳視頻部分的代碼進行二次開發(fā),首先需要修改前臺頁面,主要代碼如下:
<!--視頻上傳表單--提交至視頻服務器-->