阿里雲 RTC QoS 弱網對抗之變分辨率編碼


本文為 QoS 弱網優化系列的第二篇

作者|安基程、田偉峰
審校| 泰一

視頻編碼中的變分辨率問題及解決

變分辨率在弱網場景的實際應用中非常常見,網絡狀況不好的時候降低分辨率可以降低碼率,減少塊效應,網絡好的時候增加分辨率可以提升清晰度及主觀體驗。

目前主流的視頻編碼標准,比如 H.264、H.265,在編碼過程中如果要進行分辨率切換,則必須要先編碼一個 I 幀,而 I 幀只能使用幀內預測,編碼效率低下。這在弱網變分辨率的時候就容易造成卡頓。下圖中展示了每秒鍾切換分辨率的碼率波動效果,高低兩個分辨率,每秒鍾切換一次。

上圖中橫坐標表示編碼的幀數,縱坐標表示每幀的大小,圖中最高的 4 個尖峰表示從低分辨率切換到高分辨率時編的 I 幀,在這 4 個尖峰中間的較低尖峰是從高分辨率切換到低分辨率編碼的 I 幀。可見編碼 I 幀帶來的碼率波動還是非常明顯的,這在弱網下就很有可能造成如下圖所示的卡頓。

https://v.youku.com/v_show/id_XNTEzMTY3MzU5Ng==.html

視頻中左一的男士在伸手剛接到左三女士遞出的傳單之時進入弱網,切換分辨率,產生了卡頓。

新一代的壓縮標准,如 VP9、AV1、VVC/H.266 等都支持在做幀間預測的時候當前幀和其參考幀使用不同的分辨率,其基本思想是對參考幀做重采樣 (re-sampling) 以使得其和當前幀的分辨率匹配,從而進行幀間預測,以實現分辨率切換的時候不用編 I 幀的目的。

阿里雲 RTC codec 的變分辨率編碼 (resolution change coding, 以下簡稱 RCC) 也使用和上述標准類似的基本思想,通過參考幀重采樣等手段使得之前已編碼的其他分辨率的參考幀也能為當前幀所用,維持幀間的參考鏈不斷,充分利用幀間信息冗余提升壓縮效率,省去編碼效率低下的 I 幀。

Codec level 壓縮性能測試

本文對阿里雲 RTC codec 的 RCC 特性進行測試,使用 6 個視頻會議序列(背景不動,運動幅度較小),和 5 個運動程度較大的序列,高低兩個分辨率,一秒鍾切換一次,只評價分辨率切換幀的碼率和視頻質量,因為對於后續的幀,使用 RCC 與否,編碼方式並沒有變化。

對於視頻會議序列,相同視頻質量下碼率有 70% 節省,對於運動序列,相同視頻質量下碼率有 58% 的節省,因為視頻內容越靜止不動,幀間編碼的比例越高,則 RCC 的優勢越明顯,所以視頻會議序列 RCC 的增益比運動序列要高,是合理的。

下圖展示了一個測試序列使用 RCC 后碼率波動的變化,藍線表示的是未加 RCC 的碼率波動,紅線表示的是加了 RCC 之后的碼率波動,可以看到使用 RCC 后分辨率切換處的編碼 I 幀碼率尖峰明顯沒有了,碼率更加平穩,而且視頻質量 PSNR 也有所提升。

藍線中分辨率切換處的 I 幀平均碼率為 840kbps, PSNR=33.5db, 39.7db, 40.6db for Y, U, V 三個分量;而紅線中分辨率切換幀的平均碼率為 360kbps, PSNR=36.3db, 40.9db, 42.0db for Y, U, V 三個分量。

即開了 RCC 之后,分辨率切換時的 I 幀碼率降低了近 60%,同時亮度的 PSNR 提升了近 3 個 db。

RTC level 效果

除了前述的單純 codec level 變分辨率不編 I 幀帶來的一幀的壓縮性能提升之外,RCC 在和 LTR (Long Term Reference) 結合后會進一步降低弱網下頻繁請求 I 幀的可能性。

LTR 抗弱網的原理在上一篇分享《阿里雲 RTC QoS 屏幕共享弱網優化之若干編碼器相關優化》中已有所介紹,在此結合 RCC 會進一步提升其抗弱網效果,原理如下:

  1. 沒有 LTR 時,在弱網場景下如果丟包或卡頓無法恢復,則會請求 I 幀;
  2. 增加了 LTR 之后,則不會請求 I 幀,而是會請求 LTR 幀恢復,編碼效率提升很多;
  3. 如果是弱網下發生了分辨率切換,沒有 RCC 的情況下,由於必須編碼 IDR 幀,所以 LTR 被清空,如果此 I 幀太大,導致接收端收不到,則其會再次請求 I 幀,陷入一個惡性循環中。
  4. 如果開了 RCC ,不僅分辨率切換幀本幀不會編碼 I 幀,其他的參考幀管理也和之前一樣,LTR 也不會被清空,分辨率切換幀本幀的大小比 I 幀減少了很多,接收端收不到的概率大大降低,即使收不到,也可以請求 LTR 恢復,而不是 I 幀恢復。

本文在 RTC level 模擬弱網場景,使其一秒鍾切換一次分辨率,下面兩圖分別是未加 RCC 和 加了 RCC 之后的效果,可以看到未加 RCC 的畫面在分辨率切換時會有明顯的卡頓以及編 I 幀造成的 flicker 效應,而加了 RCC 的則會很流暢,畫面也沒有 flicker 效應。

上圖是未加 RCC,一秒鍾切換一次分辨率的效果,有多次明顯的小卡頓,且畫面有頻繁 I 幀造成的 flicker 效應。

上圖是加了 RCC,一秒鍾切換一次分辨率的效果,整體比較流暢,感覺不到卡頓,視頻質量也比較平穩,沒有 flicker 效應。

「視頻雲技術」你最值得關注的音視頻技術公眾號,每周推送來自阿里雲一線的實踐技術文章,在這里與音視頻領域一流工程師交流切磋。


免責聲明!

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



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