[丁圣勇 樊勇兵 陳楠]
分布式視頻處理框架及基于Hadoop的參考實現
[丁圣勇 樊勇兵 陳楠]
隨著互聯網、智能終端以及APP的快速發(fā)展,視頻數據成為極其重要的數據來源,視頻中包含了大量文本無法承載的信息。由于視頻數據具有量大、高度非結構化特點,大規(guī)模視頻數據處理非常困難。文章提出一種基于大數據平臺的視頻處理系統(tǒng),該系統(tǒng)充分利用大數據平臺的能力實現視頻處理的分布式調度,使得開發(fā)者僅需要關注算法部分,從而大幅度提升開發(fā)效率。
大數據 視頻處理 視頻解碼 Hadoop
中國電信廣州研究院,2001年本科畢業(yè)于中國科技大學,2015年獲中山大學計算機博士學位,長期從事云計算和大數據技術及應用研究。
樊勇兵
中國電信廣州研究院。
陳楠
中國電信廣州研究院。
隨著互聯網以及智能終端的發(fā)展,視頻數據規(guī)模呈現爆炸式增長。有報告指出[1]:“智能視頻監(jiān)控、視頻內容分析和視頻分析每年處理數萬億小時的視頻監(jiān)視圖像”。而據鄔賀銓院士報告指出:“在線視頻將成為消費者互聯網流量的主導,網絡視頻流量比例將從2015年的37.4%增長到2019年的52%;網絡視頻流量占消費者互聯網流量比例從2015年66%增長到2019年80%。2019年以電視機為終端的互聯網視頻將比2014年增長4倍”。
文本、語音、圖像以及圖像的序列視頻是自然界最重要的信息載體,文本往往用來表達概念,圖像和語音則往往記錄更為真實的場景,彼此互補而又不可替代。由于圖片的攝取更為方便,隨著移動互聯網的發(fā)展,用戶越來越傾向于使用圖片或視頻記錄場景。此外,大量的攝像頭監(jiān)控存儲了海量數據,這些數據準確記錄了監(jiān)控場景中發(fā)生的各種事件。由于視頻數據包含了文本數據無法承載的信息,準確挖掘視頻數據中包含的信息對實際應用具有重要的意義。
相比文本數據,視頻數據處理有幾個難點。(1)數據規(guī)模遠遠超過文本,這導致視頻數據處理的計算量特別大;(2)視頻數據具有高度非結構化特點,原始數據必須經過濾波、檢測、識別等一系列復雜操作才能得到有價值的信息。隨著深度學習等技術的發(fā)展,對視頻數據的理解能力越來越高,計算瓶頸問題則相對更為突出。
只有通過瑞士聯邦計量研究院 (METAS) 的嚴苛檢測,才能獲得印有“MASTER CHRONOMETER CERTIFICATE”的紅色認證卡。
由于視頻計算密集,單機已經很難滿足大規(guī)模視頻處理需求。對一個大型視頻處理系統(tǒng),盡管開發(fā)者可以從頭搭建分布式處理系統(tǒng),但需要花費大量的精力在底層處理框架,如任務加載、數據分割、結果匯總等。考慮到大規(guī)模視頻處理有相當部分的工作可以重復利用,我們提出一種通用的大規(guī)模視頻處理平臺方案,使得用戶只需關注業(yè)務邏輯和核心算法。由于大數據技術已經提供了大量的分布式計算方案,我們進一步基于Hadoop平臺提出一種參照實現,該框架使用Hadoop的HDFS模塊存儲數據,視頻處理部分使用Hadoop MapReduce通用計算框架,在Hadoop上疊加一層Hadoop Video,負責封裝通用的視頻處理任務,如視頻切割、解碼以及接口封裝?;贖adoop Video,應用系統(tǒng)只需實現特定的接口即可實現大規(guī)模處理系統(tǒng)。
后續(xù)我們稱大規(guī)模視頻處理框架為Big Video,基于Hadoop實現的框架則成為Hadoop Video。
從開發(fā)者角度,Big Video需要支持一下核心功能:
視頻存儲。首先集群應該提供一個超大的存儲空間,用戶能夠方便的上傳并存儲視頻。支持各種大小的視頻文件,同時兼容圖像數據。
視頻解碼。Big Video應該自動提供解碼功能,適應各種不同的視頻格式。
內嵌函數。Big Video應當提供豐富的圖像處理套件,如常用特征抽取,各種矩陣操作函數,濾波函數以及經典的物體檢測、識別等。
編程接口。同時提供視頻級和幀級別的編程接口,滿足有狀態(tài)和無狀態(tài)任務需求。在幀級別接口用戶僅需對幀進行操作,屬于無狀態(tài)計算。在視頻級接口,用戶可以使用序列進行操作,也就是能夠獲得視頻整個的序列。
并發(fā)調度。能夠提供高效的并發(fā)調度機制,需要考慮到數據的物理位置盡可能減少跨節(jié)點傳輸。
性能要求。系統(tǒng)能夠提供接近線性的擴展能力,也就是處理容量能夠隨CPU核心數目成準線性增加。同時能夠支持GPU并行處理并進行豐富的功能封裝,用戶無需使用復雜的GPU底層編程接口。
視頻存儲:為了并行處理,并減少帶寬需求,視頻數據應盡可能分布到不同的計算節(jié)點,實現一般采用塊方式??紤]到視頻數據的特殊性,每個塊應攜帶必要的視頻編碼信息,以保證能夠獨立解碼。
分布處理:由于視頻數據巨量,應盡可能減少數據跨節(jié)點的傳輸,包括原始視頻數據和解碼后的幀數據。因此每個加載的任務應就近處理所在物理節(jié)點的數據,這種就近訪問思想是大數據平臺的重要設計理念?;诖嗽瓌t,視頻解碼以及幀處理都應當盡可能在視頻段所在的物理機完成。圖1給出了相應的示意圖。
開發(fā)接口:根據任務的不同,我們簡單分無狀態(tài)計算和有狀態(tài)計算。無狀態(tài)計算指視頻幀的處理不具有前后依賴關系;有狀態(tài)則相反。這兩種不同類型的任務要求平臺能夠暴露視頻級處理接口和幀級處理接口。由于處理任務非常多樣,平臺需設計層次化的接口,簡單可分為Low level和High level接口。Low level接口設計面向一般性計算,不做任何特定假設,比如將所有處理結果抽象為
視頻解碼:視頻解碼是視頻處理系統(tǒng)特有的前置環(huán)節(jié),也是計算密集的環(huán)節(jié)。視頻解碼需要考慮的因素包括:
(1)格式支持:應支持主流視頻格式,如mp4,mkv,avi,rmvb等。
(2)解碼速度:對720p分辨率視頻,CPU主頻2.5GHZ下,單CPU應能支持每秒300幀以上。
圖1 分布式視頻處理框架
很多大數據平臺如Hadoop在很大程度上已經實現了Big Video處理的基礎工作,但由于視頻數據的特殊性,從頭基于Hadoop開發(fā)大規(guī)模視頻處理系統(tǒng)仍需大量工作(如視頻解碼,數據切塊),在Hadoop上疊加Hadoop Video Layer仍然可以大幅度簡化視頻處理任務的開發(fā)。我們以Hadoop平臺為參照,解釋如何利用現有的Hadoop功能以及新增的Hadoop Video Layer開發(fā)實現Big Video處理框架。
視頻存儲:利用Hadoop的HDFS模塊存儲視頻,將視頻文件存儲為Sequence File存儲結構,稱為Video Sequence File。Sequence File中Key的設計應當能夠保證每個視頻塊可以索引到原始的視頻塊,以方便后續(xù)的回放追蹤等。每個value應可以獨立解碼。由于一個視頻文件可能非常大,轉儲到Sequence File需要預先做切割。切割工具可以使用ffmpeg或基于其開發(fā)。從原始視頻上傳到Hadoop的指定結構稱為Hadoop Video的上傳模塊,由Hadoop Video Layer提供。
視頻解碼:視頻解碼通過Map Reduce實現并行。Map的輸入為Sequence File,因此一條記錄就是一個完整的視頻塊。Map函數對視頻塊執(zhí)行解碼,生成一系列frame,并進一步調用由用戶實現的FrameProcessor接口的process方法,該方法的輸入是解碼好的frame,輸出是
結果匯總:結果匯總直接使用Reducer實現。由于Reducer的邏輯是按照Map函數的output key進行合并,用戶需要重載Reduce函數。
最后,從應用開發(fā)角度看,用戶程序僅需要重載FrameProcesser和Reducer類,其他全部由Hadoop Video完成。
本論文提出了一種面向一般性大規(guī)模視頻處理的分布式計算框架,探討了若干設計需求和設計要素,我們指出這種框架可以很大程度復用現有計算平臺如Hadoop和Spark。我們以Hadoop為例,給出了大規(guī)模視頻處理框架的實現方案。
1 12015-2020年中國智能視頻監(jiān)控行業(yè)分析及發(fā)展方向研究報告.http://www.chinairr.org/report/R05/R0506/201505/25-180683.html
10.3969/j.issn.1006-6403.2016.11.007
(2016-11-07)