本申請涉及視頻監(jiān)控技術(shù)領(lǐng)域,尤其涉及一種錄像存儲方法及裝置。
背景技術(shù):
為了便于事后查證使用,對采集的視頻圖像進(jìn)行存儲是視頻監(jiān)控系統(tǒng)最基本的功能需求。在相關(guān)技術(shù)中,視頻編碼器產(chǎn)生的碼流通常為cbr(constantsbitrate,恒定碼流),因此可以將視頻存儲設(shè)備中的存儲空間按照設(shè)定大小分割為多個空間單元,每個空間單元存儲固定時間單元的錄像,以便于實(shí)現(xiàn)錄像回放的快速檢索。將錄像存儲到視頻存儲設(shè)備之后,還會涉及到對錄像的生命周期管理,即根據(jù)錄像的重要性進(jìn)行刪除或覆蓋,或者轉(zhuǎn)碼為更低的碼率轉(zhuǎn)存,亦或者抽幀轉(zhuǎn)存,然而,無論是降低碼率轉(zhuǎn)存還是抽幀轉(zhuǎn)存,都涉及到對原來存儲空間的讀取,并把抽幀或轉(zhuǎn)碼后的新碼流覆蓋到原來存儲空間,這樣對存儲空間的多次讀寫增加了生命周期管理的復(fù)雜性。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請?zhí)峁┮环N錄像存儲方法及裝置,以解決現(xiàn)有的存儲方式增加了生命周期管理的復(fù)雜性的問題。
根據(jù)本申請實(shí)施例的第一方面,提供一種錄像存儲方法,所述方法應(yīng)用于管理服務(wù)器,所述方法包括:
獲取視頻編碼器預(yù)先配置的碼流結(jié)構(gòu);
根據(jù)所述碼流結(jié)構(gòu)記錄的碼流層為每層劃分對應(yīng)的存儲空間;
將所述視頻編碼器發(fā)送的碼流中的各視頻幀按照其所屬層依次存儲到該層對應(yīng)的存儲空間中;
其中,每個存儲空間中存儲的視頻幀的優(yōu)先級和生命周期,與其所屬的層數(shù)成負(fù)相關(guān)關(guān)系。
根據(jù)本申請實(shí)施例的第二方面,提供一種錄像存儲裝置,所述裝置應(yīng)用于管理服務(wù)器,所述裝置包括:
獲取單元,用于獲取視頻編碼器預(yù)先配置的碼流結(jié)構(gòu);
劃分單元,用于根據(jù)所述碼流結(jié)構(gòu)記錄的碼流層為每層劃分對應(yīng)的存儲空間;
第一存儲單元,用于將所述視頻編碼器發(fā)送的碼流中的各視頻幀按照其所屬層依次存儲到該層對應(yīng)的存儲空間中;
其中,每個存儲空間中存儲的視頻幀的優(yōu)先級和生命周期,與其所屬的層數(shù)成負(fù)相關(guān)關(guān)系。
應(yīng)用本申請實(shí)施例,管理服務(wù)器在對某一視頻設(shè)備的錄像進(jìn)行存儲之前,可以先獲取其視頻編碼器中預(yù)先配置的碼流結(jié)構(gòu),并根據(jù)獲取的碼流結(jié)構(gòu)記錄的碼流層為每層劃分對應(yīng)的存儲空間,然后再將其視頻編碼器發(fā)送的碼流中的各視頻幀按照其所屬層依次存儲到該層對應(yīng)的存儲空間中,從而對視頻編碼器產(chǎn)生的碼流實(shí)現(xiàn)了分層存儲的目的,由于每個存儲空間中存儲的視頻幀的優(yōu)先級和生命周期,與其所屬的層數(shù)成負(fù)相關(guān)關(guān)系,因此每個存儲空間根據(jù)其對應(yīng)層的優(yōu)先級高低可以設(shè)置不同的生命周期進(jìn)行管理,在某一層的視頻幀的生命周期到期時,可以將該層對應(yīng)存儲空間中的視頻幀直接丟棄或者覆蓋掉,而不需要通過抽幀轉(zhuǎn)存或者降低碼率轉(zhuǎn)存的方式對存儲空間多次讀寫實(shí)現(xiàn)錄像生命周期管理,從而本申請通過分層存儲可以實(shí)現(xiàn)彈性生命周期管理,降低了錄像生命周期管理的復(fù)雜性。
附圖說明
圖1為本申請根據(jù)一示例性實(shí)施例示出的一種錄像存儲的場景圖;
圖2a為本申請根據(jù)一示例性實(shí)施例示出的一種錄像存儲方法的實(shí)施例流程圖;
圖2b為本申請根據(jù)圖2a所示實(shí)施例示出的一種碼流結(jié)構(gòu);
圖2c為本申請根據(jù)圖2a所示實(shí)施例示出的另一種碼流結(jié)構(gòu);
圖3a為本申請根據(jù)一示例性實(shí)施例示出的另一種錄像存儲方法的實(shí)施例流程圖;
圖3b為本申請根據(jù)圖2b所示的碼流結(jié)構(gòu)示出的一種邏輯組和邏輯單元的劃分圖;
圖3c為本申請根據(jù)圖3b所示的邏輯組和邏輯單元結(jié)構(gòu)示出的一種存儲空間的塊空間劃分圖;
圖3d為本申請根據(jù)圖2c所示的碼流結(jié)構(gòu)示出的一種邏輯組和邏輯單元的劃分圖;
圖3e為本申請根據(jù)圖3d所示的邏輯組和邏輯單元結(jié)構(gòu)示出的一種存儲空間的塊空間劃分圖;
圖4為本申請根據(jù)一示例性實(shí)施例示出的一種管理服務(wù)器的硬件結(jié)構(gòu)圖;
圖5為本申請根據(jù)一示例性實(shí)施例示出的一種錄像存儲裝置的實(shí)施例結(jié)構(gòu)圖。
具體實(shí)施方式
這里將詳細(xì)地對示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。
圖1為本申請根據(jù)一示例性實(shí)施例示出的一種錄像存儲的場景圖,圖1中包括視頻設(shè)備、管理服務(wù)器以及視頻存儲設(shè)備,其中,視頻設(shè)備可以是ipc(internetprotocolcamera,網(wǎng)絡(luò)攝像機(jī)),其設(shè)置有視頻獲取器和視頻編碼器,視頻獲取器用于采集監(jiān)控視頻,視頻編碼器用于對視頻獲取器采集的監(jiān)控視頻進(jìn)行編碼并生成碼流,然后再將生成的碼流發(fā)送至管理服務(wù)器;管理服務(wù)器用于將接收到的碼流的存儲到視頻存儲設(shè)備;視頻存儲設(shè)備可以是nvr(networkvideorecorder,網(wǎng)絡(luò)視頻存儲器)或者ipsan設(shè)備,用于為監(jiān)控視頻的碼流數(shù)據(jù)提供存儲空間。
圖2a為本申請根據(jù)一示例性實(shí)施例示出的一種錄像存儲方法的實(shí)施例流程圖;圖2b為本申請根據(jù)圖2a所示實(shí)施例示出的一種碼流結(jié)構(gòu);圖2c為本申請根據(jù)圖2a所示實(shí)施例示出的另一種碼流結(jié)構(gòu),該錄像存儲方法可以應(yīng)用于上述圖1所示的管理服務(wù)器上,如圖2a所示,該錄像存儲方法包括如下步驟:
步驟201:獲取視頻編碼器預(yù)先配置的碼流結(jié)構(gòu)。
在一實(shí)施例中,管理服務(wù)器可以對視頻編碼器的編碼規(guī)則預(yù)先進(jìn)行配置,以得到相應(yīng)的碼流結(jié)構(gòu),從而可以從視頻設(shè)備中的視頻編碼器中獲取到相應(yīng)的碼流結(jié)構(gòu)。
步驟202:根據(jù)該碼流結(jié)構(gòu)記錄的碼流層為每層劃分對應(yīng)的存儲空間。
在一實(shí)施例中,碼流結(jié)構(gòu)中可以記錄碼流層,即視頻編碼器產(chǎn)生的碼流包括的碼流層數(shù),通常,碼流層中的第0層為基礎(chǔ)層,第1層以上的碼流層均為增強(qiáng)層,在進(jìn)行解碼時,增強(qiáng)層的視頻幀均需要根據(jù)基礎(chǔ)層的視頻幀才能實(shí)現(xiàn)最終的解碼,因此,基礎(chǔ)層中的視頻幀比增強(qiáng)層中的視頻幀的重要性高,優(yōu)先級也高,且增強(qiáng)層中的視頻幀隨著層數(shù)的升高,其重要性降低,優(yōu)先級也降低。本領(lǐng)域技術(shù)人員可以理解的是,劃分的多個存儲空間可以位于視頻存儲設(shè)備的一個硬盤上,也可以位于視頻存儲設(shè)備的多個硬盤上,并且,每個存儲空間的大小可以根據(jù)實(shí)際需求進(jìn)行設(shè)置,可以相同也可以不相同,本申請?jiān)诖瞬贿M(jìn)行限制。此外,碼流結(jié)構(gòu)中還可以記錄各視頻幀之間的參考關(guān)系。
需要說明的是,在碼流結(jié)構(gòu)中通常會涉及到gop的概念,gop(groupofpicture,視頻組長度)指的是一組連續(xù)的視頻幀,即一個i幀后面連續(xù)跟多個p幀,一個gop的開始幀為i幀,結(jié)束幀為下一個gop的開始幀(i幀)的前一幀(p幀),其中,i幀記錄的是一個完整的畫面,p幀是一個前向預(yù)測幀,記錄的是相對于前一幀(i幀或者p幀)的變化。通常i幀的長度最長,屬于不同層的p幀的長度不同,但屬于同一增強(qiáng)層的p幀的長度一般均相同。此外,一個gop中可以包括多個根參考幀(i幀或p幀),每兩個根參考幀之間包括的幀數(shù)相同,一個gop的開始幀即為第一個根參考幀,前一根參考幀為后一根參考幀的參考幀,且根參考幀均屬于碼流層的第0層。
在一示例性的場景中,如圖2b所示,其碼流層為0層和1層,其中,第0層包括幀0、幀2、幀4、幀6、幀8,第1層包括幀1、幀3、幀5、幀7,且第0層中的幀0和幀8為根參考幀,幀8以幀0為參考幀。此外,兩個根參考幀之間包括的3個同屬于0層的視頻幀(幀2、幀4、幀6)均以同屬于0層的前一幀為參考幀,第1層中的視頻幀均以其前一幀為參考幀。從而,管理服務(wù)器可以劃分出兩個存儲空間(存儲空間1和存儲空間2),層0對應(yīng)存儲空間1,層1對應(yīng)存儲空間2。
在另一示例性的場景中,如圖2c所示,其碼流層為0層、1層、2層,第0層包括幀0、幀4、幀8、幀12、幀16,第1層包括幀2、幀6、幀10、幀14,第2層包括幀1、幀3、幀5、幀7、幀9、幀11、幀13、幀15,且第0層中的幀0和幀16為根參考幀,幀16以幀0為參考幀。此外,兩個根參考幀之間包括的3個同屬于0層的視頻幀(幀4、幀8、幀12)均以同屬于0層的前一幀為參考幀,第1層和第2層中的視頻幀均以其前一幀為參考幀。從而,管理服務(wù)器可以劃分出三個存儲空間(存儲空間1至存儲空間3),層0對應(yīng)存儲空間1、層1對應(yīng)存儲空間2、層2對應(yīng)存儲空間3。
步驟203:將視頻編碼器發(fā)送的碼流中的各視頻幀按照其所屬層依次存儲到該層對應(yīng)的存儲空間中;其中,每個存儲空間中存儲的視頻幀對應(yīng)的優(yōu)先級和生命周期,與其所屬的層數(shù)成負(fù)相關(guān)關(guān)系。
在一實(shí)施例中,由于每個存儲空間中存儲的視頻幀對應(yīng)的優(yōu)先級和生命周期,與其所屬的層數(shù)成負(fù)相關(guān)關(guān)系,即層數(shù)越低,對應(yīng)的存儲空間存儲的視頻幀的優(yōu)先級越低,重要性越低,生命周期越短,因此將屬于不同層的視頻幀存儲到不同的存儲空間可以實(shí)現(xiàn)錄像的彈性生命周期管理。
在一示例性的場景中,再如圖2b所示,第0層包括的幀0、幀2、幀4、幀6、幀8可以依次存儲到存儲空間1,第1層包括的幀1、幀3、幀5、幀7可以依次存儲到存儲空間2。其中,由于第0層的視頻幀的優(yōu)先級比第1層的視頻幀的優(yōu)先級高,因此存儲空間1中存儲的視頻幀對應(yīng)的生命周期可以短些,例如,3個月,存儲空間2中存儲的視頻幀對應(yīng)的生命周期可以長些,例如,6個月,在3個月后,可以將存儲空間1中的視頻幀直接丟棄或者直接覆蓋,在6個月后,再將存儲空間2中的視頻幀直接丟棄或者直接覆蓋。
由上述實(shí)施例可知,管理服務(wù)器在對某一視頻設(shè)備的錄像進(jìn)行存儲之前,可以先獲取其視頻編碼器中預(yù)先配置的碼流結(jié)構(gòu),并根據(jù)獲取的碼流結(jié)構(gòu)記錄的碼流層為每層劃分對應(yīng)的存儲空間,然后再將其視頻編碼器發(fā)送的碼流中的各視頻幀按照其所屬層依次存儲到該層對應(yīng)的存儲空間中,從而對視頻編碼器產(chǎn)生的碼流實(shí)現(xiàn)了分層存儲的目的,由于每個存儲空間中存儲的視頻幀的優(yōu)先級和生命周期,與其所屬的層數(shù)成負(fù)相關(guān)關(guān)系,因此每個存儲空間根據(jù)其對應(yīng)層的優(yōu)先級高低可以設(shè)置不同的生命周期進(jìn)行管理,在某一層的視頻幀的生命周期到期時,可以將該層對應(yīng)存儲空間中的視頻幀直接丟棄或者覆蓋掉,而不需要通過抽幀轉(zhuǎn)存或者降低碼率轉(zhuǎn)存的方式對存儲空間多次讀寫實(shí)現(xiàn)錄像生命周期管理,從而本申請通過分層存儲可以實(shí)現(xiàn)彈性生命周期管理,降低了錄像生命周期管理的復(fù)雜性。
圖3a為本申請根據(jù)一示例性實(shí)施例示出的另一種錄像存儲方法的實(shí)施例流程圖;圖3b為本申請根據(jù)圖2b所示的碼流結(jié)構(gòu)示出的一種邏輯組和邏輯單元的劃分圖;圖3c為本申請根據(jù)圖3b所示的邏輯組和邏輯單元結(jié)構(gòu)示出的一種存儲空間的塊空間劃分圖;圖3d為本申請根據(jù)圖2c所示的碼流結(jié)構(gòu)示出的一種邏輯組和邏輯單元的劃分圖;圖3e為本申請根據(jù)圖3d所示的邏輯組和邏輯單元結(jié)構(gòu)示出的一種存儲空間的塊空間劃分圖,本實(shí)施例利用本申請實(shí)施例提供的上述方法,以如何將視頻編碼器發(fā)送的碼流中的各視頻幀按照其所屬層依次存儲到該層對應(yīng)的存儲空間中為例進(jìn)行示例性說明,如圖3a所示,該錄像存儲方法包括如下步驟:
步驟301:獲取視頻編碼器預(yù)先配置的邏輯單元結(jié)構(gòu)。
在一實(shí)施例中,管理服務(wù)器可以在視頻編碼器中根據(jù)配置的碼流結(jié)構(gòu)進(jìn)行邏輯劃分,即預(yù)先配置邏輯單元結(jié)構(gòu),該邏輯單元結(jié)構(gòu)可以記錄邏輯單元包括的碼流層、每層包括的幀數(shù)。
步驟302:根據(jù)該邏輯單元結(jié)構(gòu)對碼流進(jìn)行邏輯單元劃分,各邏輯單元對應(yīng)的時間單元相同。
針對根據(jù)該邏輯單元結(jié)構(gòu),對碼流進(jìn)行邏輯單元劃分的過程,管理服務(wù)器可以先根據(jù)碼流結(jié)構(gòu)記錄的兩個根參考幀之間包括的幀數(shù)對碼流劃分邏輯組,其中,每個邏輯組為從第0層的某一個根參考幀開始,到第0層的下一個根參考幀的前一幀結(jié)束,然后再針對每個邏輯組,根據(jù)邏輯單元結(jié)構(gòu)對該邏輯組包括的視頻幀劃分邏輯單元,其中,該邏輯組包括的幀數(shù)是各邏輯單元包括的幀數(shù)的整數(shù)倍,且前一邏輯單元中的第一幀均為后一邏輯單元中的第一幀的參考幀。
其中,由于每個邏輯組為從第0層的某一個根參考幀開始,到第0層的下一個根參考幀的前一幀結(jié)束,因此每個邏輯組中包括一個根參考幀(i幀或者p幀),該根參考幀為該邏輯組的引導(dǎo)幀,邏輯組中的其它視頻幀(p幀)最終均需要根據(jù)該根參考幀才可解碼。由于邏輯單元結(jié)構(gòu)為邏輯單元包括的碼流層和每層包括的幀數(shù),從而針對每個邏輯組,可以從該邏輯組的引導(dǎo)幀開始按照邏輯單元結(jié)構(gòu)劃分邏輯單元,且各邏輯單元對應(yīng)的時間單元均相同。
需要說明的是,一個邏輯組只包括一個根參考幀,且該根參考幀為邏輯組的引導(dǎo)幀,而一個gop可以包括多個根參考幀,因此邏輯組與gop沒有必然關(guān)聯(lián)性,通常一個gop中可以包括多個邏輯組。
步驟303:從各邏輯單元包括的碼流層和每層包括的幀碼流長度中獲取每層包括的最大幀碼流長度,并在每層對應(yīng)的存儲空間中,按照該層包括的最大幀碼流長度為各邏輯單元劃分塊空間。
在一實(shí)施例中,為了便于錄像檢索時檢索位置的計(jì)算,管理服務(wù)器可以在存儲空間中為每個邏輯單元劃分對應(yīng)的塊空間,由于有的邏輯單元中包括有i幀,有的邏輯單元不包括i幀,且屬于不同層的p幀的長度也不同,因此劃分的每個邏輯單元包括的幀碼流長度不可能均相同,因此需要從劃分出的各邏輯單元包括的碼流層和每層包括的幀碼流長度中,獲取每層包括的最大幀碼流長度,并將該最大幀碼流長度作為相應(yīng)存儲空間中每個塊空間的大小,從而可以保證各邏輯單元包括的各層的視頻幀能夠完全存儲到相應(yīng)存儲空間的塊空間中。
需要說明的是,由于通過一個gop的視頻幀的編碼即可得到碼流結(jié)構(gòu),因此管理服務(wù)器從各邏輯單元包括的碼流層和每層包括的幀碼流長度中獲取每層包括的最大幀碼流長度時,可以從屬于一個gop的各邏輯單元包括的碼流層和每層包括的幀碼流長度中,獲取每層包括的最大幀碼流長度,或者也可以從一個gop包括的各邏輯組的第一個邏輯單元包括的碼流層和每層包括的幀碼流長度中,獲取每層包括的最大幀碼流長度,而不是從劃分得到的所有邏輯單元中獲取,以提高獲取效率。
在一示例性場景中,再如上述圖2b所示的一種碼流,幀0與幀8均為根參考幀,幀0的幀碼流長度為m0字節(jié),幀2、幀4、幀6的幀碼流長度均為m1字節(jié),幀1、幀3、幀5、幀7的幀碼流長度均為m2字節(jié),邏輯單元結(jié)構(gòu)為0層和1層,第0層包括1個幀,第1層包括1個幀,從而,可以得到如圖3b所示的邏輯組和邏輯單元劃分,邏輯組(幀0至幀7)中包括4個邏輯單元(邏輯單元0、邏輯單元1、邏輯單元2以及邏輯單元3),邏輯單元0包括幀0和幀1、邏輯單元1包括幀2和幀3、邏輯單元2包括幀4和幀5、邏輯單元3包括幀6和幀7。由于i幀的長度最長,因此,該碼流結(jié)構(gòu)中邏輯單元0包括的第0層的幀0的幀碼流長度m0字節(jié)最大,又由于第1層的p幀的長度均為m2字節(jié),因此每個邏輯單元包括的第1層的最大幀碼流長度為m2字節(jié),進(jìn)而得到如圖3c所示的存儲空間的塊空間劃分,每個邏輯單元對應(yīng)的時間單元為t秒。
在另一示例性場景中,再如上述圖2c所示的另一種碼流,幀0和幀16均為根參考幀,幀0的幀碼流長度為m3字節(jié),幀4、幀8、幀12的幀碼流長度均為m4字節(jié),幀2、幀6、幀10、幀14的幀碼流長度均為m5字節(jié),幀1、幀3、幀5、幀7、幀9、幀11、幀13、幀15的幀碼流長度均為m6字節(jié),邏輯單元結(jié)構(gòu)為0層、1層和2層,第0層包括1個幀,第1層包括1個幀,第2層包括2個幀,從而,可以得到如圖3d所示的邏輯組和邏輯單元劃分,邏輯組(幀0至幀15)中包括4個邏輯單元(邏輯單元0、邏輯單元1、邏輯單元2以及邏輯單元3),邏輯單元0包括幀0至幀3、邏輯單元1包括幀4至幀7、邏輯單元2包括幀8至幀11、邏輯單元3包括幀12至幀15。由于i幀的長度最長,因此該碼流結(jié)構(gòu)中邏輯單元0包括的第0層的幀0的幀碼流長度m3字節(jié)最大,又由于第1層的p幀的長度均為m3字節(jié),因此每個邏輯單元包括的第1層的最大幀碼流長度為m5字節(jié),又由于第2層的p幀的長度均為m6字節(jié),因此每個邏輯單元包括的第2層的最大幀碼流長度為2*m6,進(jìn)而得到如圖3e所示的存儲空間的塊空間劃分,每個邏輯單元對應(yīng)的時間單元為t秒。
步驟304:將各邏輯單元包括的視頻幀,按照其所屬層存儲到相應(yīng)存儲空間的對應(yīng)塊空間中。
需要說明的是,為了在錄像回放時,快速的檢索到錄像的存放位置并進(jìn)行讀取回放,管理服務(wù)器可以將步驟303獲取的每層包括的最大幀碼流長度確定為邏輯單元在相應(yīng)存儲空間中占用的空間大小,并將確定的邏輯單元在每個存儲空間中占用的空間大小、每個存儲空間的起始位置和碼流的起始時間記錄到索引列表中,當(dāng)接收到檢索指令時,根據(jù)索引列表中記錄的每個存儲空間的起始位置和邏輯單元在每個存儲空間中占用的空間大小、檢索指令攜帶的檢索錄像的起止時間獲得檢索錄像在每個存儲空間中的起止位置,并根據(jù)獲得的每個存儲空間中的起止位置并行讀取各存儲空間中的視頻幀,最后將讀取的視頻幀按照幀序號寫入解碼緩存列表,并將解碼緩存列表發(fā)送至解碼器,以使解碼器進(jìn)行解碼并回放。由于每個存儲空間在物理上是分離的,因此在獲得每個存儲空間中的起止位置后,可以并行的讀取每個存儲空間中的視頻幀,而現(xiàn)有技術(shù)中只能在一個存儲空間中讀取,進(jìn)而可以降低錄像檢索和回放的時延。
進(jìn)一步地,管理服務(wù)器根據(jù)檢索指令攜帶的檢索錄像的起止時間還可以計(jì)算出該起止時間段內(nèi)包括的邏輯單元數(shù),另外,還可以計(jì)算出某一邏輯單元在每個存儲空間中的位置,從而可以實(shí)現(xiàn)屬于同一個邏輯單元的存儲于不同存儲空間且在時間上緊相鄰的屬于不同層的視頻幀的快速檢索和回放。
在一示例性場景中,如圖3c所示,假設(shè)索引列表中記錄的存儲空間1的起始位置為k1,存儲空間2的起始位置為k2,碼流的起始時間為t,邏輯單元在存儲空間1中占用的空間大小為m0字節(jié),在存儲空間2中占用的空間大小為m2字節(jié),且邏輯單元對應(yīng)的時間單元為t秒,如果接收到的檢索指令攜帶的檢索錄像的起止時間為t-start和t-end,則檢索錄像在存儲空間1中的起止位置分別為k1+(t-start-t)/t*m0和k1+(t-end-t)/t*m0,在存儲空間2中的起止位置分別為k2+(t-start-t)/t*m2和k2+(t-end-t)/t*m2,從而可以讀取存儲空間1中起止位置為k1+(t-start-t)/t*m0和k1+(t-end-t)/t*m0中的視頻幀和存儲空間2中起止位置為k2+(t-start-t)/t*m2和k2+(t-end-t)/t*m2中的視頻幀,并將讀取的視頻幀按照幀序號寫入解碼緩存列表并發(fā)送至解碼器,以使解碼器進(jìn)行解碼并回放。
此外,管理服務(wù)器還可以計(jì)算出該起止時間段內(nèi)包括的邏輯單元數(shù)為m=(t-end-t-start)/t。第n(n<=m)個邏輯單元在存儲空間1中的位置為k1+(t-start-t)/t*m0*n,在存儲空間2中的位置為k2+(t-start-t)/t*m2*n。
需要進(jìn)一步說明的是,管理服務(wù)器可以在每個存儲空間中的各塊空間頭部設(shè)置一個預(yù)設(shè)大小的單元,在將各邏輯單元包括的視頻幀,按照其所屬層存儲到相應(yīng)存儲空間中的同時,將其實(shí)際幀碼流長度存儲到該塊空間頭部的預(yù)設(shè)大小的單元中。從而,對于針對每個存儲空間,讀取該存儲空間的起止位置段中的視頻幀的過程,管理服務(wù)器可以針對每個存儲空間,根據(jù)該存儲空間的起止位置段中的各塊空間頭部存儲的實(shí)際幀碼流長度讀取各塊空間中的視頻幀,以提高讀取效率。
由上述實(shí)施例可知,管理服務(wù)器在對視頻編碼器發(fā)送的碼流按照層存儲時,可以先獲取視頻編碼器預(yù)先配置的邏輯單元結(jié)構(gòu),并根據(jù)邏輯單元結(jié)構(gòu)對碼流進(jìn)行邏輯單元劃分,且各邏輯單元對應(yīng)的時間單元相同,然后從各邏輯單元包括的碼流層和每層包括的幀碼流長度中獲取每層包括的最大幀碼流長度,并在每層對應(yīng)的存儲空間中,按照該層包括的最大幀碼流長度為各邏輯單元劃分塊空間,最后將各邏輯單元包括的視頻幀,按照其所屬層存儲到相應(yīng)存儲空間的對應(yīng)塊空間中,從而通過邏輯單元可以實(shí)現(xiàn)分離式存儲。此外,由于每個邏輯單元在各個存儲空間中均對應(yīng)一個塊空間,且每個邏輯單元對應(yīng)的時間單元相同,因此可以方便錄像檢索時檢索位置的快速計(jì)算。
與前述錄像存儲方法的實(shí)施例相對應(yīng),本申請還提供了錄像存儲裝置的實(shí)施例。
本申請錄像存儲裝置的實(shí)施例可以應(yīng)用在管理服務(wù)器上。裝置實(shí)施例可以通過軟件實(shí)現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設(shè)備的處理器將非易失性存儲器中對應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖4所示,為本申請根據(jù)一示例性實(shí)施例示出的一種管理服務(wù)器的硬件結(jié)構(gòu)圖,除了圖4所示的處理器、內(nèi)存、網(wǎng)絡(luò)接口、以及非易失性存儲器之外,實(shí)施例中裝置所在的設(shè)備通常根據(jù)該設(shè)備的實(shí)際功能,還可以包括其他硬件,對此不再贅述。
圖5為本申請根據(jù)一示例性實(shí)施例示出的一種錄像存儲裝置的實(shí)施例結(jié)構(gòu)圖,該錄像存儲裝置可以應(yīng)用于管理服務(wù)器上,如圖5所示,該錄像存儲裝置包括:獲取單元51、劃分單元52、第一存儲單元53。
其中,獲取單元51,用于獲取視頻編碼器預(yù)先配置的碼流結(jié)構(gòu);
劃分單元52,用于根據(jù)所述碼流結(jié)構(gòu)記錄的碼流層為每層劃分對應(yīng)的存儲空間;
第一存儲單元53,用于將所述視頻編碼器發(fā)送的碼流中的各視頻幀按照其所屬層依次存儲到該層對應(yīng)的存儲空間中;
其中,每個存儲空間中存儲的視頻幀的優(yōu)先級和生命周期,與其所屬的層數(shù)成負(fù)相關(guān)關(guān)系。
在一可選的實(shí)現(xiàn)方式中,所述第一存儲單元53,具體用于獲取所述視頻編碼器預(yù)先配置的邏輯單元結(jié)構(gòu);根據(jù)所述邏輯單元結(jié)構(gòu)對所述碼流進(jìn)行邏輯單元劃分;其中,各邏輯單元對應(yīng)的時間單元相同;從各邏輯單元包括的碼流層和每層包括的幀碼流長度中獲取每層包括的最大幀碼流長度;在每層對應(yīng)的存儲空間中,按照該層包括的最大幀碼流長度為各邏輯單元劃分塊空間;將各邏輯單元包括的視頻幀,按照其所屬層存儲到相應(yīng)存儲空間的對應(yīng)塊空間中。
在一可選的實(shí)現(xiàn)方式中,所述第一存儲單元53,還具體用于在根據(jù)所述邏輯單元結(jié)構(gòu)對所述碼流進(jìn)行邏輯單元劃分過程中,根據(jù)所述碼流結(jié)構(gòu)記錄的兩個根參考幀之間包括的幀數(shù)對所述碼流劃分邏輯組;其中,每個邏輯組為從第0層的某一根參考幀開始,到第0層的下一個根參考幀的前一幀結(jié)束;針對每個邏輯組,根據(jù)所述邏輯單元結(jié)構(gòu)對該邏輯組包括的視頻幀劃分邏輯單元;其中,該邏輯組包括的幀數(shù)是各邏輯單元包括的幀數(shù)的整數(shù)倍,且前一邏輯單元中的第一幀均為后一邏輯單元中的第一幀的參考幀。
在一可選的實(shí)現(xiàn)方式中,所述裝置還包括(圖5中未示出):
記錄單元,用于將獲取的每層包括的最大幀碼流長度確定為邏輯單元在相應(yīng)存儲空間中占用的空間大小;將確定的邏輯單元在每個存儲空間中占用的空間大小、每個存儲空間的起始位置和所述碼流的起始時間記錄到索引列表中;
檢索回放單元,用于當(dāng)接收到檢索指令時,根據(jù)所述索引列表中記錄的每個存儲空間的起始位置和邏輯單元在每個存儲空間中占用的空間大小、所述檢索指令攜帶的檢索錄像的起止時間、邏輯單元對應(yīng)的時間單元獲得檢索錄像在每個存儲空間中的起止位置;根據(jù)獲得的每個存儲空間中的起止位置并行讀取各存儲空間中的視頻幀;將讀取的視頻幀按照幀序號寫入解碼緩存列表,并將所述解碼緩存列表發(fā)送至解碼器,以使所述解碼器進(jìn)行解碼并回放。
在一可選的實(shí)現(xiàn)方式中,在每個存儲空間中的各塊空間頭部均設(shè)置有一個預(yù)設(shè)大小的單元,所述裝置還包括(圖5中未示出):
第二存儲單元,用于在將各邏輯單元包括的視頻幀按照其所屬層存儲到相應(yīng)存儲空間的對應(yīng)塊空間中的同時,將其實(shí)際幀碼流長度存儲到該塊空間頭部的預(yù)設(shè)大小的單元中;
所述檢索回放單元,具體用于在針對每個存儲空間,讀取該存儲空間的起止位置段中的視頻幀過程中,針對每個存儲空間,根據(jù)該存儲空間的起止位置段中的各塊空間頭部存儲的實(shí)際幀碼流長度讀取各塊空間中的視頻幀。
上述裝置中各個單元的功能和作用的實(shí)現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實(shí)現(xiàn)過程,在此不再贅述。
對于裝置實(shí)施例而言,由于其基本對應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本申請方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實(shí)施。
以上所述僅為本申請的較佳實(shí)施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請保護(hù)的范圍之內(nèi)。