本發(fā)明屬于視頻監(jiān)控領(lǐng)域,特別涉及一種視頻文件逆序播放方法和系統(tǒng)。
背景技術(shù):
在視頻監(jiān)控領(lǐng)域中,視頻文件逆序播放能夠幫助用戶更方便的查找定位到感興趣的視頻內(nèi)容。在嵌入式數(shù)字硬盤(pán)錄像機(jī)(DVR)中錄像文件逆序播放(Play Reverse)是錄像回放環(huán)節(jié)中一個(gè)重要功能。逆序播放期間,用戶可選擇暫停、快放、慢放等操作。實(shí)現(xiàn)視頻文件逆序播放的技術(shù)難點(diǎn)是,碼流中視頻幀之間存在固定的解碼參考關(guān)系。
現(xiàn)有的技術(shù)中,視頻文件逆序播放的方法為:首先,解碼器將一個(gè)視頻序列組中的所有幀順序解碼。一個(gè)視頻序列組,即GOP,全稱為Group Of Picture,是能完成解碼所需幀數(shù)最少的視頻幀的合集,通常包括I幀以及參考所述I幀進(jìn)行解碼的多個(gè)視頻幀,視頻幀的幀數(shù)通常25~50幀,(在H264協(xié)議里定義了三種幀,完整編碼的幀叫I幀,參考之前的I幀生成的只包含差異部分編碼的幀叫P幀,參考前后的幀編碼的幀叫B幀)。其次,完成一個(gè)視頻序列組解碼后,將解碼后數(shù)據(jù)保存到存儲(chǔ)器中,存儲(chǔ)器需要保存25~50幀解碼后的數(shù)據(jù)。最后,從存儲(chǔ)器中最后一幀依次向前取數(shù)據(jù)送播放器播放,完成一個(gè)視頻序列組逆序解碼。解碼器完成一個(gè)視頻序列組的解碼,再解碼前一個(gè)視頻序列組;同時(shí)播放器從存儲(chǔ)器中取解碼后的數(shù)據(jù)同步播放。這樣,播放器播放顯示畫(huà)面順序和視頻幀實(shí)際的順序相反,實(shí)現(xiàn)了視頻逆序播放。
這種視頻逆序播放機(jī)制,需要將一個(gè)視頻序列組所有幀順序解碼,并將解碼后的數(shù)據(jù)保存到存儲(chǔ)器,再由播放器逆序播放。存儲(chǔ)器需要保存一個(gè)視頻序列組所有解碼后的數(shù)據(jù)。一個(gè)視頻序列組通常包含視頻幀數(shù)為25~50幀,使用這種機(jī)制逆序播放高清視頻,需要占用存儲(chǔ)器很多的存儲(chǔ)空間。
另外,有基于上述逆序播放機(jī)制的改進(jìn)方法,優(yōu)化了占用較大存儲(chǔ)空間的問(wèn)題。其實(shí)現(xiàn)的基本思想,對(duì)一個(gè)視頻序列組多次解碼,每次解碼只保留序列的后面2幀解碼后數(shù)據(jù)到存儲(chǔ)器,丟棄前面數(shù)據(jù)幀;播放器從存儲(chǔ)器中逆序取數(shù)據(jù)播放實(shí)現(xiàn)2幀數(shù)據(jù)的逆序播放;播放器播放的同時(shí),解碼器將視頻序列組解碼一次,取已完成播放視頻幀的前面2幀保存到存儲(chǔ)器,加入逆序播放隊(duì)列;這樣多次解碼視頻序列組,直到序列的起始三幀視頻送到存儲(chǔ)器加入逆序播放隊(duì)列。
這種優(yōu)化方法,能將存儲(chǔ)器容量需求降低到6幀解碼后的數(shù)據(jù)存儲(chǔ)要求,付出的代價(jià)是解碼器性能消耗指數(shù)倍數(shù)的增加。假設(shè)一個(gè)視頻序列組總幀數(shù)為25幀,這種逆序播放方法需要解碼的總幀數(shù)為168幀(25+23+21+…+3),解碼器性能消耗增加很多。因此,這種優(yōu)化方法一定程度上減小存儲(chǔ)容量的消耗,但同時(shí)帶來(lái)了解碼器壓力增加的弊端。
因此,在視頻監(jiān)控領(lǐng)域中,亟需一種節(jié)約存儲(chǔ)器的存儲(chǔ)空間、減少解碼器的性能消耗的視頻文件逆序播放方法和系統(tǒng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種視頻文件逆序播放方法和系統(tǒng),通過(guò)將視頻序列組中的視頻幀逐一進(jìn)行解碼后再進(jìn)行編碼,得到所有視頻幀的格式均為I幀的視頻序列組,并將其存儲(chǔ)于存儲(chǔ)器,然后由解碼器從存儲(chǔ)器中逆序取出 I幀,對(duì)I幀進(jìn)行解碼后得到原始流,并將所述原始流發(fā)送至播放器,由播放器對(duì)原始流進(jìn)行播放,從而實(shí)現(xiàn)視頻文件的逆序播放,本發(fā)明在實(shí)現(xiàn)視頻文件逆序播放的同時(shí),節(jié)約存儲(chǔ)器的存儲(chǔ)空間、減少解碼器的性能消耗、擴(kuò)展播放器的功能。
為實(shí)現(xiàn)上述目的,本發(fā)明的一個(gè)方面提供了一種視頻文件逆序播放方法,包括步驟S1,根據(jù)預(yù)定選取規(guī)則,從等待逆序播放的視頻文件中逆序選取一個(gè)視頻序列組;
步驟S2,順序?qū)x定的視頻序列組中的每個(gè)視頻幀進(jìn)行轉(zhuǎn)碼;
步驟S3,存儲(chǔ)完成轉(zhuǎn)碼的視頻幀;
步驟S4,逆序?qū)⒁曨l幀解碼為原始流;
步驟S5,播放原始流。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種視頻文件逆序播放系統(tǒng),包括:選取模塊,用于根據(jù)預(yù)定選取規(guī)則,從等待逆序播放的視頻文件中逆序選取一個(gè)視頻序列組;
轉(zhuǎn)碼模塊,用于順序?qū)x定的視頻序列組中的每個(gè)視頻幀進(jìn)行轉(zhuǎn)碼;
存儲(chǔ)模塊,用于存儲(chǔ)完成轉(zhuǎn)碼的視頻幀;
解碼模塊,用于逆序?qū)⒁曨l幀解碼為原始流;
播放模塊,用于播放原始流。
如上所述,本發(fā)明通過(guò)將視頻序列組中的視頻幀逐一進(jìn)行解碼后再進(jìn)行編碼,得到所有視頻幀的格式均為I幀的視頻序列組,并將其存儲(chǔ)于存儲(chǔ)器,然后由解碼器從存儲(chǔ)器中逆序取出I幀實(shí)現(xiàn)視頻文件的逆序播放,本發(fā)明在實(shí)現(xiàn)視頻文件逆序播放的同時(shí),節(jié)約存儲(chǔ)器的存儲(chǔ)空間、減少解碼器的性能 消耗、擴(kuò)展播放器的功能。
附圖說(shuō)明
圖1是現(xiàn)有技術(shù)中視頻文件逆序播放方法的原理示意圖;
圖2是根據(jù)本發(fā)明視頻文件逆序播放方法的原理示意圖;
圖3是根據(jù)本發(fā)明視頻文件逆序播放方法的步驟流程圖;
圖4是根據(jù)本發(fā)明視頻序列組的預(yù)定選取規(guī)則示意圖;
圖5是根據(jù)本發(fā)明預(yù)定編碼格式的編碼方式示意圖;
圖6是根據(jù)本發(fā)明轉(zhuǎn)碼步驟流程圖;
圖7是根據(jù)本發(fā)明視頻文件逆序播放系統(tǒng)模塊關(guān)系示意圖;
圖8是根據(jù)本發(fā)明轉(zhuǎn)碼模塊內(nèi)部處理單元關(guān)系示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明了,下面結(jié)合具體實(shí)施方式并參照附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。應(yīng)該理解,這些描述只是示例性的,而并非要限制本發(fā)明的范圍。此外,在以下說(shuō)明中,省略了對(duì)公知結(jié)構(gòu)和技術(shù)的描述,以避免不必要地混淆本發(fā)明的概念。
圖1是現(xiàn)有技術(shù)中視頻文件逆序播放方法的原理示意圖。
如圖1所示,在現(xiàn)有技術(shù)的視頻文件逆序播放方法中,
首先,順序?qū)σ粋€(gè)視頻序列組中的所有視頻幀進(jìn)行解碼,得到原始流;
其次,將原始流存儲(chǔ)于存儲(chǔ)器;
然后,逆序從存儲(chǔ)器中取出每個(gè)視頻幀的原始流,發(fā)送至播放器;
最后,播放器接收并播放原始流,完成視頻文件的逆序播放。
在上述方法中,待解碼的視頻序列組的編碼方式一般采用H264標(biāo)準(zhǔn),因 此一個(gè)視頻序列組通常包括I幀以及參考所述I幀進(jìn)行解碼的多個(gè)視頻幀,視頻幀的幀數(shù)通常25~50幀,默認(rèn)值通常為25。將一個(gè)具有25~50幀的視頻序列組中的所有視頻幀順序解碼,得到25~50個(gè)視頻幀原始流。存儲(chǔ)器需要保存25~50個(gè)視頻幀的原始流數(shù)據(jù)(由于H264標(biāo)準(zhǔn)中,只有I幀是獨(dú)立的,P幀的解碼需要參考I幀,因此每次必須對(duì)一個(gè)視頻序列組進(jìn)行解碼,然后將原始流存儲(chǔ)),占用存儲(chǔ)器很多的存儲(chǔ)空間?;谏鲜鋈毕?,本發(fā)明提出了占據(jù)內(nèi)存空間很小的視頻文件逆序播放方法。
圖2是根據(jù)本發(fā)明視頻文件逆序播放方法的原理示意圖。
如圖2所示,和現(xiàn)有技術(shù)中的視頻文件逆序播放方式不同,本發(fā)明中,在順序?qū)σ粋€(gè)視頻序列組中的所有視頻幀進(jìn)行解碼,得到原始流后,并未將原始流直接存儲(chǔ)于存儲(chǔ)器,而是對(duì)原始流再次進(jìn)行編碼壓縮,得到與原來(lái)視頻序列組的編碼格式不同的I幀,將I幀存儲(chǔ)于存儲(chǔ)器。之后再由解碼器對(duì)I幀進(jìn)行逆序解碼,從最后一幀開(kāi)始,每完成一個(gè)I幀的解碼,便直接發(fā)送給播放器進(jìn)行播放(由于將所有的視頻幀都變成I幀,I幀解碼不需要參考別的幀,因此可以完成單幀解碼和單幀播放),由此完成了逆序播放。
由于I幀占據(jù)的內(nèi)存空間要遠(yuǎn)遠(yuǎn)小于視頻幀的原始流,因此大大減小了存儲(chǔ)器的占用空間。
圖3是根據(jù)本發(fā)明視頻文件逆序播放方法的步驟流程圖。
如圖3所示,視頻文件逆序播放方法包括:
步驟S1,根據(jù)預(yù)定選取規(guī)則,從等待逆序播放的視頻文件中逆序選取一個(gè)視頻序列組。
視頻序列組是指能完成解碼所需幀數(shù)最少的視頻幀的集合。根據(jù)視頻文 件的編碼格式的不同,視頻序列組的預(yù)定選取規(guī)則也不同。假設(shè)等待逆序播放的視頻文件的定位點(diǎn)為Pn-1和Pn之間某幀位置,則從離定位點(diǎn)往前最近的一個(gè)刷新幀開(kāi)始取流,即取到碼流{Im Pn-1…Pn};
逆序是指按照由后向前的次序選擇視頻序列組,若在前選擇的視頻序列組為{Im Pn-1…Pn}(不含Pn),則在后的視頻序列組為{Im Pn-2…Pn-1}(不含Pn-1)。
步驟S2,順序?qū)x定的視頻序列組中的每個(gè)視頻幀進(jìn)行轉(zhuǎn)碼;
轉(zhuǎn)碼器對(duì)視頻序列組{Im Pn-1…Pn}(不含Pn)中的每個(gè)視頻幀進(jìn)行轉(zhuǎn)碼,得到編碼格式為I幀的視頻幀。順序是指解碼器按照由前到后的次序?qū)x定的視頻序列組中每個(gè)視頻幀進(jìn)行轉(zhuǎn)碼,若在前轉(zhuǎn)碼的視頻幀為Pn-1,則在后轉(zhuǎn)碼的視頻幀為Pn。
當(dāng)視頻文件的編碼格式采用預(yù)定編碼格式時(shí),背景幀和刷新幀的碼流中包括幀類型、幀時(shí)間戳等信息。步驟S1中對(duì)取到碼流{Im Pn-1…Pn}進(jìn)行轉(zhuǎn)碼處理中,當(dāng)解析到Pn,即分析完成Pn幀的幀類型、時(shí)戳等幀信息后,停止轉(zhuǎn)碼處理,當(dāng)前視頻序列組轉(zhuǎn)碼完成。根據(jù)Pn-1的時(shí)間戳信息,遍歷前一個(gè)刷新幀Pn-2,取碼流{Im Pn-2…Pn-1},順序?qū)Υa流轉(zhuǎn)碼處理時(shí),解析到Pn-1,停止轉(zhuǎn)碼處理,視頻序列組處理完成。
當(dāng)圖像組的起始的視頻序列組{Im…P1}逆序播放完成,標(biāo)志著圖像組{Im…Im+1}處理完畢。同理,再處理前一個(gè)圖像組{Im-1…Im}。當(dāng)完成待逆序播放視頻文件首個(gè)圖像組{I1…I2}的轉(zhuǎn)碼,整個(gè)視頻文件逆序播放結(jié)束。
步驟S3,存儲(chǔ)完成轉(zhuǎn)碼的視頻幀;
將完成轉(zhuǎn)碼的視頻幀存儲(chǔ)于存儲(chǔ)器中。由于視頻序列組中的第一幀是I幀或背景幀,其用來(lái)作為對(duì)其后的視頻幀進(jìn)行解碼的參考依據(jù),且多個(gè)視頻序列組的第一幀視頻幀相同。為了避免重復(fù)播放,除了圖像組的首個(gè)視頻序列組{Im…P1}(不含P1),第一幀Im轉(zhuǎn)碼后需要存儲(chǔ),其余視頻序列組的第一幀Im轉(zhuǎn)碼后不需要存儲(chǔ)。
步驟S4,逆序?qū)⒁曨l幀解碼為原始流;
解碼器按照由后到前的次序從存儲(chǔ)器中取出視頻幀,并將其解碼為原始流。假設(shè)兩個(gè)刷新幀Pn-1和Pn的間隔為25幀,當(dāng)前視頻序列組{Im Pn-1…Pn}(不含Pn),所有視頻幀完成轉(zhuǎn)碼,得到I幀序列為{In-1,1 In-1,2 … In-1,25},則解碼器首先解碼In-1,25,最后解碼In-1,1。
步驟S5,播放原始流;
解碼器每完成一個(gè)視頻幀的解碼,則將解碼后得到的原始流發(fā)送至播放器。因此,若在前播放的視頻幀為In-1,25,則在后播放的視頻幀為In-1,1。
以上步驟中,轉(zhuǎn)碼器在轉(zhuǎn)碼的同時(shí),解碼器同步逆序解碼存儲(chǔ)器中的視頻幀,播放器同步播放解碼得到的原始流,從而實(shí)現(xiàn)了視頻文件的逆序播放。
本發(fā)明中,在步驟S5之后還包括步驟S6,判斷選定的視頻序列組是否為等待逆序播放的視頻文件中最后一個(gè)視頻序列組,如果是則結(jié)束處理,如果否則根據(jù)預(yù)定選取規(guī)則,逆序選取下一個(gè)視頻序列組,重復(fù)S2-S5的步驟。
在當(dāng)前一個(gè)視頻序列組播放完畢后,判斷選定的視頻序列組是否為等待逆序播放的視頻文件中最后一個(gè)視頻序列組,如果是則結(jié)束處理,如果否則根據(jù)預(yù)定選取規(guī)則,逆序選取下一個(gè)視頻序列組,重復(fù)執(zhí)行步驟S2-步驟S5,直到等待逆序播放的視頻文件中所有的視頻序列組全部播放完畢,則停止流 程。
在本發(fā)明的一個(gè)可選實(shí)施例中,在步驟S4之后還包括以下步驟:對(duì)視頻幀進(jìn)行解碼時(shí),根據(jù)視頻幀的時(shí)間戳,通過(guò)增加輸出延時(shí)或減小輸出延時(shí)的方式控制解碼的輸出速率。
在視頻文件逆序播放過(guò)程中,用戶通常會(huì)有暫停、快放或慢放的功能需求,為了實(shí)現(xiàn)該功能,可根據(jù)視頻幀的時(shí)間戳,通過(guò)延時(shí)控制解碼器的解碼輸出,實(shí)現(xiàn)逆序快速播放和慢速播放。增加輸出延時(shí),實(shí)現(xiàn)逆序慢放;減小輸出延時(shí),實(shí)現(xiàn)逆序快放。
圖4是根據(jù)本發(fā)明視頻序列組的預(yù)定選取規(guī)則示意圖。
如圖4所示,當(dāng)?shù)却嫘虿シ诺囊曨l文件的編碼格式為H264標(biāo)準(zhǔn)時(shí),選取I幀以及參考所述I幀進(jìn)行解碼的多個(gè)視頻幀作為一個(gè)視頻序列組;
當(dāng)?shù)却嫘虿シ诺囊曨l文件的編碼格式為預(yù)定編碼格式時(shí),選取背景幀、刷新幀以及參考所述背景幀和刷新幀進(jìn)行解碼的多個(gè)視頻幀作為一個(gè)視頻序列組。
圖5是根據(jù)本發(fā)明預(yù)定編碼格式的編碼方式示意圖。
如圖5所示,預(yù)定編碼格式中編碼幀的類型包括背景幀、刷新幀和普通幀。
背景幀是通過(guò)背景分析選取的一幀輸入目標(biāo)較少的輸入幀,背景幀的編碼方式等同于H264中的I幀編碼。每?jī)蓚€(gè)背景幀之間的時(shí)間間隔默認(rèn)值一般設(shè)為60秒,總幀數(shù)默認(rèn)值一般設(shè)為1500。
刷新幀是對(duì)輸入幀的視頻圖像編碼而成,其在編碼時(shí),參考背景幀,對(duì)背景幀與當(dāng)前幀的差別進(jìn)行編碼。刷新幀的編碼方式采用H264標(biāo)準(zhǔn)中的P 幀的編碼方式,每?jī)蓚€(gè)刷新幀之間的時(shí)間間隔默認(rèn)值一般設(shè)為1秒,總幀數(shù)一般默認(rèn)為25。
普通幀也是對(duì)輸入幀的視頻圖像編碼而成,其在編碼時(shí),同時(shí)參考前一幀和背景幀,對(duì)當(dāng)前幀與前一幀的差別以及當(dāng)前幀與背景幀的差別進(jìn)行編碼。
圖6是根據(jù)本發(fā)明轉(zhuǎn)碼步驟流程圖。
如圖6所示,轉(zhuǎn)碼是指轉(zhuǎn)換視頻幀的編碼格式,其具體步驟為:
步驟S21,對(duì)編碼格式為P幀的視頻幀進(jìn)行解碼,得到原始流;
步驟S23,對(duì)原始流進(jìn)行壓縮編碼,得到編碼格式為I幀的視頻幀。
在本發(fā)明的另一個(gè)可選實(shí)施例中,步驟S21之后還包括步驟S22,對(duì)原始流進(jìn)行分辨率的縮小處理。通過(guò)增加步驟S22,可以起到擴(kuò)展播放的功能。在逆序播放高分辨率視頻文件時(shí),將解碼后得到的原始流進(jìn)行縮小處理,再對(duì)縮小處理后的原始流進(jìn)行編碼,從而使得高分辨率視頻幀變?yōu)檩^低分辨率視頻幀,進(jìn)而減小存儲(chǔ)空間,并減小后續(xù)解碼器逆序解碼的性能壓力。
圖7是根據(jù)本發(fā)明視頻文件逆序播放系統(tǒng)模塊關(guān)系示意圖。
如圖7所示,視頻文件逆序播放系統(tǒng)包括:選取模塊1,用于根據(jù)預(yù)定選取規(guī)則,從等待逆序播放的視頻文件中逆序選取一個(gè)視頻序列組;轉(zhuǎn)碼模塊2,用于順序?qū)x定的視頻序列組中的每個(gè)視頻幀進(jìn)行轉(zhuǎn)碼;存儲(chǔ)模塊3,用于存儲(chǔ)完成轉(zhuǎn)碼的視頻幀;解碼模塊4,用于逆序?qū)⒁曨l幀解碼為原始流;播放模塊6,用于播放原始流。
在本發(fā)明的一個(gè)可選實(shí)施例中,視頻文件逆序播放系統(tǒng)還包括:延時(shí)輸出控制模塊5,用于根據(jù)視頻幀的時(shí)間戳,通過(guò)增加輸出延時(shí)或減小輸出延時(shí)的方式控制解碼模塊的解碼輸出速率。
在視頻文件逆序播放過(guò)程中,用戶通常會(huì)有暫停、快放或慢放的功能需求,為了實(shí)現(xiàn)該功能,增加延時(shí)輸出控制模塊5,其可根據(jù)視頻幀的時(shí)間戳,通過(guò)延時(shí)控制解碼器的解碼輸出,實(shí)現(xiàn)逆序快速播放和慢速播放。當(dāng)增加輸出延時(shí),實(shí)現(xiàn)逆序慢放;當(dāng)減小輸出延時(shí),實(shí)現(xiàn)逆序快放。
圖8是根據(jù)本發(fā)明轉(zhuǎn)碼模塊內(nèi)單元關(guān)系示意圖。
如圖8所示,轉(zhuǎn)碼模塊包括:解碼單元21和編碼單元23。解碼單元21,對(duì)編碼格式為P幀的視頻幀進(jìn)行解碼,得到原始流。編碼單元23,對(duì)原始流進(jìn)行壓縮編碼,得到編碼格式為I幀的視頻幀。
在本發(fā)明的另一個(gè)可選實(shí)施例中,轉(zhuǎn)碼模塊還包括:縮放單元22,對(duì)所述解碼單元輸出的原始流進(jìn)行分辨率的縮小處理。
應(yīng)當(dāng)理解的是,本發(fā)明的上述具體實(shí)施方式僅僅用于示例性說(shuō)明或解釋本發(fā)明的原理,而不構(gòu)成對(duì)本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。