季聿階,張忠能
隨著網(wǎng)絡(luò)以及多媒體技術(shù)的快速發(fā)展,在日常生活中,隨處可以看見大大小小的LED大屏幕,無時無刻地播放著各種各樣的多媒體節(jié)目。
論文重點研究了多媒體節(jié)目的表現(xiàn)形式,對當前市場上面比較流行的一款多媒體播放軟件進行升級開發(fā),其核心是將所有需要展示的素材文件(包括視頻、圖片、文字等)通過組合的形式拼裝成一系列的頁面文件,通過網(wǎng)絡(luò)的方式傳輸?shù)礁鱾€播放終端上面,最后在播放終端的瀏覽器上播放。用戶可以根據(jù)不同的模板生成不同樣式的播放文件。此外,還增加了對外的Web Service接口,允許其他應(yīng)用程序調(diào)用其開放的 API來自動生成可以播放的多媒體文件,并定時下發(fā)到各個播放終端予以播放,大為縮短了多媒體文件的生成時間以及播放效率。
通過該系統(tǒng),用戶看到的多媒體節(jié)目是多個視頻、圖片、文字以任意方式組合,再以任意順序播放而成的節(jié)目。
論文中的多媒體文件主要分兩個層級:Unit(單元)和Program(節(jié)目)。Unit實為模板文件,每一個 Unit里面都可以包含多個視頻、圖片或多段文字信息。其中,視頻可以根據(jù)播放列表,循環(huán)播放;圖片可以根據(jù)設(shè)定的時間間隔,不斷地切換;文字則可以以走馬燈的形式滾動播出。Program是控制Unit的頂層邏輯,通過控制每一個Unit的播放順序以及播放時間,以達到不同模板定時切換的效果。
論文中自動生成多媒體文件的過程是系統(tǒng)自動編寫Unit和Program的過程。系統(tǒng)首先讀取用戶設(shè)計的節(jié)目樣式配置文件,將其中需要使用到的所有素材文件(視頻、圖片、文字等)分別發(fā)送到指定終端上面,再根據(jù)頁面的編寫規(guī)則自動生成相應(yīng)的HTML代碼,繼而將這些文件也一同發(fā)送到指定終端,最后在終端上面解析播放。
系統(tǒng)主要分為2大模塊7個子模塊:生成模塊包括讀取節(jié)目配置信息、生成標準節(jié)目類和生成節(jié)目文件,傳輸模塊包括傳輸素材文件、傳輸節(jié)目文件、終端素材置換和執(zhí)行播放,如圖1所示:
圖1 系統(tǒng)整體結(jié)構(gòu)設(shè)計
生成模塊主要的任務(wù)是讀取用戶的配置信息并生成所有的節(jié)目文件。首先,用戶根據(jù)想要播放的節(jié)目效果先行設(shè)計節(jié)目樣式,并保存成指定的xml格式,系統(tǒng)會讀取用戶的配置信息并予以解析,從中提取出相應(yīng)的信息封裝成一個標準的節(jié)目類,與此同時,系統(tǒng)會向用戶報告,系統(tǒng)已經(jīng)接收到節(jié)目請求,正在執(zhí)行節(jié)目文件的生成。緊接著,系統(tǒng)就開始根據(jù)標準節(jié)目類生成節(jié)目文件。
傳輸模塊主要的任務(wù)是將所有素材文件和節(jié)目文件上傳至指定的播放終端,進行播放。首先,用戶會將節(jié)目所需的所有素材上傳到服務(wù)器的指定目錄下,在生成模塊完成了節(jié)目文件的生成工作之后,標準節(jié)目類會搜索該節(jié)目需要的素材,并將這些素材上傳到指定的播放終端。隨后,待素材傳輸完畢,系統(tǒng)才會將節(jié)目文件傳輸至指定的終端。最后,當該節(jié)目到達播放時間,系統(tǒng)會將該節(jié)目的所有素材文件和節(jié)目文件切換到播放目錄之下,執(zhí)行播放,并報告用戶播放結(jié)果。
Web Service是一套被設(shè)計成可以支持機器與機器之間通過網(wǎng)絡(luò)互相操作的軟件系統(tǒng)。[1]它有一個被描述成機器可處理格式(通常是 WSDL[2])的接口,其它系統(tǒng)通過使用SOAP[3]消息描述的方式使用Web Service交互。FTP是一個基于 TCP/IP協(xié)議簇中的主機與主機間的文件傳輸協(xié)議。[4]Java多線程是將一些可同時執(zhí)行的程序并發(fā)進行,大大加快了程序的響應(yīng)速度[5]。
論文使用Apache Axis2對多媒體文件自動生成系統(tǒng)搭建了一個Web Service[1]的服務(wù)器和客戶端,方便云端應(yīng)用程序?qū)ζ溥M行訪問,其調(diào)用結(jié)構(gòu),如圖2所示:
圖2 系統(tǒng)整體調(diào)用結(jié)構(gòu)
云端應(yīng)用程序首先將節(jié)目所需的一系列素材文件上傳至系統(tǒng)的數(shù)據(jù)服務(wù)器,然后調(diào)用系統(tǒng)開放的Web Service接口,執(zhí)行生成節(jié)目的過程。系統(tǒng)在接收到云端應(yīng)用程序的請求后,會同時異步回報接收信息成功。在節(jié)目播放之后,服務(wù)器會發(fā)起對云端應(yīng)用程序的Web Service請求,報告整個節(jié)目播放的結(jié)果。
節(jié)目配置信息是一個XML文檔,其結(jié)構(gòu),如圖3所示:
圖3節(jié)目配置信息的xml結(jié)構(gòu)
config是根節(jié)點,對應(yīng)Program層級。其id為節(jié)目序號;title為節(jié)目標題;operType為操作指令;startDate為節(jié)目開始的日期;endDate為節(jié)目結(jié)束的日期;clients為需要播放的終端id;volume為節(jié)目的音量;templates為模板列表,該節(jié)點下的template節(jié)點對應(yīng)組成節(jié)目的Unit層級。其中,id為模板序號;playTime為模板播放的時間;bgColor為模板的背景顏色;fontColor為模板中文字的顏色;positions為不同位置的素材列表,該節(jié)點下僅有position這一類子節(jié)點。其id為位置序號;type為該位置的素材類型;items為素材列表,該節(jié)點下也僅有item這一類子節(jié)點。name表示素材的名字;time表示素材播放的時間。
使用JDOM2來解析XML文件,構(gòu)造成一個Document類:同時,開辟新線程繼續(xù)執(zhí)行后續(xù)指定,主線程回報用戶接收信息成功:
根據(jù)圖3的配置信息,分別構(gòu)造Program類、Template類、Position類和Item類,將相應(yīng)的子節(jié)點構(gòu)造成相應(yīng)的類的字段。
2.2.2小節(jié)中解析而得的 Document類已經(jīng)包含了所有XML的結(jié)構(gòu)信息,所以可以直接從中獲取配置信息。首先,獲得根節(jié)點信息:
Program p = newProgram();
Element pElementParent = doc.getRootElement();
接著,按照Item類、Position類、Template類、Program類的順序,利用pElementParent的get方法,獲取所有節(jié)點信息,一層一層封裝,最終,獲得一個完整的Program類實例p。
需要生成的節(jié)目文件只有Program和Unit兩類文件。
對于Program,系統(tǒng)將其拆分成三個部分,分別予以生成:
writeProgHead方法會將標準的 HTML頭部信息寫入content參數(shù),其中包括必要的JavaScript包和一些初始化信息,如窗口位置和需要加載的 Unit數(shù)量;writeProgMid方法會將每一個需要加載的Unit的id、地址和播放的時間寫入 content參數(shù);writeProgTail方法會將整個節(jié)目播放的起止時間、進入Unit的入口函數(shù)以及HTML的結(jié)束標記寫入content參數(shù)。最終,content輸出成一個Program文件。
對于Unit,系統(tǒng)會分別針對不同的模板進行改寫,予以生成,目前,系統(tǒng)中比較常用的兩個模板分別是圖片文字模板和視頻文字模板:
系統(tǒng)內(nèi)置了圖片、視頻和文字三個模塊的HTML組件代碼,這些代碼是由人工手動編寫而成的。updatePicUnit方法和updateMovUnit方法會分別選擇相應(yīng)的代碼予以拼接,修改字體和背景顏色,以及視頻的音量等信息,最終生成一個新的Unit文件。
傳輸文件分為傳輸素材文件和傳輸節(jié)目文件兩種,均通過 FTP傳輸,即傳輸方式相同,但其傳輸時機不同:素材文件占用空間可能過大,無法與節(jié)目播放同時傳輸,因此必須提前進行傳輸;而節(jié)目文件非常小,只需要在節(jié)目需要播放之前傳輸即可。
當節(jié)目需要播放時,播放終端會將節(jié)目所需要的素材文件全部轉(zhuǎn)移至終端的播放目錄下,再將原始播放目錄下的素材文件清空,并執(zhí)行節(jié)目的播放。播放命令完成后,服務(wù)器會通過Web Service調(diào)用回報用戶播放結(jié)果。
論文在實現(xiàn)系統(tǒng)的過程中,碰到了很多技術(shù)難點,對應(yīng)的解決方案,如表1所示:
表1 技術(shù)難點及解決方案
系統(tǒng)對于上傳的視頻文件,只會默認播放第一個視頻,當用戶在一個 Unit上播放多個視頻時,就會產(chǎn)生問題。解決方案是創(chuàng)建一個.asx格式的播放列表文件,每次需要播放視頻時,就會去讀取相應(yīng)的.asx文件,按照其中的視頻列表,逐個播放。其中,播放列表的.asx文件的XML結(jié)構(gòu),如圖4所示:
圖4 播放列表文件的xml結(jié)構(gòu)
在使用Apache Axis2搭建Web Service服務(wù)器和客戶端時,若傳輸素材文件過大,會導(dǎo)致傳輸時間過長的問題,從而導(dǎo)致服務(wù)器超時,連接中斷。解決方案是在Axis2的配置文件中,對服務(wù)器的連接時間進行設(shè)置,默認值為30秒,考慮到實際情況,實際傳輸過程可能會非常長,所以這里盡可能的將該值調(diào)大。
另一方面,在Web Service調(diào)用過程中,將其異步化也是解決超時的一個辦法:
最后服務(wù)器sender發(fā)出Web Service指令后,直接采取忽略結(jié)果的措施,而不是掛起等待返回結(jié)果。相當于異步通訊,加快響應(yīng)速度。
系統(tǒng)的播放終端運行Linux操作系統(tǒng),因此,在使用Java遠程進行文件夾創(chuàng)建時,無法獲取寫入權(quán)限,從而導(dǎo)致后續(xù)素材文件傳輸?shù)氖?。解決方案是,取消遠程新建文件夾的方法,直接改用FTP來新建,并修改FTP的傳輸模式,使之能夠在Linux下獲取全部權(quán)限,以使得傳輸素材文件能夠順利進行。
系統(tǒng)在進行節(jié)目文件生成的過程中盡可能多地考慮了可能出現(xiàn)的異常情況,并進行了異常處理,如表2所示:
表2 異常處理
將發(fā)生異常的信息用String進行描述,添加進報告用戶的message信息中,一旦發(fā)生異常,系統(tǒng)即認為對指定終端的操作為失敗,報告會立即發(fā)出。
根據(jù)對多媒體文件自動生成系統(tǒng)的研究與設(shè)計,已實現(xiàn)完整的應(yīng)用系統(tǒng)并投入使用,并對該系統(tǒng)的運行情況和應(yīng)用效果進行分析。
根據(jù)對多媒體文件自動生成系統(tǒng)的研究與設(shè)計,自主研發(fā)的多媒體文件自動生成接口,已經(jīng)在上海市移動營業(yè)廳的部分網(wǎng)點進行測試性使用。
運行多媒體文件自動生成系統(tǒng),至少需要一臺服務(wù)器與一臺播放終端,服務(wù)器上需要安裝Apache Tomcat服務(wù)器與Apache Axis2 Tools,播放終端僅僅需要聯(lián)網(wǎng)并擁有基本的Firefox瀏覽器即可。多媒體文件自動生成系統(tǒng)需要通過Apache Axis2 Tools – Service Archive Wizard 將源代碼生成可以在Apache Axis2的Web Service服務(wù)器上運行的.aar文件。
通過Web Service服務(wù)調(diào)用,將素材文件和節(jié)目傳輸至播放終端進行節(jié)目播放后,圖片模板,如圖5所示:
圖5 圖片模板
通過實際使用,該系統(tǒng)運行良好。在開發(fā)測試內(nèi)網(wǎng)環(huán)境(100Mbps帶寬網(wǎng)絡(luò))下,傳輸一個帶有200Mbps的視頻的節(jié)目的平均響應(yīng)時間為30秒,其理論傳輸最快時間為16秒,考慮實際傳輸速率達不到理想情況和處理其他邏輯的時間損耗,30秒的響應(yīng)時間處于可以接受的范圍之內(nèi)。在營業(yè)廳測試環(huán)境(營業(yè)廳帶寬2Mbps-30Mbps不等,機房帶寬10Mbps)下,目前運行 1個月沒有出現(xiàn)問題。該系統(tǒng)容錯能力強,在多個營業(yè)廳傳輸數(shù)據(jù)過程中,如果有一個沒有傳輸完成而中斷,后續(xù)指令只需要對這一個沒有傳輸成功的營業(yè)廳進行發(fā)布,不需要全部重新傳輸,在實際測試應(yīng)用中大大提高了工作的效率。
針對不同的播放節(jié)目需求,設(shè)計不同樣式的模板,對不同模板進行頁面生成,再按照配置文件分別進行頁面重組。通過終端素材調(diào)度算法,管理播放終端的素材文件,判斷各個節(jié)目所需要的素材是否齊備,若沒有被任何節(jié)目引用,則調(diào)用素材管理的垃圾回收機制進行刪除,節(jié)約播放終端的磁盤空間。對生成節(jié)目文件中間產(chǎn)生的各種異常進行處理,并及時反饋用戶,大大提高了系統(tǒng)的容錯能力。在實際測試和使用過程中,提高了工作效率,具備良好的實際應(yīng)用價值。
[1]Haas H,Brown A.Web services glossary[J].W3C Working Group Note (11 February 2004),2004.
[2]Christensen E,Curbera F,Meredith G,et al.Web services description [J].language (WSDL)1.12001.
[3]Gudgin M,Hadley M,Mendelsohn N,et al.SOAP Version 1.2[J].W3C recommendation,2003,24.
[4]Forouzan B A.TCP/IP protocol suite[M].McGraw-Hill,Inc.,2002.
[5]Eckel B.Thinking in JAVA[M].Prentice Hall PTR,2003.