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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM