天天看點

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

如果要在兩條分辨率不同的視訊流之間切換,盡管這兩條流的畫面内容基本一樣,但是由于兩條流的參考幀不同,分辨率不同,目前所有的視訊編碼标準都無法做到利用幀間預測編碼得到編解碼比對的結果,而幀内預測編碼即 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 及視訊編碼聯合優化之切流編碼

::: hljs-center

圖 1. 變分辨率示意圖(左:傳統插入 I 幀方式;右:參考幀縮放技術)

:::

H.264/AVC 标準的 SP slice 技術可以用于切換兩條分辨率一樣的視訊流,但是對于切換兩條分辨率不同的視訊流則無能為力。

AV1 标準的 S frame 雖然可以用于從高分辨率的流切換到低分辨率的流,但是其會造成編解碼不比對,有誤差傳播風險。

2. 切流場景簡介

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

::: hljs-center

圖 2. 多流場景示意圖

:::

圖 2 展示了多流場景,一個 publisher 上有兩個 encoder: Enc0, Enc1, 分别發送大分辨率的流和小分辨率的流 (以下簡稱大流和小流),兩路流的畫面内容是一樣的,隻是分辨率,碼率不同,是以清晰度不同,subscriber 可以根據自己網絡狀況等選擇訂閱不同的流,比如網絡好的時候就收大流,網絡差的時候收小流,圖 2 中共有 6 個 subscriber 也即 6 個 decoder,其中 Dec0, Dec1, Dec2 接收的是大流,Dec3, Dec4, Dec5 接收的是小流。

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

::: hljs-center

圖 3. 正常切流示意圖

:::

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

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

::: hljs-center

圖 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% 碼率。

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

::: hljs-center

圖 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% 碼率。

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

::: hljs-center

圖 6. 正常連續切流示例

:::

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

::: hljs-center

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

:::

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

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

::: hljs-center

圖 8. PSS 幀壓縮性能展示

:::

繼續閱讀