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