了解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”幀,需要參考前面的幀畫面進行預測然后編碼。箭頭表示預測的源圖片以及目標圖片。通過觀察可知,只需一層,則可形成一個無止境的圖片鏈。
圖1:非縮放性視頻編碼
?
圖2表示在時間維度上的可伸縮性視頻編碼。觀察預測箭頭的組織方式,在這個例子中,定義了三個不同的層(L0到L2)。圖中的圖片是垂直偏移的,以便在視覺上分離三層。每一層都需要依賴較低層才能被解碼,但不需要任何較高層。這允許從頂層開始移除圖片,而不影響剩余圖片的可解碼性。例如,我們假設圖例中顯示的圖層以30 fps的幀速率顯示。如果我們移除所有L2層的圖片,剩下層(L0和L1)仍然可以成功解碼,并且產生一個15fps的視頻。如果我們進一步刪除所有的L1圖像,那么剩下的L0層依然可以被解碼并產生一個7.5fps的視頻。
圖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)之間進行任意組合。
圖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%)。由于兩個流之間缺乏依賴關系導致了較差的健壯性。這種方案被稱為“聯播”(源自“同時廣播”),并且可以被認為是可伸縮性編碼的一個個別案例。(現階段多數大廠的做法)
?圖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?
總結
以上是生活随笔為你收集整理的了解H.264(AVC)的你,知不知道什么是SVC?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BJFU_数据结构习题_241双栈的基本
- 下一篇: Visual Studio2012 编译