一種基于分布式的視頻轉(zhuǎn)碼方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于大數(shù)據(jù)與視頻處理技術(shù)領(lǐng)域,涉及分布式平臺上的海量視頻的轉(zhuǎn)碼處 理,尤其涉及一種基于分布式的大規(guī)模視頻轉(zhuǎn)碼方法。
【背景技術(shù)】
[0002] 由于互聯(lián)網(wǎng)及手機(jī)網(wǎng)絡(luò)的不斷發(fā)展,涌現(xiàn)出越來越多的媒體傳播的平臺,加之手 機(jī)普遍都具備攝像功能,便攜式的攝像機(jī)的使用也變得很普遍,視頻的制作和發(fā)布變得非 常簡單,人們每天都會制作出大量的視頻數(shù)據(jù)并分享到互聯(lián)網(wǎng)上,同時低功率的攝像傳感 器網(wǎng)絡(luò)及視頻監(jiān)控網(wǎng)絡(luò)也得到了大量應(yīng)用,使得每天新產(chǎn)生的視頻數(shù)據(jù)出于持續(xù)增長的狀 態(tài)。由于網(wǎng)絡(luò)的異構(gòu)性和終端播放設(shè)備的多樣性,往往需要將視頻文件進(jìn)行格式轉(zhuǎn)換,以滿 足不同的應(yīng)用需求,轉(zhuǎn)換內(nèi)容包括改變視頻的編碼格式、分辨率、比特率等屬性。視頻轉(zhuǎn)換 工作十分消耗計算資源,CPU占用率很高,在進(jìn)行格式轉(zhuǎn)換任務(wù)時,其他的任務(wù)很難得到處 理,因此有必要將視頻轉(zhuǎn)碼作業(yè)從單機(jī)系統(tǒng)中脫離出來進(jìn)行處理。傳統(tǒng)的視頻轉(zhuǎn)碼是集中 式的,在處理大量的視頻數(shù)據(jù)的時候有很大的局限性,其計算能力很難隨著數(shù)據(jù)量變大而 線性增長。分布式計算技術(shù)的發(fā)展為解決這個問題提供了可能。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明要解決大規(guī)模視頻的轉(zhuǎn)碼問題,針對視頻轉(zhuǎn)碼的效率,提出一種基于分布 式的大規(guī)模視頻轉(zhuǎn)碼方法,實現(xiàn)在大數(shù)據(jù)處理平臺Hadoop的基礎(chǔ)上,完成分布式的大規(guī)模 視頻轉(zhuǎn)碼過程。
[0004] 為了實現(xiàn)上述目的本發(fā)明采用以下技術(shù)方案:
[0005] 一種基于分布式的視頻轉(zhuǎn)碼方法,其流程如圖1所示,具體包括以下步驟:
[0006] 步驟1.上傳視頻文件:將需要轉(zhuǎn)碼的大量源視頻數(shù)據(jù)上傳至Hadoop平臺的HDFS 文件系統(tǒng)上;
[0007] 步驟2.對已上傳至HDFS的源視頻數(shù)據(jù)進(jìn)行預(yù)處理:通過Hadoop平臺提供的 InputFormat接口,將每個源視頻文件解析成一個相應(yīng)的鍵值對〈key,value〉,其中,key為 視頻文件名,value為轉(zhuǎn)碼參數(shù)信息,其包括視頻的保存位置、源視頻格式信息及轉(zhuǎn)碼的目 標(biāo)視頻格式信息;
[0008] 步驟3.將源視頻文件進(jìn)行分割:在Hadoop平臺上啟動第一MapReduce任務(wù)作業(yè), 利用Xuggler多媒體處理庫對每一個源視頻進(jìn)行分割,其中Map函數(shù)的輸入為通過步驟2 預(yù)處理得到的鍵值對〈key,value〉,通過讀取每個鍵值對包含的視頻信息,對相應(yīng)的視頻數(shù) 據(jù)進(jìn)行分割操作;該MapReduce作業(yè)輸出通過分割而得的視頻分塊及相應(yīng)的鍵值對信息, 該鍵值對信息包括每個視頻分塊的源視頻文件信息及該視頻分塊在源視頻中的位置;分割 得到的視頻分塊可進(jìn)行單獨(dú)的轉(zhuǎn)碼操作;
[0009] 步驟4.對步驟3經(jīng)分割得到的視頻分塊按目標(biāo)視頻格式進(jìn)行轉(zhuǎn)碼:在Hadoop平 臺上啟動第二MapReduce作業(yè),利用Xuggler多媒體處理庫對每一個視頻分塊進(jìn)行轉(zhuǎn)碼,其 中,該作業(yè)的Map函數(shù)的輸入為處理步驟3得到視頻分塊的鍵值對信息,得到轉(zhuǎn)碼后的視頻 分塊及相應(yīng)的鍵值對信息,該鍵值對信息包括每個視頻分塊的源視頻文件信息及該視頻分 塊在源視頻中的位置;完成轉(zhuǎn)碼后,第二MapReduce作業(yè)的Reduce函數(shù)通過讀取本步驟所 得的鍵值對信息,將同屬于一個源視頻文件的轉(zhuǎn)碼后的視頻分塊按時間位置順序進(jìn)行組合 獲得相應(yīng)的轉(zhuǎn)碼后目標(biāo)視頻,由此完成源視頻到目標(biāo)視頻的轉(zhuǎn)碼過程。
[0010] 進(jìn)一步的,步驟3的視頻分割過程中,視頻分塊的大小與Hadoop平臺上HDFS的分 塊大小相同,這樣在進(jìn)行轉(zhuǎn)碼任務(wù)時,一個Map任務(wù)只需從一個節(jié)點(diǎn)上讀取數(shù)據(jù),轉(zhuǎn)碼任務(wù) 執(zhí)行時,更可能達(dá)到數(shù)據(jù)本地化,減少文件傳輸過程。
[0011] 本發(fā)明的有益效果是:
[0012] 本發(fā)明在傳統(tǒng)視頻轉(zhuǎn)碼的基礎(chǔ)上提出了一種采用大數(shù)據(jù)處理的方式進(jìn)行視頻轉(zhuǎn) 碼的方法,具有以下優(yōu)點(diǎn):
[0013] (1)本發(fā)明利用分布式文件系統(tǒng)的擴(kuò)展性和穩(wěn)定性特點(diǎn)實現(xiàn)對大規(guī)模視頻數(shù)據(jù)的 儲存,解決傳統(tǒng)集中式儲存對硬件要求高、維護(hù)困難、不易擴(kuò)展等缺點(diǎn),動態(tài)地適應(yīng)日益增 長的大規(guī)模視頻數(shù)據(jù)的儲存需求;
[0014] (2)通過分布式系統(tǒng)的實時調(diào)度,各個工作節(jié)點(diǎn)以非常高的效率協(xié)同工作,且能夠 適應(yīng)動態(tài)的運(yùn)行環(huán)境,達(dá)到降低整個視頻轉(zhuǎn)碼時間的目的;單機(jī)系統(tǒng)轉(zhuǎn)碼對單機(jī)的硬件配 置要求較高,而分布式轉(zhuǎn)碼系統(tǒng)僅需用普通的電腦搭建集群即可,且對整個視頻的轉(zhuǎn)換速 度會更快;
[0015] (3)利用分治的思想,將文件分成合適大小的分塊,通過對各個分塊的并行轉(zhuǎn)碼, 提高對整個文件的轉(zhuǎn)碼效率;系統(tǒng)在文件處理的過程中若出現(xiàn)問題,只需要重新調(diào)度執(zhí)行 出錯的分塊,而不必重新處理整個文件,進(jìn)而縮短了出錯時重復(fù)處理的時間;
[0016] (4)Hadoop通常用處理文本文件這類的結(jié)構(gòu)化數(shù)據(jù),用它來對視頻文件這種非結(jié) 構(gòu)化的數(shù)據(jù)進(jìn)行處理,不但擴(kuò)展了Hadoop平臺的應(yīng)用范圍,也為大規(guī)模視頻數(shù)據(jù)的其他處 理如視頻檢索、跟蹤等應(yīng)用提供一個可參考的方式。
【附圖說明】
[0017] 圖1為本發(fā)明方法提供的視頻轉(zhuǎn)碼方法流程圖;
[0018] 圖2為本發(fā)明實施例實驗系統(tǒng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)示意圖;
[0019] 圖3為本發(fā)明實施例轉(zhuǎn)碼前視頻的播放效果;
[0020] 圖4為本發(fā)明實施例轉(zhuǎn)碼后視頻的播放效果。
【具體實施方式】
[0021] 為了使得本發(fā)明的目的、技術(shù)方案和有益效果更加清楚明白,以下結(jié)合具體案例, 并參照附圖,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)的說明。
[0022] 本發(fā)明是用于大規(guī)模視頻轉(zhuǎn)碼的,該方法在大數(shù)據(jù)處理平臺Hadoop上采用分布 式的方法最終實現(xiàn)大規(guī)模的視頻轉(zhuǎn)碼,系統(tǒng)利用HDFS文件系統(tǒng)對大規(guī)模視頻數(shù)據(jù)進(jìn)行儲 存,利用MapReduce編程模型進(jìn)行分布式處理,借助多媒體庫Xuggler實現(xiàn)對視頻的處理。 本發(fā)明對視頻的分布式轉(zhuǎn)碼主要經(jīng)歷三個過程:首先用一個map函數(shù)完成對源視頻文件分 塊,分塊完成后對每一個分塊用一個map函數(shù)進(jìn)行轉(zhuǎn)碼,最后在reduce階段將轉(zhuǎn)碼后的分 塊按順序合并成完整的視頻文件,其中所有的視頻處理都是在HDFS上進(jìn)行的。
[0023] 一種基于分布式的視頻轉(zhuǎn)碼方法,其流程如圖1所示,具體包括以下步驟:
[0024] 步驟1.上傳視頻文件:將需要轉(zhuǎn)碼的大量源視頻數(shù)據(jù)上傳至Hadoop平臺的HDFS 文件系統(tǒng)上;
[0025] 步驟2.對已上傳至HDFS的源視頻數(shù)據(jù)進(jìn)行預(yù)處理:通過Hadoop平臺提供的 InputFormat接口,將每個源視頻文件解析成一個相應(yīng)的鍵值對〈key,value〉,其中,key為 視頻文件名,value為轉(zhuǎn)碼參數(shù)信息,其包括視頻的保存位置、源視頻格式信息及轉(zhuǎn)碼的目 標(biāo)視頻格式信息;
[0026] 在Hadoop系統(tǒng)中,對MapReduce作業(yè)的輸入處理是通過實現(xiàn)InputFormat 接口實現(xiàn)的,利用實現(xiàn)的類將輸入解析成為鍵值對,此接口包含getsplitsO和 createRecordReaderO這2個方法;其中g(shù)etsplitsO用于得到計算文件的分片,因為 在Hadoop中,一個Mapper對應(yīng)處理一個分片,每個map函數(shù)的輸入都是鍵值對,通過 createRecordReader()返回一個實現(xiàn)RecordReader接口的對象,對每個split循環(huán)調(diào)用對 象的next()方法按照開發(fā)者自定義規(guī)則進(jìn)行處理,將每個split解析成鍵值對;對于視頻 格式的文件,通過實際需要來定制當(dāng)前的InputFormat接口;
[0027] 步驟3.將源視頻文件進(jìn)行分割:在Hadoop平臺上啟動第一MapReduce任務(wù)作業(yè), 利用Xuggler多媒體處理庫對每一個源視頻進(jìn)行分割,其中Map函數(shù)的輸入為通過步驟2 預(yù)處理得到的鍵值對〈key,value〉,通過讀取每個鍵值對包含的視頻信息,對相應(yīng)的視頻數(shù) 據(jù)進(jìn)行分割操作;該MapReduce作業(yè)輸出通過分割而得的視頻分塊及相應(yīng)的鍵值對信息, 該鍵值對信息包括每個視頻分塊的源視頻文件信息及該視頻分塊在源視頻中的位置;分割 得到的視頻分塊可進(jìn)行單獨(dú)的轉(zhuǎn)碼操作;
[0028] 在分塊過程中,系統(tǒng)為每個分塊按照原視頻播放順序從1開始分配一個ID,以便 在reduce函數(shù)能按照正確的順序?qū)Ψ謮K進(jìn)行合并;視頻分塊大小的確定:如果視頻分塊太 大,則不能很好地利用系統(tǒng)的并行性,如果分塊過小,視頻分塊個數(shù)就會增多,相應(yīng)的需要 啟動更多的Map任務(wù)進(jìn)行轉(zhuǎn)碼,消耗在啟動Map任務(wù)上的總時間就越長;本發(fā)明從數(shù)據(jù)本地 化的角度出發(fā),簡單地將視頻分塊大小設(shè)定為HDFS的分塊大小,這樣在進(jìn)行轉(zhuǎn)碼任務(wù)時, 一個Map任務(wù)只需從一個節(jié)點(diǎn)上讀取數(shù)據(jù),轉(zhuǎn)碼任務(wù)執(zhí)行時,更可能達(dá)到數(shù)據(jù)本地化,減少 文件傳輸過程;
[0029] 由于視頻每一幀的尺寸通常不一樣,造成具有相同時長的視頻分塊,其大小也會 有差異,為了控制分塊兒大小,本發(fā)明采取的策略是:分割時設(shè)定的時間間隔=視頻總時 長X80%XHDFS配置的block大小/視頻文件大小,其中80%是一個經(jīng)驗值,這樣設(shè)定的 目的是盡量使一個視頻分塊保存在一個block之內(nèi),以降低map任務(wù)跨節(jié)點(diǎn)讀取數(shù)據(jù)執(zhí)行 的概率,實現(xiàn)任務(wù)的本地化;
[0030] 步驟4.對步驟3經(jīng)分割得到的視頻分塊按目標(biāo)視頻格式進(jìn)行轉(zhuǎn)碼:在Hadoop平 臺上啟動第二MapReduce作業(yè),利用Xuggler多媒體處理庫對每一個視頻分塊進(jìn)行轉(zhuǎn)碼,其 中該作業(yè)的Map函數(shù)的輸入為處理步驟3得到視頻分塊的鍵值對信息,得到轉(zhuǎn)碼后的視頻 分塊及相應(yīng)的鍵值對信息,該鍵值對信息包括每個視頻分塊的源視頻文件信息及該視頻分 塊在源視頻中的位置;完成轉(zhuǎn)碼后,第二MapReduce作業(yè)的Reduce函數(shù)通過