李凱+段良濤+董林林
摘要:隨著科學(xué)技術(shù)的發(fā)展,用戶對視頻訪問的需求也與日俱增,有效存儲和管理海量的視頻文件,為用戶提供更好的體驗,越來越引起人們的關(guān)注。Hadoop則提供了一種新的思路,通過Hadoop的HDFS和ffmpeg的結(jié)合,視頻的轉(zhuǎn)碼和存儲得到了更好的效果。
關(guān)鍵詞:Hadoop ;視頻; 轉(zhuǎn)碼;存儲
中圖分類號:TP37 文獻標(biāo)識碼:A 文章編號:1009-3044(2015)30-0157-03
Research for Transcoding and Storage of Videos Based on Hadoop
LI Kai 1, DUAN Liang-tao2 , DONG Lin-lin2
(College of Computer Engineering, Qingdao Technological University, Qingdao 266033, China)
Abstract: With the development of science and technology ,the demands of the users for video access are more and more .It is more and more attact peoples attention that the effective storage and management of video files and providing users with better experience.Hadoop provides a new train of thought. Through the combination of Hadoop HDFS function and ffmpeg,the transcoding and storage of the videos obtain the better effect.
Key words: Hadoop; videos; transcoding; storage
隨著移動互聯(lián)網(wǎng)的迅猛發(fā)展,與之相應(yīng)的視頻app也越來越多,網(wǎng)絡(luò)帶寬狀況也都不相同,終端的播放設(shè)備和軟件的千差萬別便成了困擾視頻應(yīng)用的難題;隨著電信網(wǎng),互聯(lián)網(wǎng)和廣播電視網(wǎng)的三網(wǎng)融合的發(fā)展,更要求視頻在三個平臺上都能播放,因此視頻編碼格式需要進行轉(zhuǎn)換。由于用戶和網(wǎng)絡(luò)環(huán)境都比較復(fù)雜,特別是像視頻點播這樣的應(yīng)用,對海量視頻進行轉(zhuǎn)碼的需要更大,否則不能滿足多樣化終端環(huán)境和不同網(wǎng)絡(luò)的需求。視頻轉(zhuǎn)碼業(yè)務(wù)面臨越來越嚴(yán)峻的問題:海量化的視頻數(shù)據(jù),多平臺的視頻應(yīng)用,多樣性的視頻編碼標(biāo)準(zhǔn)。[1]
針對上述問題,首先必須有效地存儲和管理視頻數(shù)據(jù),才能為用戶提供良好的下載、播放等服務(wù),Hadoop和ffmpeg為我們提供了新的思路。
1 相關(guān)知識
Hadoop是一種可以對海量數(shù)據(jù)進行分布式處理的軟件框架。Hadoop對數(shù)據(jù)的處理有可靠、高效、可伸縮的特點。HDFS是Hadoop的分布式文件系統(tǒng),是Hadoop的重要組成部分。在使用的時候,HDFS既能夠作為存儲組件來配合Hadoop其他組件實現(xiàn)云功能;也可以單獨的用來構(gòu)建集群;通過Hadoop的HDFS,用戶便能夠開發(fā)分布式程序,而不用了解分布式文件系統(tǒng)的底層細(xì)節(jié),充分利用集群的特點進行存儲和高速運輸。MapReduce是一個編程模型,也是一個處理和生成超大規(guī)模數(shù)據(jù)集的算法模型的實現(xiàn)[2]。map和reduce函數(shù)是其底層過程。Map函數(shù)負(fù)責(zé)讀取文件分片中的數(shù)據(jù)記錄,把所有的數(shù)據(jù)記錄都轉(zhuǎn)換成鍵值對,并把文件分片的統(tǒng)計數(shù)據(jù)記錄下來。Map函數(shù)生成的中間結(jié)果作為Reduce函數(shù)的輸入,它會根據(jù)鍵以合并方式來縮小鍵/值對列表。
FFmpeg擁有領(lǐng)先的音/視頻編碼庫—libavcodec,是用來轉(zhuǎn)換、記錄數(shù)字音頻、視頻,并可以將其轉(zhuǎn)化成流的開源視頻工具軟件。Ffmpeg雖然是在Linux下開發(fā)出來的,但它能夠在大部分操作系統(tǒng)中編譯,其中就包括Windows系統(tǒng),能夠完成多種視頻格式的相互轉(zhuǎn)換,F(xiàn)FMPEG支持FLV,AC3,DV,DivX,MPEG,MPEG4等40多種編碼,Matroska,ASF,OGG,AVI,MPEG,等90多種解碼[3]。
2 總體架構(gòu)
利用Hadoop平臺及FFMPEG工具實現(xiàn)視頻數(shù)據(jù)轉(zhuǎn)儲的架構(gòu)描述如圖1所示[4]:
視頻轉(zhuǎn)儲的流程如下:
1) 本地服務(wù)器獲取源視頻文件,將源視頻文件分割成Chuck_1,Chuck_2,Chuck_3,Chuck_4等視頻片段;
2) 將視頻片段上傳到HDFS;
3) 在Hadoop集群用map對視頻片段進行轉(zhuǎn)碼生成新的視頻片段Chuckm_1,Chuckm_2,Chuckm_3,Chuckm_4等;
4) 利用reduce對Chuckm_1, Chuckm_2,Chuckm_3,Chuckm_4等視頻片段進行合并。
3 模塊實現(xiàn)
根據(jù)視頻轉(zhuǎn)儲處理流程,系統(tǒng)可以分為視頻分割、視頻轉(zhuǎn)碼、視頻合并、視頻上傳、視頻下載五個模塊。
3.1視頻分割
ffmpeg分割視頻的指令示例如下:
ffmpeg -ss 00:00:00 -i f.avi -vcodec copy -acodec copy -t 00:06:00 output.avi
首先,調(diào)用Convervideo類,然后調(diào)用getTime()方法獲取視頻的總時長,再根據(jù)要分割的分片數(shù),獲取每一分片的時長,最后調(diào)用ffmpeg分割視頻指令對視頻進行分割,并將分割后的視頻路徑寫入txt中。
視頻分割流程如圖2所示,分割后的效果圖如圖3所示,
一般來說,視頻分片存儲在HDFS上,而視頻轉(zhuǎn)碼是在本地文件系統(tǒng)進行的,所以首先需要將視頻分片文件下載到本地。之后map( )函數(shù)接收
視頻合并的ffmpeg指令示例:
ffmpeg -f concat -i /home/hadoop/videotest/codelist.txt -c copy outtest.flv
視頻的合并處理工作是由Reducer的reduce( )函數(shù)完成的。視頻合并過程如圖6所示:
首先,map()函數(shù)將轉(zhuǎn)碼視頻分片信息傳遞給reduce()函數(shù),reduce( )函數(shù)根據(jù)接收的信息,將轉(zhuǎn)碼視頻分片從目標(biāo)節(jié)點下載到本地,最后調(diào)用視頻處理類的合并方法將視頻合并,把視頻合并結(jié)果上傳至HDFS。reduce函數(shù)不輸出鍵值對。
3.4視頻上傳
如何實現(xiàn)通過云存儲平臺把文件上傳至HDFS集群,關(guān)鍵是后臺代碼的編寫。這里調(diào)用HDFS的API,使用的是HDFS中DistributedFileSystem的copyFromLocalFile 方法,將本地文件根據(jù)給出的文件路徑上傳到HDFS,最終實現(xiàn)文件從用戶本地上傳到HDFS集群。
上傳文件調(diào)用的org.apache.hadoop.hdfs.DistributedFileSystem類是繼承的抽象類 org.apache.hadoop.fs.FileSystem??蛻舳巳绻胍M行相關(guān)文件操作,訪問HDFS集群,必須通過該類來實現(xiàn)??蛻舳伺c集群中NameNode通過DistributedFileSystem類建立連接,然后與NameNode進行通信和相關(guān)交互,調(diào)用DistributedFileSystem類的相關(guān)方法來完成元數(shù)據(jù)的相關(guān)操作。具體流程圖7所示。
3.5視頻下載
客戶端通過DistributedFileSystem類與NameNode建立連接,完成元數(shù)據(jù)的相關(guān)操作后,再調(diào)用DistributedFileSystem中的open方法,隨后打開HDFS輸入流FSDataInputStream,將HDFS文件輸入流轉(zhuǎn)向本地文件輸出流,利用copyToLocalFile方法便實現(xiàn)了文件從HDFS集群到本地的下載過程。具體流程如圖8所示:
4 結(jié)論
隨著互聯(lián)網(wǎng)的迅猛發(fā)展,云存儲、云計算成為了國內(nèi)外研究的熱點。在海量數(shù)據(jù)存儲方面,云存儲的優(yōu)越性使之成為業(yè)界關(guān)注的焦點。開源分布式系統(tǒng)框架Hadoop擁有強大的數(shù)據(jù)存儲能力和計算能力,在云存儲的解決方案和系統(tǒng)架構(gòu)上,基于Hadoop文件系統(tǒng)的應(yīng)用越來越廣泛[6]。本文中,這種通過Hadoop和ffmpeg的結(jié)合的方法,能夠很好地提升視頻轉(zhuǎn)儲的效率,為用戶提供良好的用戶體驗。
參考文獻:
[1] 方陽.海量視頻實時云轉(zhuǎn)碼系統(tǒng)設(shè)計與實現(xiàn)[D]. 大連:大連理工大學(xué),2013.
[2] 李曉波.基于Hadoop的海量視頻數(shù)據(jù)存儲及轉(zhuǎn)碼系統(tǒng)的研究與設(shè)計[D].杭州:浙江工業(yè)大學(xué),2013.
[3] 趙淑漫. FFMPEG轉(zhuǎn)碼技術(shù)在HTML5視頻系統(tǒng)中的研究與應(yīng)用[D].上海:東華大學(xué),2013.
[4] 熊曉蕓,段良濤,王金龍.云平臺上AVS視頻轉(zhuǎn)碼系統(tǒng)的設(shè)計與實現(xiàn)[J].電視技術(shù),2016(6).
[5] 郭奕希.基于Hadoop的視頻轉(zhuǎn)碼系統(tǒng)設(shè)計與實現(xiàn)[D].武漢:華中科技大學(xué),2011.
[6] 張興.基于Hadoop的云存儲平臺的研究與實現(xiàn)[D].成都:電子科技大學(xué),2013.