1. 程式人生 > >H.264 SVC

H.264 SVC

H.264 SVC

 

視訊廠商POLYCOM,VIDYO和RADVISION等都推出H.264 SVC技術。針對H.264 SVC技術做個介紹。

CISCO和POLYCOM都提供了免版稅的H.264 SVC的版本。 其中open264現在最亮眼。

1. H.264 SVC是什麼?

H.264SVC (Scalable Video Coding)是以H.264為基礎,在語法和工具集上進行了擴充套件,支援具有分級特性的碼流,H.264SVC是H.264標準的附錄G,同時作為H.264新的profile。H.264SVC在2007年10月成為正式標準。

2. SVC分級編碼的概念

編碼器產生的碼流包含一個或多個可以單獨解碼的子碼流,子碼流可以具有不同的位元速率,幀率和空間解析度。

分級的型別:

時域可分級(Temporal scalability):可以從碼流中提出具有不同幀頻的碼流。

空間可分級(Spatial scalability):可以從碼流中提出具有不同影象尺寸的碼流。

質量可分級(Quality scalability):可以從碼流中提出具有不同影象質量的碼流。

 

圖 1 分級型別示意圖

 

3. SVC分級編碼的應用

1. 監控領域:監控視訊流一般產生2路,1路質量好的用於儲存,1路用於預覽。用SVC編碼器可以產生2層的分級碼流,1個基本層用於預覽,1個增強層保證儲存的影象質量是較高的。使用手機遠端監控預覽的情況下,可以產生一個低位元速率的基本層。

2. 視訊會議領域:視訊會議終端利用SVC編出多解析度,分層質量,會議的中心點替代傳統MCU二次編解碼方法改為視訊路由分解轉發。也可在網路丟包環境下利用時域可分級,拋棄部分時域級實現網路適應性。在雲視訊領域SVC也有想像空間。

3. 流媒體IPTV應用:伺服器可以根據不同的網路情況丟棄質量層,保證視訊的流暢。

4. 相容不同網路環境和終端的應用。

 

圖 2 針對不同網路和終端的應用

 

4. SVC分級編碼優點缺點

優點:分級碼流優點是應用非常靈活,可以根據需要產生不同的碼流或者提取出不同的碼流。使用SVC實現一次分層編碼比用AVC編多次更高效。分層編碼有技術優勢,新的編碼器H.265也使用了分層思想,可以實現靈活的應用,也可提高網路適應性。

缺點:分級碼流的解碼複雜度增加。基本層是AVC相容碼流,編碼效率沒有影響。在同樣的條件下,分級碼流比單層碼流的壓縮效率要低10%左右,分級層數越多,效率下降越多,現在的JSVM編碼器最多支援3個空域分級層。在同樣的條件下,分級碼流比單層碼流的解碼計算複雜度高。SVC是2007年10月才做為正式標準,相容性和對通性遠沒有AVC好,所以SVC實際應用不是廣泛。

圖 3 分級編碼和單層編碼效率對比

注:該圖引用自德國HHI網站。

(1)對於時域分級,AVC已經實現,時域分級對編碼效率沒有影響。

(2)質量分級如圖 3(a)所示,質量可分級碼流對編碼效率影響大約在10%。

(3)空域分級如圖 3(b)所示,SVC空域分級編碼,不只是影響整體編碼效率,對於基本層(AVC層)的編碼效率也有10%的降低,基本層編碼效率降低的原因是基本層幀內預測受限。

 

5. SVC對h264的技術擴充套件,語法擴充套件

語法擴充套件:

(1) 對NAL(Network Adaptive Layer)頭進行了擴充套件,用於描述碼流的分級資訊。為了便於描述AVC相容碼流的分級特性,定一個NAL型別為14的字首NAL,該型別的NAL出現在AVC相容碼流的NAL前面,用於描述AVC基本層碼流的分級資訊。見圖 4、 圖 5。

(2) 使用保留的NAL型別14、20編碼增強層碼流。

 

圖 4 NAL頭擴充套件

 

圖 5 擴充套件NAL頭內容

技術擴充套件,分層編碼為了提高編碼效率,就需要最大程度的利用層間相關性。SVC增加了層間預測的工具集,主要如下:

1. 層間幀內預測(Inter-layer intra prediction)。

2. 層間巨集塊模式和運動引數預測(Inter-layer macroblock mode and motion prediction)。

3. 層間殘差預測(Inter-layer residual prediction)

下面會通過圖介紹新增加的層間預測技術。

6. SVC的技術

6.1 時域分級技術

 

圖 6 時域分級示意圖

注:可以通過依次丟棄棕色、綠色、藍色得到不同幀頻的碼流。

6.2 空域分級技術

圖 7 空域分級示意圖

 

6.3 層間預測技術


 

圖 8 層間預測技術示意圖(左)層間幀內預測(中)層間型別預測(右) 層間殘差預測

 

層間幀內預測(Inter-layer intra prediction):影象紋理複雜並且幀間搜尋匹配不好的巨集塊,如果基本層採用的是幀內預測,增強層可以採用層間幀內預測模式提高編碼效率。具體做法是把基本層的I塊重建上取樣得到增強層的預測,增強層只需要傳原始影象和層間幀內預測的殘差。

層間巨集塊模式和運動引數預測(Inter-layer macroblock mode and motion prediction):如圖 7所示,增強層的巨集塊型別可以通過基本層預測獲取。增強層的運動引數也可以通過基本層運動引數上取樣獲取。這一點是h.264SVC和其他分級編碼技術的區別之一。其它分級編碼技術一般通過畫素域的上取樣進行預測,而對於h.264SVC,認為時域相關性大的區域,利用層間的運動引數預測,在增強層做運動補償效率更高。對於層間運動引數的預測,語法支援的顆粒大小可以是一個巨集塊,最小是一個8x8塊。

層間殘差預測(Inter-layer residual prediction):如圖 7所示,對於幀間編碼的巨集塊,增強層的影象殘差和基本層的影象殘差具有相關性,可以利用基本層的殘差進行上取樣減少增強層編碼的影象殘差。對於空間解析度發生變化的層間殘差預測,發生在殘差畫素域,計算量較大;對於空間解析度不發生變化的層間殘差預測(質量分級),發生在變換系數或變換電平域,計算量較小。

6.4 多層碼流,只進行一次運動補償

通過技術上來保證只需要一次運動補償。因為層間預測沒有利用幀間塊的重建,所以參考層(或者稱為基本層)不需要解碼重建,層間預測使用的是運動向量預測,對於解碼重建只需要最後做一次運動補償即可。

這樣做的好處:(1)節省計算量,降低解碼複雜度;(2)減少對解碼器對記憶體的需求。

6.5 分級表述的語法元素描述

 

Dependency_id:D層標記,也是我們常說的空域分級層標記,從0到7,最多有8個D層。基本層的值為0。CGS質量分級是特殊的空域分級。

Quality_id:MGS質量分級層標記。從0到15。

Temporal_id:時域分級標記,從0到7,最多有8個時域分級。

use_ref_base_pic_flag:MGS使用的語法。通常,都是使用當前層的重建影象作為參考影象,對於關鍵幀,則使用參考層的重建影象作為參考影象。注意區別,不是使用當前影象的參考層重建作為參考。

discardable_flag:當前影象沒有被作為層間參考層,則該標記置1。在碼流提取的時候,如果該層不是目標層,則會被丟棄。

6.6 使用層間預測的語法元素描述

NAL頭:no_inter_layer_pred_flag;整個slice是否啟用層間預測的開關

Sliceheader:每個巨集塊自適應層間預測模式還是使用預設層間預測模式

adaptive_base_mode_flag

default_base_mode_flag

adaptive_motion_prediction_flag

default_motion_prediction_flag

adaptive_residual_prediction_flag

default_residual_prediction_flag

巨集塊的層間預測模式標記:

base_mode_flag :巨集塊是否使用層間型別和運動引數預測,直接使用層間預測的運動引數,碼流中不再傳。

motion_prediction_flag_l0[mb_partSize]:巨集塊分割是否啟用運動向量層間預測,這種模式還會傳層間預測運動向量和實際運動向量的殘差。

residual_prediction_flag:巨集塊是否啟用殘差預測。

 

6.7 層間型別預測計算

如果base_mode_flag == 1,就需要進行層間型別預測。如果16個塊對應的參考層塊都是I塊,則當前巨集塊型別是IBL;否則就是INTER_BL,運動向量和參考索引都是從參考層預測得到,巨集塊型別我們現在預設是標記為P8x8,子塊分割型別可以根據6.9節的計算得到。

6.8 層間運動向量預測計算

對於base_mode_flag等於1的巨集塊或者運動向量使用層間預測的巨集塊,在層間解析度發生變換的情況下,存在運動向量上取樣。下面按計算過程的步驟說明原理。

第一步:計算當前層的每個4x4塊在參考層對應位置,如果在參考層的對應位置是I塊(包含IBL),則返回-1,否則返回參考層對應4x4塊的座標。

第二步:如果當前層巨集塊的16個4x4塊在參考層對應位置都是I塊,則當前巨集塊是IBL型別,不進行後續計算,否則,針對4x4塊和8x8塊出現參考是I塊的情況,用鄰近4x4塊的參考層對應塊取代,這樣就可以防止計算參考索引上取樣出現-1的情況。

第三步:按照當前層8x8塊為最小處理單元獲取運動向量上取樣。獲取每個4x4塊的運動向量和參考索引之後,從4個參考索引中取最小非負數為該8x8塊的參考索引。同時根據4個運動向量的相近情況,對4個運動向量進行後處理。

(1) 如果4個運動向量的差的絕對值小於等於1,則對4個運動向量取均值,得到最終的運動向量。

(2) 如果在4x4塊排列的水平方向上,兩組2個4x4塊的運動向量差的絕對值小於等於1,則分別對2個4x4塊的運動向量取均值,8x8塊的分割模式為8x4。

(3) 如果在4x4塊排列的垂直方向,兩組2個4x4塊的運動向量差的絕對值小於等於1,則分別對2個4x4塊的運動向量取均值,8x8塊的分割模式為4x8。

注意:如圖 4所示,在空間解析度變化為1:2的情況下,參考層的1個4x4塊對應當前層的一個8x8塊,因此運動向量的後處理不存在。只有在限制空間解析度為0的情況下(比如空間解析度為1:1.5),當前層的每個8x8塊覆蓋參考層的多個4x4塊,才存在運動向量後處理。

圖 9 運動資訊層間預測示意圖

6.9 層間殘差預測計算

在層間解析度發生變化的情況下,同時當前塊型別是幀間塊,並且residual_prediction_flag==1。這些情況都滿足的情況下存在殘差預測。

 

圖 10 層間殘差預測計算原理

(1)當前層的畫素位置假設為(x,y),根據6.5節畫素層間對映計算公式,得到參考層對應的畫素位置(xRef,yRef)。

(2)如果(xRef,yRef)點和(xRef+1,yRef)點屬於同一個變換塊,根據雙線性得到一箇中間結果,如上圖中黑點。同理,(xRef,yRef+1)和(xRef+1,yRef+1)點也計算得到一箇中間結果。

 

 

(3)如果點(xRef,yRef)和點(xRef,yRef+1)屬於同一個變換塊,則對中間結果採取雙線性計算得到層間畫素預測的最終結果,否則,y相位判斷取哪一個中間結果作為最終值。

 

6.10 層間畫素預測計算

使用條件:當前層巨集塊型別為IBL型別,即當前層巨集塊的16個4x4塊在參考層中對應位置都是I塊,並且當前巨集base_mode_flag==1。

圖 11 畫素上取樣示意圖(亮度)

(1)首先對參考層中的I巨集塊和IBL巨集塊重建,在周圍P塊中做8畫素擴充套件。

(2)計算當前巨集塊(0,0)位置的點在參考層中畫素對應位置,如圖中紅色點(xRef,yRef)。

(3)首先計算一組垂直4抽頭濾波的中間點。計算公式如下。

 

(4)在步驟(3)的基礎上,進行水平4抽頭濾波,獲得最終的上取樣結果,計算公式如下。

 

注:計算過程注意優化,同時要注意程式碼的穩定性及字長。

6.11 空間分級編碼原理

舉例說明,兩層編碼,基本層為AVC編碼,增強層採用層間預測自適應編碼。

(1) 基本層採用AVC的編碼方式,限制條件就是幀內塊預測受限。

(2) 增強層的編碼可以利用基本層的運動向量上取樣預測,殘差上取樣預測,I塊的畫素上取樣預測,巨集塊型別預測。同時增強層的巨集塊也可以不採用層間預測,編碼方式類似AVC。

6.12 質量分級編碼原理

以2層的CGS(coarse-grain scalability)為例說明質量分級編碼的原理,不啟用SVC-->AVC重現選項。基本層採用AVC的編碼方式,限制條件就是幀內塊預測受限。因為解析度不變,可以更好的利用層間預測資訊。IBL型別巨集塊:層間I塊,利用基本層的I塊重建作為預測,對原始影象減去層間預測的殘差進行編碼。利用運動向量預測的P塊:即可以直接利用基本層的運動向量作為當前層的運動向量,也可以利用基本層的運動向量作為預測運動向量,在碼流中傳運動向量的偏移。利用變換系數域預測的P塊:增強層的殘差進行變換之後得到變換系數,減去基本層的變換系數反量化之後的值,對得到的變化係數殘差進行量化,然後進行熵編碼傳輸。

6.13 SVC------>AVC重寫工具的原理

使用提案“V-035”中的PPT中的圖說明原理。

 

 

6.14 時間分級實現方法

時域分級通過層次B幀或者層次P幀來實現,實際中一般使用層次B幀。通過語法元素中的Temporal_id標記不同的時域層,可以很方便的提取。

.

7. 參考:

1. https://en.wikipedia.org/wiki/Scalable_Video_Coding

2. http://ip.hhi.de/imagecom_G1/assets/pdfs/Overview_SVC_IEEE07.pdf

3. JVT提案“V-035” http://wftp3.itu.int/av-arch/jvt-site/2007_01_Marrakech/JVT-V035

4. http://www.polycom.com/company/news/press-releases/2012/20121004.html