7-關於GOP與RAP的一些解釋

在之前的博文中,我曾經簡單把之前閱讀文獻資料和編譯軟件的記錄和心得記錄分享了一下。由於我也是剛剛接觸HEVC沒幾天,有些問題我的理解也不是很深入,在之前的博文中有博友對高層語法中的一些概念提出了疑問。在諮詢了了解背景知識的同學之後,經過仔細地重新推敲參考文獻("Overview of HEVC")之後,對一些問題找到了一些答案,在此另發一篇博文作爲迴應。
關於碼流中的三種隨機接入點的解釋:
BLA、CRA、IDR是文獻中提到過的三種隨機接入點(RAP),在文獻中的解釋的確不是很容易理解。更關鍵的是,與這三個名詞相應的還有GOP,open/closed GOP, RASL,RADL等等概念,環環相扣,一個不理解,剩下的也很難弄懂,下面我們一個一個解釋,很多也是我自己剛剛想到的,不一定正確全面,歡迎批評。
(1)關於GOP。這是圖像組(Group of Pictures)的意思,表示編碼的視頻序列分成了一組一組的有序的幀的集合進行編碼。每個GOP一定是以一個I幀開始的,但是卻不一定指代的是兩個I幀之間的距離。因爲一個GOP內可能包含幾個I幀,只有第一個I幀(也就是第一幀)纔是關鍵幀。在程序cfg中,GOP的長度和兩個I幀的距離也是兩個不同參數指定的(如IntraPeriod和GOP Size或者類似的參數)。所以,兩個I幀的間距不可能大於GOP的長度,一般情況是更小的。
(2)關於IDR。這個詞兒的全稱是Instantaneous Decoding Refresh,是在H.264中定義的結構。在H.264中,IDR幀一定是I幀,而且一定是GOP的開始,也是H.264 GOP的關鍵幀。但是反過來卻不成立,I幀不一定是IDR幀。GOP的長度不是定死不變的,在H.264的編碼器中,如果判定場景發生變化,那麼即使不到原定GOP的末尾,也會在這個位置加入一個IDR,作爲新一個GOP的開始。此時這個GOP的長度就被縮小了。
(3)閉合GOP和開放GOP(closed GOP/open GOP),CRA。閉合GOP是H.264中GOP的格式。在H.264的GOP中,所有的GOP都是獨立解碼的,與其他GOP無關,即它們都是“封閉”的。但是在HEVC中,GOP的結構發生了變化,採用了“開放”的結構,在解碼過程過可能會參考其他GOP的數據。這時,一個GOP的起始幀命名爲CRA,clean random access,同樣採用幀內編碼,但是這個GOP內的幀間編碼幀可以越過CRA參考前一個GOP的數據,這便是GOP的open。
(4)關於BLA。個人感覺BLA只是CRA在視頻流切換情況下的一種特例。視頻流在某個RAP上要求切換到另一個視頻流繼續解碼,則直接將該CRA同另一個視頻流中的接入CRA連接,後者便是BLA。由於BLA之前解碼到緩存的視頻流與當前視頻流無關,因此其特性類似於直接從該點進行隨機存取後的CRA。
(5)RASL和RADL。這是兩種GOP間的圖像類型。如果解碼器從某個CRA隨機接入,則按照顯示順序的後面幾幀數據由於缺少參考幀而不能解碼,這些圖像將被解碼器拋棄,即skip leading。而對於沒有從當前CRA接入的數據,這些圖像可以被正常解碼顯示,因此稱爲decodable leading。由於這些數據是有可能捨棄的,因此其他圖像(trailing pictures)不能參考這些數據,否則萬一這些圖像被捨棄,將會有更多的圖像受其影響而不能正常解碼。
下面舉個例子:
假設視頻序列的顯示順序爲①,這是一個完整的GOP,解碼順序爲②
①I B B P B B P B B P
②I P B B P B B P B B
在H.264中,第一個I幀爲IDR,GOP爲閉合結構,因此兩個GOP組成視頻的結構爲
I B B P B B P B B P I B B P B B P B B P(顯示順序)
I P B B P B B P B B I P B B P B B P B B(解碼順序)
而在HEVC中,兩個I幀爲CRA,GOP爲開放結構,因此GOP的結構爲:
I B B P B B P B B P B B I B B P B B P B (顯示順序)
I P B B P B B P B B I B B P B B P B B...(解碼順序)
兩個紅色的B幀表示的是按照解碼順序在CRA之後,該GOP內參考的前一個GOP進行編碼的圖像。這樣便很容易得知,如果選擇在第二個CRA進行隨機接入,這兩個紅色的B幀將會由於沒有參考幀無法解碼而被捨棄。這兩個紅色的B幀即RASP。如果沒有選擇這個CRA進行隨機接入,這兩個紅色B幀將可以順利解碼,即成爲RADP。
對於BLA,情況也是類似的。由於出現碼流拼接,第二段碼流的CRA之後的B也會因爲沒有參考幀無法解碼而丟棄。很容易理解,此時緩存中的參考幀數據還來自上一段碼流,跟當前碼流沒關係,當然不能用作B的參考了。
之餘HEVC這麼設計的目的,我覺得應該是爲了編碼效率考慮的。因爲B幀的壓縮比相對是最高的,引入這種設計可以在不影響隨機存取性能的前提下,儘可能增大B幀的比重,提高整體壓縮編碼的性能。
以下是一些國外研究者在論壇中對這個問題的一些討論,可以拿來做一下參考:
www.linkedin.com/groups/IDR-vs-CRA-3724292.S.125836481
forum.doom9.org/archive/index.php/t-105129.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章