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

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

做者|安基程、田偉峯
審校| 泰一網絡

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

變分辨率在弱網場景的實際應用中很是常見,網絡情況很差的時候下降分辨率能夠下降碼率,減小塊效應,網絡好的時候增長分辨率能夠提高清晰度及主觀體驗。ide

目前主流的視頻編碼標準,好比 H.26四、H.265,在編碼過程當中若是要進行分辨率切換,則必需要先編碼一個 I 幀,而 I 幀只能使用幀內預測,編碼效率低下。這在弱網變分辨率的時候就容易形成卡頓。下圖中展現了每秒鐘切換分辨率的碼率波動效果,高低兩個分辨率,每秒鐘切換一次。性能

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

上圖中橫座標表示編碼的幀數,縱座標表示每幀的大小,圖中最高的 4 個尖峯表示從低分辨率切換到高分辨率時編的 I 幀,在這 4 個尖峯中間的較低尖峯是從高分辨率切換到低分辨率編碼的 I 幀。可見編碼 I 幀帶來的碼率波動仍是很是明顯的,這在弱網下就頗有可能形成以下圖所示的卡頓。測試

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

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

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

阿里雲 RTC codec 的變分辨率編碼 (resolution change coding, 如下簡稱 RCC) 也使用和上述標準相似的基本思想,經過參考幀重採樣等手段使得以前已編碼的其餘分辨率的參考幀也能爲當前幀所用,維持幀間的參考鏈不斷,充分利用幀間信息冗餘提高壓縮效率,省去編碼效率低下的 I 幀。3d

Codec level 壓縮性能測試

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

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

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

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

藍線中分辨率切換處的 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 效應。

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

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

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

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

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

相關文章
相關標籤/搜索