幹掉大小流切換 I 幀!阿里雲 RTC QoS 及視訊編碼聯合優化之切流編碼

阿里雲視訊雲 發表於 2022-01-24

如果要在兩條解析度不同的視訊流之間切換,儘管這兩條流的畫面內容基本一樣,但是由於兩條流的參考幀不同,解析度不同,目前所有的視訊編碼標準都無法做到利用幀間預測編碼得到編解碼匹配的結果,而幀內預測編碼即 I 幀的壓縮效率是非常低下的,因此在切流處很容易造成視訊質量下降或由於位元速率突增引起的卡頓;阿里雲 RTC codec 在前代標準的基礎之上通過獨創的切流編碼技術和網路層 QoS 體系的緊密配合可以做到在此種場景下仍然利用幀間預測編碼 P 幀且編解碼匹配,相比於 I 幀顯著提升壓縮效率,提升視覺體驗。

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

1. 背景介紹

一條視訊流,如果中途改變解析度,對於目前主流的 H.264/AVC, H.265/HEVC 標準來說,必須要編碼 I 幀,即只能利用幀內資訊冗餘,如圖 1(左)所示;新一代的編碼標準如 AV1,H.266/VVC 等可以做到利用幀間資訊冗餘,不編 I 幀,以提升壓縮效率,基本原理是通過對參考幀進行縮放,使得參考幀和當前幀的解析度一致,如圖 1(右)所示,阿里雲 RTC codec 的變解析度編碼(Resolution Change Coding,以下簡稱 RCC)技術也具備該能力,詳情請參考我們之前的分享:《阿里雲 RTC QoS 弱網對抗之變解析度編碼》

本文將要介紹的切流編碼(Stream Switch Coding,以下簡稱 SSC)技術是對 RCC 技術的升級。

幹掉大小流切換 I 幀!阿里雲 RTC QoS 及視訊編碼聯合優化之切流編碼
圖 1. 變解析度示意圖(左:傳統插入 I 幀方式;右:參考幀縮放技術)

H.264/AVC 標準的 SP slice 技術可以用於切換兩條解析度一樣的視訊流,但是對於切換兩條解析度不同的視訊流則無能為力。

AV1 標準的 S frame 雖然可以用於從高解析度的流切換到低解析度的流,但是其會造成編解碼不匹配,有誤差傳播風險。

2. 切流場景簡介

image.png


圖 2. 多流場景示意圖

圖 2 展示了多流場景,一個 publisher 上有兩個 encoder: Enc0, Enc1, 分別傳送大解析度的流和小解析度的流 (以下簡稱大流和小流),兩路流的畫面內容是一樣的,只是解析度,位元速率不同,所以清晰度不同,subscriber 可以根據自己網路狀況等選擇訂閱不同的流,比如網路好的時候就收大流,網路差的時候收小流,圖 2 中共有 6 個 subscriber 也即 6 個 decoder,其中 Dec0, Dec1, Dec2 接收的是大流,Dec3, Dec4, Dec5 接收的是小流。
image.png
圖 3. 常規切流示意圖

圖 3 展示了發生切流時的變化,其中 Dec3 剛開始收的是小流,後面由於某種原因(如網路變好)切換到了大流,則 Enc0 必須要傳送一個 I 幀來實現切流,此 I 幀會影響到所有接收大流的 subscriber (如圖中的 Dec0, Dec1, Dec2,實際情況中可能會有更多的訂閱者),造成切流瞬間的編碼質量下降或位元速率突增。圖中綠色箭頭代表了 Dec3 接收的幀。但是如果直接將 Enc0 的 P 幀送給 Dec3, 肯定也是不行的,因為兩條流的參考幀不一樣,解析度也不一樣,必然造成解碼錯誤(編解碼不匹配),正是由於這些困難,目前所有的視訊編碼標準都未能解決這個痛點。然而阿里雲 RTC Codec 通過獨創的 SSC 技術可以做到在兩條解析度不同的流之間進行切換時也能夠利用幀間資訊冗餘不編 I 幀,提升壓縮效率。

image.png


圖 4. 本文 SSC 技術切流示意圖

圖 4 展示了利用 SSC 技術進行切流,同樣是 Dec3 從小流切換到大流,在切流時 Enc0 編碼了一個 PDS 幀,Enc1 編碼了一個 PSS 幀,圖中的綠色箭頭表示了 Dec3 接收的幀,其通過接收一個 PSS 幀實現了切流。PDS 幀本文稱之為目標流切換幀(P frame for Destination-stream Switch),PSS 幀本文稱之為源流切換幀(P frame for Source-stream Switch),Dec0, 1, 2 和之前相比,接收的 I 幀變成了 PDS 幀,Dec3 接收的 I 幀變成了 PSS 幀,PDS 幀和 PSS 幀都利用了幀間資訊冗餘進行編碼,因此壓縮效率相對於 I 幀有顯著提升。

3. 測試結果

PDS 幀壓縮效能測試

本文通過測試一個視訊會議序列 FourPeople 來比較 I 幀,P 幀,和 PDS 幀的壓縮效能。將該序列分別壓縮為全 I 幀,全 P 幀(除了第一幀為 I 幀),和全 PDS 幀(除了第一幀為 I 幀)。圖 5 展示了壓縮結果,橫座標為位元速率,縱座標為 PSNR,精確計算 BD-rate 顯示,同等質量下,P 幀可以比 I 幀節省 93% 位元速率,PDS 幀在具備 I 幀的切流能力的同時可以比 I 幀節省 66% 位元速率。
image.png
圖 5. PDS 幀壓縮效能展示

本測試直接說明如果將一個序列每幀都編碼為 I 幀,則其每幀都具備切流能力,但是損失了壓縮效能,如果都編碼為 P 幀,雖然可以比 I 幀節省 93% 位元速率,但是完全不具備切流能力,如果都編碼為 PDS 幀,則可以在保留 I 幀切流能力的同時,比 I 幀節省 66% 位元速率。

實際場景中一般不會每幀都出現切流的情況,本測試表明在切流處,目標流利用 PDS 幀可以比 I 幀節省 66% 位元速率。

PSS 幀壓縮效能測試

由於 PSS 幀涉及到解析度的切換,用傳統(如 H.264, H.265 標準)的 P 幀已無法編碼,所以本文只比較了 I 幀和 PSS 幀的壓縮效能。本文使用了一個大小解析度幀交錯的視訊會議序列來測試,即偶數幀為大解析度,奇數幀為小解析度,分別編碼全 I 幀,和全 PSS 幀(除了第一幀為 I 幀)。同等質量下,PSS 幀比 I 幀可以節省 29% 位元速率。
image.png
圖 6. 常規連續切流示例

image.png


圖 7. 本文 SSC 技術連續切流示例

本測試直接表明的是一個不斷切流的場景,如圖 6 所示,Dec3 不斷的在大小流之間切換,圖 6 展示的是用原有編碼 I 幀的切流方式,則 Dec3 收到的全是 I 幀,圖 7 展示的是用本文的 SSC 技術的切流方式,Dec3 收到的則全是 PSS 幀,本測試說明在這種情況下 PSS 幀可以比 I 幀節省 29% 位元速率,率失真曲線如圖 8 所示。
image.png
圖 8. PSS 幀壓縮效能展示

實際場景中一般不會出現一直切流的情況,本測試表明在切流處,源流利用 PSS 幀可以比 I 幀節省 29% 位元速率。

綜上,利用本文展示的阿里雲 RTC 獨創的 SSC 技術,在切流處,目標流可以比 I 幀節省 66% 位元速率,源流可以比 I 幀節省 29% 位元速率。

「視訊雲技術」你最值得關注的音視訊技術公眾號,每週推送來自阿里雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。公眾號後臺回覆【技術】可加入阿里雲視訊雲技術交流群,和作者一起探討音視訊技術,獲取更多行業最新資訊。