天天看點

了解H.264(AVC)的你,知不知道什麼是SVC?

通常新手在學習 H.264 的時候,通常會認為 AVC 是 H.264 協定的别名。但自從2007年H.264協定中增加了 SVC 的部分之後,人們習慣将不包含 SVC 的H.264協定那一部分稱為 AVC,而将 SVC 這一部分單獨稱為 SVC。是以提到 AVC 的時候,需要根據具體情況判斷到底是指 H.264協定還是指協定中不包含 SVC 的那一部分。

可伸縮視訊編碼技術(SVC)在視訊會議行業和視訊通信中有着重要的影響。在2008年,當Vidyo首次推出SVC時,很少人意識到它背後所蘊含的變革力量。大多數人都認為它僅僅隻是一個更好的編解碼器,甚至還有可能存在一些有待完善的錯誤。

與任何新技術一樣,剛開始時,我們都很難完全了解SVC的工作原理,相關系統及功能的實作機制,甚至是它對整個行業的影響。本文旨在提供一些有關SVC的事實和理論知識,同時分析一下目前可伸縮視訊編碼在視訊通信領域的定位以及未來的前景所在。

是以,什麼是 SVC?

SVC全稱是Scalable Video Coding,翻譯成可分層的,可分級的,可擴充的。H.264的AVC是JVT制定視訊編碼标準。H.264擴充标準支援多種可分級類型,其中空域可分級、時域可分級、品質可分級,是可分級模式的典型代表。JM86的編解碼是基于AVC,JSVM的編解碼是基于SVC。

H.264 SVC(H.264可分級編碼)作為H.264标準的一個擴充最初由JVT在2004年開始制定,并于2007年7月獲得ITU準許。H.264 SVC以H.264 AVC視訊編解碼器标準為基礎,利用了AVC編解碼器的各種高效算法工具,在編碼産生的編碼視訊時間上(幀率)、空間上(分辨率)可擴充,并且是在視訊質 量方面可擴充的,可産生不同幀速率、分辨率或品質等級的解碼視訊。

它是H.264 / MPEG-4 Part 10進階視訊編碼标準的擴充,統稱為Advance Video Coding。AVC是由國際電信聯盟(ITU)的視訊編碼專家組(VCEG)和國際标準化組織(ISO)的運動圖像專家組(MPEG)共同開發的,合稱聯合視訊組(JVT)。是以,AVC有兩個正式名稱:國際電信聯盟(ITU)命名的H.264和國際标準化組織(ISO)命名的MPEG-4 Part 10。通常,通信領域的人傾向于将AVC稱為H.264,而廣播影音娛樂領域的人則傾向于将其稱為AVC或MPEG-4。毫無疑問AVC一直是非常成功,它幾乎适用于所有現代數字視訊應用标準:從視訊會議和YouTube,到藍光DVD和iTunes商店。

SVC是AVC标準的附錄G。有人卻用AVC這個詞來表示H.264标準和附錄G,這令人費解。在本文中,我們使用AVC來描述H.264的不可伸縮部分,而用SVC來描述可伸縮部分,當不加區分時則使用H.264進行描述。即這樣了解:AVC + SVC + ... = H.264

H.264規範提供了一種方法,允許根據特定的應用領域搭配不同的使用規範,事實上,絕大多數視訊編碼标準都會有基本的使用規範,并且提供可修改的方法,我們稱之為配置檔案。配置檔案可以說是标準規範所提供的編碼工具的子集,主要适用于特定的應用領域。例如,增加端到端延遲的功能對于廣播視訊而言是可接受的,但對于視訊會議而言則是不可接受的,是以在面向視訊會議的配置檔案中則不包括這個功能。H.264的可伸縮特性展現在其配置檔案的參數設定中:Scalable Baseline、Scalable High、Scalable Constrained Baseline、Scalable Constrained High和Scalable High Intra。盡管,在高清分辨率運作的軟體配置檔案中一般包含Scalable High參數,但是針對視訊會議(移動裝置)應用的配置檔案,一般隻包含Scalable Baseline和Scalable Constrained Baseline這兩個參數。

與配置檔案相關的是一個名為層級的概念。層級定義了特定配置檔案中各種操作參數的限制。例如,它定義了特定解碼器所能夠處理的最大圖檔的大小。配置檔案和級别是一個相當古老的概念:您的普通舊式DVD播放器中,播放MPEG-2格式的視訊的主要配置檔案是在主級解碼器上。您的藍光播放器所包含的H.264 AVC的高配置解碼器則是在4.1級。

AVC和SVC有什麼差別?

SVC和AVC的根本差別在于,前者将視訊信号編碼為一組圖層。各層互相依賴,形成一個層次結構。特定層及其所依賴的層提供了以特定的保真度解碼視訊信号時所必需的資訊。這裡的保真度涉及一個或多個空間分辨率,時間分辨率或信噪比(SNR 壓縮視訊信号相對于其未壓縮版本的失真度量)。不依賴于任何其他層的最底層被稱為基本層,并提供最低品質等級的圖像。每個附加層可以通過三個次元(空間,時間或SNR)中任何一個次元提高信号品質。

圖1表示以不可縮放的方式進行視訊編碼。這就是大多數(如果不是全部的話)AVC相容視訊編碼器的工作原理。圖中每個正方形表示一張圖檔,而底部的數字表示時間執行個體。第一張圖檔為“I”幀,可獨立編碼,無需參考其他任何圖檔(“I”取自單詞“intra”的首字母)。其他所有的圖檔為“P”幀,需要參考前面的幀畫面進行預測然後編碼。箭頭表示預測的源圖檔以及目标圖檔。通過觀察可知,隻需一層,則可形成一個無止境的圖檔鍊。

了解H.264(AVC)的你,知不知道什麼是SVC?

圖1:非縮放性視訊編碼

圖2表示在時間次元上的可伸縮性視訊編碼。觀察預測箭頭的組織方式,在這個例子中,定義了三個不同的層(L0到L2)。圖中的圖檔是垂直偏移的,以便在視覺上分離三層。每一層都需要依賴較低層才能被解碼,但不需要任何較高層。這允許從頂層開始移除圖檔,而不影響剩餘圖檔的可解碼性。例如,我們假設圖例中顯示的圖層以30 fps的幀速率顯示。如果我們移除所有L2層的圖檔,剩下層(L0和L1)仍然可以成功解碼,并且産生一個15fps的視訊。如果我們進一步删除所有的L1圖像,那麼剩下的L0層依然可以被解碼并産生一個7.5fps的視訊。

了解H.264(AVC)的你,知不知道什麼是SVC?

圖2:時間可伸縮性

圖3所示,我們可以通過擴充時間可伸縮性結構同時實作空間可伸縮性編碼。每個圖檔現在有兩部分:基礎層分辨率圖檔的B部分和空間增強層的S部分,這兩個部分結合則可生成全分辨率圖像。空間增強層一般為水準和垂直方向上基底分辨率的1.5倍或者2倍。這為不同分辨率的視訊在進行空間可縮放性編碼時提供了便利,例如VGA和QVGA(比率為2)以及1080p和720p(比率為1.5),都可以進行空間可伸縮性編碼。空間可伸縮性可以與時間可伸縮性(和SNR)以完全獨立的方式相結合。假設在圖示例子的全速率和分辨率分别為30fps下的HD高清分辨率(720p),那麼我們可以在分辨率(HD、1/4HD)和幀速率(30fps、15fps、7.5 fps)之間進行任意組合。

了解H.264(AVC)的你,知不知道什麼是SVC?

圖3:空間和時間的可伸縮性

H.264 SVC通過在在編碼碼流嵌入具有相關性的多個不同分辨率的子流實作空間上的可分級。上層所有的視訊幀構成了高分辨率視訊,下層所有的視訊幀構成了低分辨率視訊。值得注意的是,這不是唯一的可伸縮性結構——在建構空間和時間預測結構方面,該标準具有較大的靈活性。

SVC的一個非常重要的方面是基本層符合AVC的設計。換句話說,SVC信号的基本層可通過AVC解碼器進行解碼。這確定SVC信号與AVC向後相容,盡管在涉及到一個以上的層時,其保真度會低于全信号。但注意,SVC編碼器不需要一直生成分層比特流 - 如果在不需要和不必要進行可伸縮性編碼的環境下運作時,則可以生成傳統的AVC流。

為什麼使用SVC?

SVC提供了一種适應性較強的視訊信号表示方式。換句話說,無需對信号進行解碼、處理和重新編碼,也可以實作自适應。如果我們想要改變圖像分辨率或時間幀速率,那麼我們唯一需要做的就是從圖1中的圖表中移除适當的塊。如果将這些塊視為通過網絡傳輸的資料包,這就相當于從傳輸的比特流中移除相應的網絡資料包。這一點意義非常重大:它為基于多點控制單元(MCU)的傳統視訊會議系統架構提供了新的設計思路。

MCU是一個複雜的裝置,它接收多個視訊編碼信号,解碼後合成到一個新的圖像上,重新編碼後,再将編碼信号發送給預定接收者。顯然,從計算的角度來看,這是一個非常複雜的操作。此外,在系統運作中還引起了相當大的延遲,通常為150-200毫秒。為了更好的比較,我們給出一個資料:國際電聯規定長途電話的端到端延遲的上限為180毫秒。超過180毫秒後,延遲會令正在通信的各方使用者産生較差的體驗感受。顯然,與MCU進行互動式多點通信是非常困難的。由于采用了級聯編碼,會導緻了品質的損失。值得注意的是,這些問題是架構中固有的,無論投入多少資源都不會消失。例如,提高MCU内部DSP處理器的速度也隻能稍微減少延遲。

是以,具備H.264 SVC編碼的視訊會議系統,在保證高效的視訊壓縮性能的基礎上,視訊廣播端可以通過一次編碼産生具有不同幀率、分辨率的視訊壓縮碼流,以适應不同網絡帶 寬、不同的顯示螢幕和終端解碼能力的應用需求,進而有效地避免了視訊會議系統中MCU上複雜而昂貴的轉碼。

AVC不如SVC有效嗎?

SVC的高效有一定的代價。如果SVC和AVC編碼器産生的相似品質的比特流,那麼SVC将比AVC需要大約10-15%的比特位(這取決于編碼器的成熟性)。認識到這種“開銷”對我們來說非常重要。盡管有額外的開銷,但是我們将獲得端到端的低延遲和穩健的容錯性 - 僅AVC就無法實作這一點。事實上,如果我們考慮丢包造成的品質損失,我們很快會發現,因為AVC編碼的品質下降得很快,是以它的效率是遠低于SVC。額外的開銷帶來的回報是,我們的伺服器可以輕松擴充至100位使用者,以及所有高端視訊會議系統功能,如個性化布局和速率比對。

隻關注壓縮效率是一個非常狹隘的觀點,因為它忽略了完整系統中真正發生的情況。通過共同考慮壓縮效率和網絡傳輸,人們可以設計解決方案平衡這兩個方面的消耗,解決系統級問題。牢記SVC是AVC的擴充也很重要。這意味着,當條件允許時,換句話說,當網絡具有極高的可靠性時,所有端點都具有類似于網絡的通路速度,同時所有端點都具有類似的編碼和解碼能力時,SVC系統就可以恢複使用普通AVC。然而,當考察企業的全體使用者時,我們很少能夠通路這樣一個非常可靠的網絡,而且實際上我們也從未有過相同的接入網絡或端點。

就像普通汽車和越野四輪驅動車一樣,雖然四輪驅動車确實會燃燒更多的燃料,但是誰願意在海邊平面沙灘上或者峻嶺山峰上冒險行駛普通汽車呢? 另外,您可以在不需要時關閉它。實際情況是,在全球網際網路中,資料包走的路總是危險的。

可伸縮性、聯播和SFUs

對于單一視訊信号,同時提供多個不同表示的簡單方法就是産生多個編碼。與可伸縮編碼相反,這不需要任何新的編碼工具:您隻需以不同的分辨率來多次運作編碼器即可。這将産生多個獨立的比特流,并且比可伸縮編碼占用更多比特位(通常比單個高分辨率流高50%)。由于兩個流之間缺乏依賴關系導緻了較差的健壯性。這種方案被稱為“聯播”(源自“同時廣播”),并且可以被認為是可伸縮性編碼的一個個别案例。(現階段多數大廠的做法)

了解H.264(AVC)的你,知不知道什麼是SVC?

 圖4:聯播架構

隐藏在聯播背後的是,您可以使用一個與VidyoRouter類似的伺服器而不是可伸縮編碼:終端将高分辨率和低分辨率的流一同傳輸到伺服器端,然後再由伺服器選擇将流傳輸到不同的接收端。聯播将其開銷放置在糟糕的節點上:從傳輸端點到伺服器的上行網絡。這往往是最成問題的,例如,ADSL線路。聯播技術的一個優點是最高分辨率比特流可以由傳統(非伸縮性)解碼器進行解碼。是以,對于那些部署了大量無法更新的硬體解碼器的公司來說,這更具有吸引力的。

在2008年VidyoRouter推出時,其操作原理非常新穎。事實上,和VidyoRouter同時釋出的“RTP拓撲結構”RFC(RFC 5117)提供了一個可以用RTP實作的各種實時通信架構的調查,但沒有預見到它。2013年10月,我創造了“選擇性轉發單元”(SFU)來描述選擇性轉發伺服器的操作,不管它是否用于可伸縮視訊或聯播。在2015年11月釋出的RFC 5117修訂版(RFC 7667)中,該術語已被采納,現在較長的描述其操作。

http://info.vidyo.com/rs/vidyo/images/WP-Vidyo-SVC-Video-Communications.pdf

參照原文作者 / Alex Eleftheriadis, Ph.D., Chief Scientist of Vidyo 

繼續閱讀