【轉】H.264 SVC

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

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分級編碼的概念

編碼器產生的碼流包含一個或多個能夠單獨解碼的子碼流,子碼流能夠具備不一樣的碼率,幀率和空間分辨率。ide

分級的類型:工具

時域可分級(Temporal scalability):能夠從碼流中提出具備不一樣幀頻的碼流。優化

空間可分級(Spatial scalability):能夠從碼流中提出具備不一樣圖像尺寸的碼流。網站

質量可分級(Quality scalability):能夠從碼流中提出具備不一樣圖像質量的碼流。編碼

 

圖 1 分級類型示意圖scala

 

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基本層碼流的分級信息。見圖 四、 圖 5。

(2) 使用保留的NAL類型1四、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

相關文章
相關標籤/搜索