鄭 娟 ,徐劉杰,吳 豹,李 彪
(1.滁州學(xué)院 教務(wù)處,安徽 滁州 23000;2.湖南科技學(xué)院 信息技術(shù)與教育系,湖南 永州 425100;3.滁州學(xué)院 計(jì)算機(jī)與信息工程學(xué)院,安徽 滁州 239000)
互聯(lián)網(wǎng)媒體元素在當(dāng)代社會(huì)發(fā)揮越來(lái)越重要的作用,數(shù)據(jù)產(chǎn)生方式由原來(lái)被動(dòng)式的內(nèi)容定制,變成主動(dòng)式的用戶(hù)原創(chuàng)。在眾多的網(wǎng)絡(luò)資源中,視頻媒體占據(jù)著互聯(lián)網(wǎng)網(wǎng)絡(luò)資源的半壁河山。隨著用戶(hù)對(duì)視頻資源的點(diǎn)播需求越來(lái)越多,通過(guò)手機(jī)、平板等各種終端來(lái)快速獲取視頻資源,已經(jīng)成為當(dāng)下一種資源獲取的主流形式。如何快速處理這些海量視頻文件變得極具迫切性。
國(guó)內(nèi)外相關(guān)領(lǐng)域的研究人士對(duì)于處理大數(shù)據(jù)提出了很多的解決方案,但是目前得到最廣泛使用的是Hadoop并行計(jì)算技術(shù)[1]。Hadoop主要包括HDFS和MapReduce兩大部分[2]。HDFS提供了完善的分布式存儲(chǔ)方案,幫助用戶(hù)分布式地存儲(chǔ)大文件,而MapReduce是種優(yōu)秀的并行程序框架,幫助用戶(hù)輕松的寫(xiě)出分布式處理代碼[3]。為了應(yīng)對(duì)越來(lái)越多的視頻在線(xiàn)點(diǎn)播,萬(wàn)維網(wǎng)理事會(huì)推薦使用內(nèi)置的視頻標(biāo)簽代替?zhèn)鹘y(tǒng)的Flash插件進(jìn)行在線(xiàn)視頻點(diǎn)播。但是瀏覽器廠(chǎng)商對(duì)于可點(diǎn)播視頻的格式支持力度有限,目前得到最廣泛支持的是由H.264編碼的MP4格式。面對(duì)種類(lèi)繁多的視頻大文件,如何快速地將它們轉(zhuǎn)換為在線(xiàn)播放所支持的編碼類(lèi)型,在當(dāng)下變得尤為重要。
Hadoop在大文件存儲(chǔ)和處理方面有著獨(dú)特的優(yōu)勢(shì),通過(guò)HDFS可以快速地對(duì)視頻大文件進(jìn)行分布式存儲(chǔ),通過(guò)編寫(xiě)MapReduce程序?qū)DFS系統(tǒng)中的文件進(jìn)行并行轉(zhuǎn)碼[4]。本系統(tǒng)主要是在Hadoop環(huán)境和FFmpeg軟件下設(shè)計(jì)分布式視頻轉(zhuǎn)碼系統(tǒng),幫助用戶(hù)實(shí)現(xiàn)在線(xiàn)并行轉(zhuǎn)碼操作[5]。利用分布式處理可以降低視頻轉(zhuǎn)碼所需要的時(shí)間,提高視頻處理的效率,快速地為用戶(hù)文件提供在線(xiàn)點(diǎn)播服務(wù)。
本系統(tǒng)總體采用B/S結(jié)構(gòu),用戶(hù)使用瀏覽器即可完成所有的后臺(tái)操作。服務(wù)器端通過(guò)對(duì)用戶(hù)狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)聽(tīng),及時(shí)響應(yīng)用戶(hù)的操作,調(diào)控服務(wù)器端資源,針對(duì)用戶(hù)的視頻文件進(jìn)行分布式轉(zhuǎn)碼操作[6]。
在瀏覽器端,用戶(hù)首先需要登錄后臺(tái),后臺(tái)操作界面分為“文件功能區(qū)”和“轉(zhuǎn)碼功能區(qū)”。文件功能區(qū)主要包括“文件上傳”和“文件管理”,而轉(zhuǎn)碼功能區(qū)主要為用戶(hù)提供“創(chuàng)建轉(zhuǎn)碼任務(wù)”和“查看轉(zhuǎn)碼進(jìn)度”。在文件上傳部分,系統(tǒng)設(shè)計(jì)了分片上傳結(jié)構(gòu),當(dāng)用戶(hù)上傳視頻文件時(shí),系統(tǒng)先將用戶(hù)的文件分割成一個(gè)個(gè)文件分塊,分別發(fā)送到服務(wù)器指定存儲(chǔ)位置,最終在服務(wù)器內(nèi)歸并為原始的視頻文件,結(jié)構(gòu)如圖1 中的圖A。
在服務(wù)器端,設(shè)計(jì)并行工作結(jié)構(gòu),當(dāng)系統(tǒng)檢測(cè)到用戶(hù)提交轉(zhuǎn)碼請(qǐng)求后,首先會(huì)把用戶(hù)需要轉(zhuǎn)碼的大文件進(jìn)行分割,然后把分割后較小的文件存入HDFS中,存儲(chǔ)完畢后調(diào)用MapReduce程序?qū)γ總€(gè)小文件進(jìn)行轉(zhuǎn)碼操作[7],最終把HDFS中存儲(chǔ)的小文件合并為一個(gè)最終視頻文件,通過(guò)分布式工作結(jié)構(gòu)完成視頻的并行轉(zhuǎn)碼工作,結(jié)構(gòu)如圖1中的圖B。
圖1 系統(tǒng)結(jié)構(gòu)圖
1.2.1 用戶(hù)操作端功能模塊
用戶(hù)操作端為用戶(hù)提供一個(gè)完善的后臺(tái)操作平臺(tái),幫助用戶(hù)順利的使用平臺(tái),平臺(tái)功能主要包括“系統(tǒng)設(shè)置模塊”、“文件功能模塊”和“轉(zhuǎn)碼功能模塊”,具體的結(jié)構(gòu)圖如圖2所示。
(1) 系統(tǒng)設(shè)置模塊:此模塊主要完成對(duì)于操作后臺(tái)的相關(guān)設(shè)置,主要包括對(duì)于菜單、導(dǎo)航、賬戶(hù)、角色的管理和相關(guān)權(quán)限分配。
(2) 文件功能模塊:主要為用戶(hù)提供“存儲(chǔ)總覽”、“文件上傳”、“文件管理”等功能。
(3) 轉(zhuǎn)碼功能模塊:主要為用戶(hù)提供“添加轉(zhuǎn)碼任務(wù)”、“查看轉(zhuǎn)碼進(jìn)度”、“轉(zhuǎn)碼任務(wù)管理”。
圖2 后臺(tái)結(jié)構(gòu)圖
1.2.2 服務(wù)器端功能模塊
服務(wù)器端的主要責(zé)任是針對(duì)用戶(hù)的視頻文件進(jìn)行分布式存儲(chǔ)和并行轉(zhuǎn)碼操作,服務(wù)器端通過(guò)不斷監(jiān)聽(tīng)后臺(tái)數(shù)據(jù)庫(kù)的數(shù)據(jù)變化獲取并創(chuàng)建新的任務(wù),然后對(duì)任務(wù)進(jìn)行資源分配,最終完成視頻的并行轉(zhuǎn)碼[8]。其主要功能模塊包括用戶(hù)任務(wù)監(jiān)控、視頻文件分割、文件分布式存儲(chǔ)、文件分布式轉(zhuǎn)碼、文件塊合并等操作,具體的功能結(jié)構(gòu)如圖3所示。
圖3 轉(zhuǎn)碼后端結(jié)構(gòu)圖
用戶(hù)操作端基于PHP和ThinkPHP框架設(shè)計(jì)了動(dòng)態(tài)操作界面,利用MYSQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)管理。用戶(hù)操作端主要包括“系統(tǒng)設(shè)置”、“文件功能區(qū)”和“轉(zhuǎn)碼功能區(qū)”三大部分。
2.1.1 系統(tǒng)角色管理
系統(tǒng)默認(rèn)包含超級(jí)管理員、管理員和系統(tǒng)用戶(hù)三種角色,同時(shí)系統(tǒng)也支持自定義角色,不同的賬戶(hù)角色在系統(tǒng)中代表著不同的使用權(quán)限,系統(tǒng)用戶(hù)只能查看自己操作權(quán)限下的相關(guān)內(nèi)容。
(1)角色管理界面實(shí)現(xiàn)。在角色管理界面中,主要包括角色的添加、編輯、刪除和角色權(quán)限設(shè)定等功能。
(2)角色管理主界面功能實(shí)現(xiàn)。系統(tǒng)通過(guò)查詢(xún)用戶(hù)角色表,顯示角色列表,并創(chuàng)建相應(yīng)的按鈕事件,用戶(hù)通過(guò)點(diǎn)擊相應(yīng)的按鈕即可對(duì)用戶(hù)角色進(jìn)行管理。
2.1.2 文件分片上傳
由于系統(tǒng)處理的數(shù)據(jù)對(duì)象是視頻文件,而視頻文件通常體積巨大,傳統(tǒng)的HTTP文件上傳不具備很好的穩(wěn)定性,系統(tǒng)設(shè)計(jì)了分片模式,針對(duì)視頻文件進(jìn)行分片上傳。
(1)客戶(hù)端文件分片。由于視頻文件存儲(chǔ)較大,用戶(hù)在系統(tǒng)中選擇視頻文件后,系統(tǒng)首先會(huì)調(diào)用客戶(hù)端腳本程序把文件進(jìn)行一系列的分割,系統(tǒng)的分割單位為1MB,文件分割過(guò)程中,會(huì)向服務(wù)器發(fā)送一個(gè)個(gè)碎片文件。
(2)服務(wù)器文件融合??蛻?hù)端會(huì)持續(xù)向服務(wù)器端發(fā)送已經(jīng)被分割好的碎片文件,服務(wù)器腳本接受文件后會(huì)等待最后一個(gè)文件碎片,當(dāng)最后的數(shù)據(jù)接收完畢后,服務(wù)器執(zhí)行文件融合功能,把一系列小文件融合為大的數(shù)據(jù)文件。
2.1.3 添加轉(zhuǎn)碼任務(wù)
用戶(hù)上傳視頻文件完畢后,可以對(duì)視頻文件添加轉(zhuǎn)碼任務(wù),通過(guò)點(diǎn)擊文件列表后的“添加轉(zhuǎn)碼任務(wù)”按鈕即可打開(kāi)任務(wù)向?qū)?。用?hù)通過(guò)選擇轉(zhuǎn)碼文件的格式類(lèi)型并點(diǎn)擊“下一步”按鈕,即可完成轉(zhuǎn)碼任務(wù)的添加。用戶(hù)提交視頻轉(zhuǎn)碼請(qǐng)求后,服務(wù)器會(huì)啟動(dòng)分布式轉(zhuǎn)碼模塊,對(duì)視頻資源進(jìn)行并行轉(zhuǎn)碼,并及時(shí)更新任務(wù)狀態(tài),用戶(hù)可以在后臺(tái)查看任務(wù)轉(zhuǎn)碼進(jìn)度。用戶(hù)在系統(tǒng)后臺(tái),可以對(duì)已經(jīng)存在的轉(zhuǎn)碼任務(wù)進(jìn)行歷史狀態(tài)查詢(xún)、刪除等管理操作。
2.1.4 視頻在線(xiàn)播放
當(dāng)轉(zhuǎn)碼任務(wù)執(zhí)行完畢后,用戶(hù)可以通過(guò)后臺(tái)對(duì)轉(zhuǎn)碼后的視頻資源進(jìn)行在線(xiàn)播放,通過(guò)引用HTML視頻播放插件,并編寫(xiě)相應(yīng)的控制器代碼[9],實(shí)現(xiàn)對(duì)指定的文件進(jìn)行在線(xiàn)播放。
系統(tǒng)利用JAVA語(yǔ)言、Hadoop大數(shù)據(jù)處理框架、FFmpeg音視頻處理軟件設(shè)計(jì)了針對(duì)視頻文件的分布式處理系統(tǒng),系統(tǒng)的操作對(duì)象是用戶(hù)視頻,具體操作包含“任務(wù)創(chuàng)建”、“文件分割”、“分布式存儲(chǔ)”和“并行轉(zhuǎn)碼”。
2.2.1 任務(wù)創(chuàng)建
當(dāng)用戶(hù)提交轉(zhuǎn)碼任務(wù)后,系統(tǒng)會(huì)即時(shí)感應(yīng)到數(shù)據(jù)庫(kù)內(nèi)容的變化,并獲取相應(yīng)的任務(wù)列表,執(zhí)行任務(wù)創(chuàng)建操作。
2.2.2 文件分割并上傳HDFS
轉(zhuǎn)碼任務(wù)創(chuàng)建成功后,系統(tǒng)會(huì)把視頻文件進(jìn)行切片處理,文件在分割過(guò)程中,會(huì)保持每個(gè)小視頻文件仍具備視頻的二進(jìn)制格式,保證每個(gè)數(shù)據(jù)文件的完整性,視頻切片完畢后,系統(tǒng)會(huì)把每個(gè)切片視頻存儲(chǔ)進(jìn)HDFS中。
2.2.3 MapReduce分布式轉(zhuǎn)碼
當(dāng)文件均存入HDFS后,主控程序開(kāi)始調(diào)用MapReduce分布式模塊對(duì)HDFS中存儲(chǔ)的視頻文件進(jìn)行轉(zhuǎn)碼操作。主要是四個(gè)步驟,分別是主控進(jìn)程任務(wù)分配、分布式轉(zhuǎn)碼、結(jié)果集合并、轉(zhuǎn)碼文件合并[10]。
本系統(tǒng)主要對(duì)文件分片上傳、轉(zhuǎn)碼任務(wù)創(chuàng)建、轉(zhuǎn)碼任務(wù)狀態(tài)、視頻在線(xiàn)播放進(jìn)行測(cè)試并進(jìn)行數(shù)據(jù)分析,具體內(nèi)容如下所述。
系統(tǒng)后臺(tái)為了為用戶(hù)提供了文件上傳功能,就必須保證文件上傳的速度和穩(wěn)定性。在測(cè)試操作過(guò)程中,我們準(zhǔn)備了大小為3GB的測(cè)試文件,然后通過(guò)Windows7系統(tǒng)中內(nèi)置的性能監(jiān)視器對(duì)網(wǎng)卡的發(fā)包狀況進(jìn)行實(shí)時(shí)監(jiān)控。通過(guò)觀(guān)察可以發(fā)現(xiàn)在文件上傳過(guò)程中,分片系統(tǒng)能夠讓網(wǎng)卡發(fā)揮100%的工作效率,并且能夠長(zhǎng)時(shí)間維持高速的文件上傳狀態(tài),結(jié)果說(shuō)明文件的分片上傳模式可以為用戶(hù)提供良好的上傳體驗(yàn)。
轉(zhuǎn)碼任務(wù)的創(chuàng)建過(guò)程包括用戶(hù)后臺(tái)操作和服務(wù)器后臺(tái)監(jiān)聽(tīng)兩部分,用戶(hù)后臺(tái)操作主要包括任務(wù)向?qū)峤?,服?wù)器后臺(tái)通過(guò)監(jiān)聽(tīng)用戶(hù)數(shù)據(jù)變化及時(shí)創(chuàng)建轉(zhuǎn)碼任務(wù)。
服務(wù)器后臺(tái)程序通過(guò)監(jiān)聽(tīng)用戶(hù)任務(wù)數(shù)據(jù)表狀態(tài),及時(shí)調(diào)動(dòng)相應(yīng)的任務(wù)創(chuàng)建模塊,針對(duì)用戶(hù)提交的請(qǐng)求創(chuàng)建轉(zhuǎn)碼任務(wù)發(fā)現(xiàn)服務(wù)器后臺(tái)程序能夠及時(shí)響應(yīng)用戶(hù)的合法轉(zhuǎn)碼請(qǐng)求,并為用戶(hù)的轉(zhuǎn)碼任務(wù)分配必要的資源,最終幫助用戶(hù)完成視頻轉(zhuǎn)碼操作。
轉(zhuǎn)碼任務(wù)狀態(tài)由管理后臺(tái)和服務(wù)器程序兩部分共同維護(hù),狀態(tài)碼如表1所示。
表1 任務(wù)狀態(tài)碼
通過(guò)測(cè)試發(fā)現(xiàn)系統(tǒng)能夠很好地執(zhí)行監(jiān)控任務(wù),能夠給予用戶(hù)清晰的信息展示。
系統(tǒng)針對(duì)用戶(hù)文件提供上傳和管理功能,對(duì)用戶(hù)的視頻資源提供轉(zhuǎn)碼任務(wù)創(chuàng)建、轉(zhuǎn)碼任務(wù)狀態(tài)監(jiān)控等功能。系統(tǒng)的設(shè)計(jì)目標(biāo)是為用戶(hù)上傳的視頻文件進(jìn)行分布式轉(zhuǎn)碼操作,最終將用戶(hù)的視頻文件轉(zhuǎn)碼為H.264編碼的MP4格式[11]。在系統(tǒng)設(shè)計(jì)過(guò)程中需要解決用戶(hù)的文件上傳、文件管理、視頻文件分布式轉(zhuǎn)碼等關(guān)鍵技術(shù)。針對(duì)文件上傳部分,系統(tǒng)設(shè)計(jì)了分片上傳模式,針對(duì)用戶(hù)的上傳文件首先會(huì)進(jìn)行分片處理,然后依次向服務(wù)器發(fā)送文件碎片,當(dāng)傳輸完畢后,服務(wù)器會(huì)對(duì)文件碎片進(jìn)行融合,最終形成完整的數(shù)據(jù)文件。系統(tǒng)基于MYSQL數(shù)據(jù)庫(kù)和PHP動(dòng)態(tài)網(wǎng)頁(yè)語(yǔ)言設(shè)計(jì)了用戶(hù)操作后臺(tái),用戶(hù)可以在控制后臺(tái)進(jìn)行文件管理、視頻文件轉(zhuǎn)碼和任務(wù)進(jìn)度監(jiān)控等操作。針對(duì)分布式轉(zhuǎn)碼操作,系統(tǒng)首先架構(gòu)了HDFS分布式存儲(chǔ)環(huán)境,在HDFS基礎(chǔ)上編寫(xiě)了MapReduce代碼[8],最終對(duì)用戶(hù)的視頻文件進(jìn)行分布式存儲(chǔ)和轉(zhuǎn)碼操作。通過(guò)分布式的數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)操作,幫助用戶(hù)快速地存儲(chǔ)視頻資源和對(duì)視頻資源進(jìn)行快速轉(zhuǎn)碼。
[參考文獻(xiàn)]
[1]O’Driscoll A, Daugelaite J, Sleator R D. ‘Big data’, Hadoop and cloud computing in genomics [J]. Journal of Biomedical Informatics, 2013, 46(5): 74-81.
[2](美)Tom White.Hadoop權(quán)威指南[M]. 周傲英, 曾大聃譯. 北京: 清華大學(xué)出版社, 2010.
[3]蔡武, 陳湘萍. Hadoop技術(shù)內(nèi)幕[M]. 北京: 機(jī)械工業(yè)出版社, 2014.
[4]王曉華. MapReduce 2.0源碼分析與編程實(shí)踐[M]. 北京: 人民郵電出版社, 2014.
[5]蘇凱雄. 基于FFmpeg的H.264格式轉(zhuǎn)換器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 電視技術(shù), 2016(07): 32-35.
[6]楊帆, 沈奇威. 分布式系統(tǒng)Hadoop平臺(tái)的視頻轉(zhuǎn)碼[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2011(11): 80-85.
[7]丁峰. 嵌入式Linux平臺(tái)下基于FFmpeg庫(kù)視頻格式轉(zhuǎn)換設(shè)計(jì)[D]. 哈爾濱:哈爾濱工程大學(xué), 2013.
[8]吳鋒. 基于Hadoop平臺(tái)的視頻轉(zhuǎn)碼系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 上海:上海交通大學(xué), 2014.
[9]劉笑. 基于Hadoop的視頻點(diǎn)播關(guān)鍵技術(shù)研究[D]. 成都:電子科技大學(xué), 2015.
[10]黃曉成. 面向視頻云存儲(chǔ)的HDFS負(fù)載均衡工具設(shè)計(jì)與實(shí)現(xiàn)[D]. 杭州:浙江大學(xué), 2016.
[11]羅文. 基于HTTP自適應(yīng)流媒體關(guān)鍵技術(shù)的研究及實(shí)現(xiàn)[D].南京:南京郵電大學(xué), 2014.