即時通訊音視訊開發(五):認識主流視訊編碼技術H.264
前言
即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。
系列文章
H.264簡介
什麼是H.264?H.264是一種高效能的視訊編解碼技術。目前國際上制定視訊編解碼技術的組織有兩個,一個是“國際電聯”,它制定的標準有H.261、H.263、H.263+等,另一個是“國際標準化組織(ISO)”它制定的標準有MPEG-1、MPEG-2、MPEG-4等。而H.264則是由兩個組織聯合組建的聯合視訊組(JVT)共同制定的新數字視訊編碼標準,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高階視訊編碼,而且它將成為MPEG-4標準的第10部分。因此,不論是MPEG-4 AVC、MPEG-4 Part 10,還是ISO/IEC 14496-10,都是指H.264。
網際網路巨頭們對待H.264的態度
因為蘋果公司當初毅然決然拋棄了Adobe的VP6編碼,選擇了H.264,這個標準也就隨著數億臺iPad和iPhone走入了千家萬戶,成為了目前視訊編碼領域的絕對霸主,佔有超過80%的份額。
隨著網際網路視訊服務的快速崛起,各類智慧電子裝置都陸續支援視訊網路下載及播放。H.264標準一直是網路視訊的主要壓縮技術之一,且在又有逐步取代Flash視訊格式的發展趨勢。其主要支持者,是微軟的IE瀏覽器和蘋果公司的系列產品,前者保證了H.264在桌面裝置市場的優勢,後者保證了H.264在便攜裝置市場的優勢。
然而,由於谷歌公司決定在其新一代瀏覽器Chrome中支援新的視訊編解碼技術WebM、而不支援H.264,使得H.264在網路視訊市場的前景受到很大的挑戰。
H.264演算法的優勢
H.264是在MPEG-4技術的基礎之上建立起來的,其編解碼流程主要包括5個部分:幀間和幀內預測、變換和反變換、量化和反量化、環路濾波、熵編碼。
H.264/MPEG-4 AVC(H.264)是1995年自MPEG-2視訊壓縮標準釋出以後的最新、最有前途的視訊壓縮標準。H.264是由ITU-T和ISO/IEC的聯合開發組共同開發的最新國際視訊編碼標準。通過該標準,在同等圖象質量下的壓縮效率比以前的標準提高了2倍以上,因此,H.264被普遍認為是最有影響力的行業標準。
H.264的優勢
H.264在1997年ITU的視訊編碼專家組提出時被稱為H.26L,在ITU與ISO合作研究後被稱為MPEG4 Part10或H.264(JVT)。H.264標準的主要目標是:與其它現有的視訊編碼標準相比,在相同的頻寬下提供更加優秀的圖象質量。
而,H.264與以前的國際標準如H.263和MPEG-4相比,最大的優勢體現在以下四個方面:
- 將每個視訊幀分離成由畫素組成的塊,因此視訊幀的編碼處理的過程可以達到塊的級別。
- 採用空間冗餘的方法,對視訊幀的一些原始塊進行空間預測、轉換、優化和熵編碼(可變長編碼)。
- 對連續幀的不同塊採用臨時存放的方法,這樣,只需對連續幀中有改變的部分進行編碼。該演算法採用運動預測和運動補償來完成。對某些特定的塊,在一個或多個已經進行了編碼的幀執行搜尋來決定塊的運動向量,並由此在後面的編碼和解碼中預測主塊。
- 採用剩餘空間冗餘技術,對視訊幀裡的殘留塊進行編碼。例如:對於源塊和相應預測塊的不同,再次採用轉換、優化和熵編碼。
具體優勢表現為:
- 低碼流:和MPEG2和MPEG4 ASP等壓縮技術相比,在同等影象質量下,採用H.264技術壓縮後的資料量只有MPEG2的1/8,MPEG4的1/3。顯然,H.264壓縮技術的採用將大大節省使用者的下載時間和資料流量收費。
- 高質量的圖象:H.264能提供連續、流暢的高質量圖象(DVD質量)。
- 容錯能力強:H.264提供瞭解決在不穩定網路環境下容易發生的丟包等錯誤的必要工具。
- 網路適應性強:H.264提供了網路適應層, 使得H.264的檔案能容易地在不同網路上傳輸(例如網際網路,CDMA,GPRS,WCDMA,CDMA2000等)。
H.264和以前的標準一樣,也是DPCM加變換編碼的混合編碼模式。但它採用“迴歸基本”的簡潔設計,不用眾多的選項,獲得比H.263++好得多的壓縮效能;加強了對各種通道的適應能力,採用“網路友好”的結構和語法,有利於對誤碼和丟包的處理;應用目標範圍較寬,以滿足不同速率、不同解析度以及不同傳輸(儲存)場合的需求。
H.264標準的關鍵技術
1 幀內預測編碼
幀內編碼用來縮減影象的空間冗餘。為了提高H.264幀內編碼的效率,在給定幀中充分利用相鄰巨集塊的空間相關性,相鄰的巨集塊通常含有相似的屬性。因此,在對一給定巨集塊編碼時,首先可以根據周圍的巨集塊預測(典型的是根據左上角的巨集塊,因為此巨集塊已經被編碼處理),然後對預測值與實際值的差值進行編碼,這樣,相對於直接對該幀編碼而言,可以大大減小位元速率。
2幀間預測編碼
幀間預測編碼利用連續幀中的時間冗餘來進行運動估計和補償。H.264的運動補償支援以往的視訊編碼標準中的大部分關鍵特性,而且靈活地添加了更多的功能,除了支援P幀、B幀外,H.264還支援一種新的流間傳送幀——SP幀,如圖3所示。碼流中包含SP幀後,能在有類似內容但有不同位元速率的碼流之間快速切換,同時支援隨機接入和快速回放模式。
3整數變換
在變換方面,H.264使用了基於4×4畫素塊的類似於DCT的變換,但使用的是以整數為基礎的空間變換,不存在反變換,因為取捨而存在誤差的問題,變換矩陣如圖5所示。與浮點運算相比,整數DCT變換會引起一些額外的誤差,但因為DCT變換後的量化也存在量化誤差,與之相比,整數DCT變換引起的量化誤差影響並不大。此外,整數DCT變換還具有減少運算量和複雜度,有利於向定點DSP移植的優點。
4量化
H.264中可選32種不同的量化步長,這與H.263中有31個量化步長很相似,但是在H.264中,步長是以12.5%的複合率遞進的,而不是一個固定常數。
在H.264中,變換系數的讀出方式也有兩種:之字形(Zigzag)掃描和雙掃描,如圖6所示。大多數情況下使用簡單的之字形掃描;雙掃描僅用於使用較小量化級的塊內,有助於提高編碼效率。
5熵編碼
視訊編碼處理的最後一步就是熵編碼,在H.264中採用了兩種不同的熵編碼方法:通用可變長編碼(UVLC)和基於文字的自適應二進位制算術編碼(CABAC)。
在H.263等標準中,根據要編碼的資料型別如變換系數、運動向量等,採用不同的VLC碼錶。H.264中的UVLC碼錶提供了一個簡單的方法,不管符號表述什麼型別的資料,都使用統一變字長編碼表。其優點是簡單;缺點是單一的碼錶是從概率統計分佈模型得出的,沒有考慮編碼符號間的相關性,在中高位元速率時效果不是很好。
因此,H.264中還提供了可選的CABAC方法。算術編碼使編碼和解碼兩邊都能使用所有句法元素(變換系數、運動向量)的概率模型。為了提高算術編碼的效率,通過內容建模的過程,使基本概率模型能適應隨視訊幀而改變的統計特性。內容建模提供了編碼符號的條件概率估計,利用合適的內容模型,存在於符號間的相關性可以通過選擇目前要編碼符號鄰近的已編碼符號的相應概率模型來去除,不同的句法元素通常保持不同的模型。
H.264在實時視訊聊天中的應用
目前,H.264已被廣泛應用於實時視訊應用中,相比以往的方案使得在同等速率下,H.264能夠比H.263減小50%的位元速率。也就是說,使用者即使是隻利用 384kbit/s的頻寬,就可以享受H.263下高達 768kbit/s的高質量視訊服務。H.264 不但有助於節省龐大開支,還可以提高資源的使用效率,同時令達到商業質量的實時視訊服務擁有更多的潛在客戶。
網易雲信,你身邊的即時通訊和音視訊技術專家,瞭解我們,請戳網易雲信官網
想要閱讀更多行業洞察和技術乾貨,請關注網易雲信部落格
本文轉載自52im,作者:JackJiang