本發(fā)明涉及分布式視頻存儲技術(shù),尤其涉及一種基于hadoop架構(gòu)的分布式視頻存儲管理方法及系統(tǒng)。
技術(shù)背景
隨著智慧城市概念的不斷發(fā)展,視頻監(jiān)控系統(tǒng)逐漸被普及。視頻監(jiān)控系統(tǒng)由于前端監(jiān)控設(shè)備的增加且高清化,將產(chǎn)生海量的視頻數(shù)據(jù)。動態(tài)變化的監(jiān)控設(shè)備連接管理以及海量視頻數(shù)據(jù)的存儲對監(jiān)控系統(tǒng)的管理、存儲性能都提出了嚴(yán)峻的考驗。如何存儲并管理這些視頻數(shù)據(jù),是我們急于解決的問題。
現(xiàn)有的視頻存儲管理方案主要是基于視頻服務(wù)器的,它由前端監(jiān)控設(shè)備、視頻服務(wù)器和視頻存儲設(shè)備三部分構(gòu)成。前端監(jiān)控設(shè)備負責(zé)獲取監(jiān)控的視頻數(shù)據(jù)(h.264格式),然后通過rtsp協(xié)議傳送到視頻服務(wù)器。視頻服務(wù)器收到攝像頭發(fā)來的視頻流數(shù)據(jù)后對視頻數(shù)據(jù)進行編碼和分割,生成視頻文件,然后存儲到存儲設(shè)備中?,F(xiàn)有的視頻存儲管理方案存在如下問題:
(1)負載過重。由于視頻數(shù)據(jù)在寫入和讀取的時候都需要經(jīng)過視頻服務(wù)器,如果有幾百路視頻數(shù)據(jù)同時寫入時,可能會有上百mb的帶寬需求,當(dāng)前端監(jiān)控設(shè)備的數(shù)量增加到一定程度時,視頻服務(wù)器難以承受幾百甚至上千路視頻數(shù)據(jù)的并發(fā)寫入,因此視頻服務(wù)器將成為整個存儲系統(tǒng)的單一故障點。
(2)連接分配不均衡?,F(xiàn)有的方案中,存儲系統(tǒng)與前端監(jiān)控設(shè)備建立連接任務(wù),大都由視頻服務(wù)器來完成,這樣導(dǎo)致了(1)總所述的問題。也有方案采用靜態(tài)節(jié)點分配的方法與前端監(jiān)控設(shè)備建立連接,這樣導(dǎo)致了連接任務(wù)分配不均衡,使部分點節(jié)點負載過重,另一部分節(jié)點負載過輕。
針對以上幾個問題,本發(fā)明引入分布式hadoop架構(gòu)及其設(shè)計理念,在傳統(tǒng)的hadoop的master-slave架構(gòu)上進行優(yōu)化,解決負載均衡的問題。同時考慮到控制管理和視頻數(shù)據(jù)流的存儲問題,給出了實時動態(tài)的節(jié)點管理方案。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是解決現(xiàn)有視頻存儲管理方案的問題與不足,提供了一種基于hadoop架構(gòu)的分布式視頻存儲管理方法及系統(tǒng),以解決前端監(jiān)控設(shè)備接入到視頻服務(wù)器或管理節(jié)點所引發(fā)的負載過重、連接分配不均衡的問題,從而實現(xiàn)視頻數(shù)據(jù)的高效存儲。
為了實現(xiàn)上述目的,本發(fā)明采用如下的技術(shù)方案:
1.一種分布式視頻存儲系統(tǒng),由前端監(jiān)控設(shè)備、云存儲系統(tǒng)(管理節(jié)點、存儲節(jié)點)構(gòu)成。前端監(jiān)控設(shè)備包含n個網(wǎng)絡(luò)攝像機,它能夠?qū)崟r采集視頻信號,并通過rtsp協(xié)議將采集的視頻流傳輸?shù)街付ǖ牧髅襟w服務(wù)器上。云存儲系統(tǒng)包含一個管理節(jié)點和m個存儲節(jié)點,管理節(jié)點負責(zé)管理整個集群,并為新接入集群的前端監(jiān)控設(shè)備分配存儲節(jié)點,同時負責(zé)處理監(jiān)控設(shè)備的斷線重連等問題。每個存儲節(jié)點上嵌入視頻流接收、編碼、分割軟件,它負責(zé)接收并存儲實時的視頻流,并監(jiān)控視頻流連接是否斷開。前端監(jiān)控設(shè)備與云存儲系統(tǒng)通過網(wǎng)絡(luò)單元連接。
2.一種分布式視頻存儲管理方法,管理節(jié)點時刻監(jiān)控整個集群的運行狀況,包括各個存儲節(jié)點的空閑磁盤空間大小、視頻連接任務(wù)的數(shù)量等。每當(dāng)有新的前端監(jiān)控設(shè)備要接入集群時,管理節(jié)點查看各個存儲節(jié)點的狀態(tài)信息,利用動態(tài)的負載均衡機制為監(jiān)控設(shè)備分配一個存儲節(jié)點,同時通知該存儲節(jié)點建立與該監(jiān)控設(shè)備的連接任務(wù)。存儲節(jié)點接收到管理節(jié)點發(fā)送的命令后,啟動與該監(jiān)控設(shè)備的連接任務(wù),將實時的視頻流切割并存儲到本地的文件系統(tǒng)中,最后利用ipc機制通知管理節(jié)點建立該視頻相應(yīng)的元信息和數(shù)據(jù)塊索引,讓管理節(jié)點來管理該視頻文件。具體包括如下步驟:
(1)配置前端監(jiān)控設(shè)備,將網(wǎng)絡(luò)攝像頭接入網(wǎng)絡(luò)。通知管理節(jié)點有新的前端監(jiān)控設(shè)備需要接入云存儲系統(tǒng);
(2)管理節(jié)點獲取前端監(jiān)控設(shè)備的配置信息
(3)利用動態(tài)負載均衡機制為視頻連接任務(wù)分配一個存儲節(jié)點,并通知該存儲節(jié)點啟動視頻連接任務(wù)
(4)存儲節(jié)點接收到消息后,根據(jù)配置信息啟動對應(yīng)的視頻連接任務(wù)
(5)存儲節(jié)點獲取視頻流,并生成視頻文件,通知管理節(jié)點來管理該視頻文件
本發(fā)明的效益是:利用動態(tài)的負載均衡機制,將獲取監(jiān)控視頻流的任務(wù)下發(fā)到各個存儲節(jié)點上執(zhí)行,有效避免了視頻服務(wù)器在并發(fā)獲取視頻流過程中出現(xiàn)的負載過重、連接分配不均衡的問題,提高了分布式存儲系統(tǒng)的可用性及性能,解決了大規(guī)模監(jiān)控系統(tǒng)中的分布式視頻存儲問題。另外,在存儲節(jié)點上獲取監(jiān)控視頻流的同時,可以直接對視頻流進行轉(zhuǎn)碼處理,使得視頻處理的方案更加靈活。最后將視頻文件按hdfs的塊大小進行切片,并生成對應(yīng)的校驗信息,直接通知管理節(jié)點來管理該視頻文件,省去了重復(fù)上傳到hdfs的過程。
附圖說明:
圖1:基于hadoop架構(gòu)的分布式視頻存儲系統(tǒng)
圖2:總體執(zhí)行框圖
圖3:動態(tài)負載均衡程序執(zhí)行框圖
圖4:存儲節(jié)點啟動視頻連接任務(wù)執(zhí)行框圖
圖5:存儲節(jié)點存儲視頻文件執(zhí)行框圖
具體實施方式:
下面結(jié)合附圖和具體實施方式對本發(fā)明做進一步說明。
1.一種分布式視頻存儲系統(tǒng)
如圖1,本系統(tǒng)主要由前端監(jiān)控設(shè)備、云存儲系統(tǒng)構(gòu)成。
前端監(jiān)控設(shè)備包括網(wǎng)絡(luò)攝像機1、網(wǎng)絡(luò)攝像機2……和網(wǎng)絡(luò)攝像機n,每個網(wǎng)絡(luò)攝像機配置后可以接入到網(wǎng)絡(luò)中,它能夠?qū)崟r采集視頻信號,并通過rtsp協(xié)議將采集的視頻流傳輸?shù)街付ǖ姆?wù)器上。前端監(jiān)控設(shè)備的數(shù)量通常比較龐大,因此要求存儲系統(tǒng)能夠承受大量的并發(fā)寫入需求,另外網(wǎng)絡(luò)攝像機往往會出現(xiàn)設(shè)備故障、連接斷線等故障,因此也需要系統(tǒng)能及時地處理此類問題。前端監(jiān)控設(shè)備與云存儲系統(tǒng)通過網(wǎng)絡(luò)單元連接。
云存儲系統(tǒng)包含一個管理節(jié)點和m個存儲節(jié)點。管理節(jié)點負責(zé)管理整個云存儲系統(tǒng),它實時監(jiān)控著各個存儲節(jié)點的磁盤利用率、視頻連接任務(wù)數(shù)等信息。同時它負責(zé)給各個存儲節(jié)點下發(fā)視頻連接任務(wù),當(dāng)有新的前端監(jiān)控設(shè)備要接入集群時,管理節(jié)點利用動態(tài)負載均衡機制為前端監(jiān)控設(shè)備分配一個存儲節(jié)點,通知該存儲節(jié)點建立與監(jiān)控設(shè)備的連接任務(wù)。存儲節(jié)點負責(zé)存儲視頻文件,同時它接收管理節(jié)點發(fā)送過來的命令,與前端監(jiān)控設(shè)備建立連接任務(wù),獲取實時視頻流并存儲在本地。存儲節(jié)點也監(jiān)控著視頻連接任務(wù)的狀態(tài),若前端監(jiān)控設(shè)備出現(xiàn)故障或者網(wǎng)絡(luò)擁塞導(dǎo)致連接任務(wù)斷開,存儲節(jié)點則嘗試重連設(shè)備,若失敗次數(shù)超過上限,則向管理節(jié)點匯報連接失敗故障。管理節(jié)點與存儲節(jié)點通過網(wǎng)絡(luò)單元連通。
2.一種分布式視頻存儲管理方法
本方法包括以下步驟:
如圖2,
(0)開始-200
開始條件:配置前端監(jiān)控設(shè)備,使其能夠接入到網(wǎng)絡(luò)中,并通知管理節(jié)點有新的前端監(jiān)控設(shè)備需要接入存儲系統(tǒng);
(1)管理節(jié)點獲取新前端監(jiān)控設(shè)備的配置信息-201
當(dāng)新的前端監(jiān)控設(shè)備需要接入存儲系統(tǒng)時,管理節(jié)點主動地獲取該設(shè)備的配置信息,這些配置信息包括網(wǎng)絡(luò)攝像機的ip地址、端口號、登錄名、密碼等。利用這些配置信息,服務(wù)器可以通過rtsp協(xié)議將視頻流獲取到本地文件系統(tǒng)中。
(2)利用動態(tài)負載均衡機制為視頻連接任務(wù)分配一個存儲節(jié)點,并通知該存儲節(jié)點啟動視頻連接任務(wù)-202
如圖3,子流程:
a.開始-300
開始條件:一個新的前端監(jiān)控設(shè)備ci(camera_i)需要接入存儲系統(tǒng),并且管理節(jié)點m(master)已經(jīng)獲取到監(jiān)控設(shè)備ci的配置文件di(device_i.ini);
b.管理節(jié)點m查詢所有存儲節(jié)點s1、s2……和sj(slave_j)的容量與負載狀況,并將查詢結(jié)果存放在datanodeinfo數(shù)組中-301
查詢結(jié)果主要包括:容量、已經(jīng)使用的容量、剩余容量、流接口服務(wù)線程數(shù)、數(shù)據(jù)節(jié)點在集群中的位置等信息。這些信息基本概括了各個存儲節(jié)點的負載情況。datanodeinfo的每一個元素包含一個存儲節(jié)點的容量與負載狀況信息;
c.對datanodeinfo數(shù)組的元素進行篩選,過濾掉不滿足視頻連接任務(wù)的存儲節(jié)點sm-302
遍歷datanodeinfo數(shù)組,查詢每個存儲節(jié)點的狀態(tài)信息。若存儲節(jié)點sm的剩余容量小于設(shè)定的容量下限值sc_min,或者流接口服務(wù)線程數(shù)(視頻連接任務(wù)數(shù))大于設(shè)定的連接上限值con_max,則刪除該元素datanodeinfo[sm_index];
d.判斷datanodeinfo數(shù)組是否為空-303。若datanodeinfo數(shù)組為空,則返回節(jié)點分配失敗錯誤-308,跳轉(zhuǎn)到步驟i。如果不為空,則進入步驟e
如果datanodeinfo數(shù)組為空,則所有的存儲節(jié)點均不滿足節(jié)點分配條件,即集群的剩余存儲空間過小或者集群的視頻連接負荷過高,管理員應(yīng)該根據(jù)此錯誤提醒進行故障檢查,增加集群的存儲空間、清理垃圾文件;
e.對datanodeinfo數(shù)組中的每一個元素計算出一個綜合評分score_1、score_2……和score_i-304
評分計算規(guī)則:score_i=剩余容量/(2*容量)+剩余連接數(shù)/(2*con_max)
其中剩余連接數(shù)=連接上限值con_max–流接口服務(wù)線程數(shù);
f.將datanodeinfo數(shù)組按綜合評分降序排序-305
g.從排序后的datanodeinfo數(shù)組中取出第一個元素,并返回其主機地址-306
排序后datanodeinfo數(shù)組的第一個元素即為綜合評分最高的存儲節(jié)點,該節(jié)點磁盤剩余空間較大、視頻連接任務(wù)數(shù)較少,更適合新前端監(jiān)控設(shè)備ci的連接任務(wù);
h.管理節(jié)點m根據(jù)步驟g返回的主機地址,將前端監(jiān)控設(shè)備ci的配置信息di發(fā)送到對應(yīng)的存儲節(jié)點sj上,并通知sj啟動視頻連接任務(wù)-307
i.程序結(jié)束-309
(3)存儲節(jié)點接收到消息后,根據(jù)配置信息啟動對應(yīng)的視頻連接任務(wù)-203
如圖4,子流程:
a.開始-400
開始條件:存儲節(jié)點sj接收到管理節(jié)點m發(fā)送的啟動消息、前端監(jiān)控設(shè)備ci的配置信息di;
b.存儲節(jié)點sj嘗試與前端監(jiān)控設(shè)備ci建立連接任務(wù)-401
存儲節(jié)點sj根據(jù)配置信息di指定的攝像頭ip地址、端口號、登錄名、密碼等信息,利用rtsp協(xié)議與該攝像頭建立連接任務(wù)。
c.判斷連接任務(wù)是否建立成功-402
a)若連接失敗,則將重連計數(shù)器retry_counter加1-404。若retry_counter的值大于重連上限max_retry,則返回連接失敗錯誤,進入步驟d,否則返回步驟b-405;
重連計數(shù)器用于統(tǒng)計第一次連接任務(wù)失敗后嘗試連接的次數(shù);
b)若連接成功,則進入步驟e;
d.通知管理節(jié)點該視頻連接任務(wù)建立失敗,并匯報連接失敗的詳細信息,進入步驟f-406
e.獲取視頻流并按時間段分割成視頻文件,存儲在本地文件系統(tǒng)中-403
f.程序結(jié)束-407
(4)存儲節(jié)點獲取視頻流,并生成視頻文件,通知管理節(jié)點來管理該視頻文件-204
如圖5,子流程:
a.開始-500
開始條件:存儲節(jié)點sj成功建立與前端監(jiān)控設(shè)備ci的連接任務(wù),并且有新的視頻文件生成;
b.利用ffmpeg等工具將h.264格式的視頻流轉(zhuǎn)換成mp4格式的視頻文件,將視頻文件按照時間段進行切割并保存到本地文件系統(tǒng)中-501
c.根據(jù)hdfs文件塊的大小(dfs.block.size定義,默認(rèn)為64mb),將視頻文件進行切塊-502
d.對每個視頻切塊生成一個校驗文件,并與視頻切塊的名稱相對應(yīng)-503
e.存儲節(jié)點sj通知管理節(jié)點m創(chuàng)建視頻文件對應(yīng)的元數(shù)據(jù)和數(shù)據(jù)塊索引,并讓管理節(jié)點m來管理該視頻文件-504
f.將視頻文件的hdfs路徑、視頻文件所述監(jiān)控設(shè)備號ci、視頻大小等關(guān)鍵信息錄入到hbase數(shù)據(jù)塊中,方便用戶索引-505
g.視頻文件上傳成功,返回步驟a,等待下一個視頻文件生成-506。