騰訊是如何大幅降低頻寬和網路流量的

IT技術精選文摘發表於2018-05-16

1、前言


每年年初騰訊公司都要制定 SNG(社交網路事業群)成本優化年度目標,過去三年已經用技術手段為公司節省了超過 10 億的現金流。產品的架構和容量也越來越健康,繼續成本優化變得十分艱難。

但我們在迷茫中仍然定下了再優化 3 億元的目標。很幸運,2017 年我們實現了這個目標,並再次獲得公司級獎勵,這是非常不容易的。因為“成本與質量”是個平衡木,而 2017 年 SNG 產品面臨著激烈的內外競爭,要降低產品質量是根本不可能的。所以本次文章跟大家分享如何在保障質量(指的是圖片質量、音視訊質量)前提下所做的頻寬和網路流量壓縮,進而達到運營成本的優化。

2、移動端高流量時代來臨


在非WiFi環境下玩手機,你會在意“流量”嗎?

我在身邊的同事和朋友圈兒做了同樣的調查,得到的答案差不多,大家對手機流量不怎麼在意,不喜歡轉菊花和卡頓。我自己用的是騰訊大王卡,騰訊系的免流量,其他流量全國1元 800 M / 日,我身邊有個開發妹子用的阿里寶卡,1 元 / G 全國日租流量,我領導用的全球通套餐,他自己也不記得多少錢一個月,反正流量用不完,他說他不缺流量缺的是時間,但我總發現他會偷偷看小視訊,一看就停不下來。

總之,就像本文將在分享的一樣:用技術手段為使用者提供低成本高質量的產品體驗才是未來移動端產品的思路。

3、以QQ 相簿圖片壓縮為例


我們來看看QQ 相簿圖片壓縮的例子。QQ 相簿業務發展較為平穩,總圖片數有上萬億張,每日新增上傳圖片幾百萬張,每日下載圖片幾百億張,外網頻寬日峰值上百G,成本壓力一直存在。

我們進行了各種維度的技化的實踐,包括使用新的圖片格式、最新的技術以及一些技巧等。

3.1使用WebP格式進行圖片壓縮


使用者上傳的圖片一般有三種主流格式:JPEG、PNG 和 GIF 動圖,15 年 QQ 相簿用Google 的 WebP 格式使用者上傳的原圖進行後臺壓縮,在保障同等質量下的 WebP 圖片比原圖體積小 30%。

3.2使用解析度自適應


使用者終端機型解析度存在大小不一,但一些產品是以最大解析度下發的,但中低端機型並不需要高解析度的圖片,優化為按需返回適當解析度圖,可節約 20% 的流量。15 年做的這 2 個優化都是在保障圖片清晰度不變的前提下,為使用者和企業節約了流量和儲存空間。


3.3GIF 動圖壓縮


16 年底相簿推出新功能,使用者在發表說說時可以選擇自己的照片合成 GIF 動圖,新功能導致流量增長非常迅猛,對應的外網頻寬成本上增 70%。流量分析發現僅有 5% 下載次數的 GIF 格式圖片佔用了 20% 頻寬,剩下大部分是經過 WebP 格式壓縮過圖片。

GIF 動圖相當於一組圖片的集合,可以把它看做一個小視訊,但 GIF 格式是一種點陣圖檔案格式,是利用顏色表索引來表示每個畫素顏色,然後標記重複出現的資料,編碼過程對圖片顏色資料沒有損失,是一種無失真壓縮方式,相比視訊壓縮演算法壓縮率比較低,使用者自己編輯的 GIF 大小普遍在 2-4M,是普通圖片幾十倍,佔使用者和企業的下載流量和儲存都很大,當時用的開源 WebP 不支援 GIF 動圖壓縮所以考慮其他圖片壓縮格式。

4、新技術選型 TPG 圖片壓縮


騰訊 SNG 音視訊實驗室基於(AVS2 國家標準核心)開發了 TPG 圖片壓縮格式。採用了視訊編碼模式,利用幀間參考,大幅減少冗餘值,提升壓縮率。特別是在動圖上具有高壓縮率和低編解碼耗時的明顯優勢,經在 QQ 相簿驗證 TPG 可在同等質量下可將 GIF 大小降低 90%,將 WebP 再降低 21%,比 JPEG 節約 43% 左右。並做了編解碼效能的優化,耗時等都優於 WebP。為此 17 年全面推廣相簿 TPG 格式化。

右圖是壓縮了11 倍的 TPG 動圖,人眼主觀觀察質量很難看出區別:

5、相簿接入 TPG 圖片壓縮-前後臺解決的困難


全客戶端統一後臺配置:
相簿圖片展示場景複雜,接入方案要適用於移動、PC、H5核心等所有客戶端版本,根據使用者客戶端能力優先返還 TPG > WebP > JPG,右圖是後臺搭建的全客戶端統一後臺配置。


灰度釋出:
作為首個大體量全面接入 TPG 的業務,為了保障平滑過渡,首先對新上傳的圖片保障非同步壓縮後儲存在源站,被訪問後會儲存在中間源和 OC 點,大概一個月等 TPG 熱資料佔 70% 後,對舊的圖片需要人工觸發或者基於訪問觸發實時壓縮。

6、廉價轉碼資源


TPG 是利用 AVS2 編碼標準 通過非常複雜的計算來提高圖片壓縮比,實際無論是圖片、音訊還是視訊壓縮比的提升都是增加計算複雜度,等於是用計算資源來換頻寬和儲存,所以頻寬優化需要大量廉價轉碼資源,如果專門採購轉碼伺服器,需要大量的現金流。所以我們用 FPGA 轉碼卡與離線平臺軟硬結合來提供廉價計算資源。

FPGA卡:
FPGA 作為一種高效能、低功耗的可程式設計晶片,可以根據客戶定製來做針對性的演算法設計。所以在處理海量資料的時候,FPGA 相比於 CPU 和 GPU,優勢在於 FPGA計算效率更高,以相簿TPG轉碼為例,FPGA 卡效能是普通圖片處理伺服器的10倍,編碼延時減少 80%,大幅減少使用者等待,採用結合 FPGA 轉碼卡與 Docker 離線軟硬結合,能有效降低轉碼成本,現已節約了幾千臺伺服器。

成果:
專案在上半年完成,現在 TPG 請求量佔 80% 以上,節約了 40% 的頻寬,儲存量減少,節約幾千萬/年,質量上反而由於檔案變小,解碼效率提升,使用者等待時長減少了 22%。

7、全型別多場景的圖片壓縮解決方案


TPG 編碼壓縮雖然在壓縮率上更優,但需要客戶端和 PC 具備解碼 SDK 才能正常使用,現在推廣階段,現網仍存在很多原圖(JPEG、PNG、GIF)請求量。

經過三年的積累騰訊搭建了一套全型別多場景的圖片壓縮解決方案,根據使用者客戶端情況返還最優的圖片格式,降低業務接入門檻,如下右圖。

8、點播類小視訊的流量優化思路


8.1冗餘下載


原來 QQ 空間的小視訊播放沒做任何限速,一旦開始播放就會以使用者最快的速度進行下載,一個小視訊檔案長度大約 80s,在正常網速下不到 20s 就可以下載完成,但往往使用者並沒有完整看完每個視訊,資料顯示空間使用者的平均播放時長是隻有 23s,下載但沒有播放的視訊浪費了使用者和企業的流量。

8.2QQ 空間小視訊限制下載速度


對空間的小視訊控制下載速度,先嚐試限制下載永遠只比播放多 40s,卡頓率在1.2%,然後將 40s 改為 20s,卡頓率上升到 2.1%,持續驗證,最後調整在 20s。如果使用者網速太差,發生二次緩衝則不限速。

8.3QQ 長視訊實施邊下邊播


針對 QQ 的長視訊啟用邊下邊播策略,使用者點選視訊後先全速緩衝 20s 然後再以檔案位元速率進行下載,看一秒下一秒,關閉播放就停止下載。不需要等下載完才能播放,使用者平均等待時間從 12.6s下降到了 1.77s 左右,極大地提升了使用者體驗。現在邊下邊播已經成了騰訊視訊業務的標配,措施完成後,冗餘下載比從 65% 下降到 35% 左右。


8.4空間小視訊歷史優化策略


關閉自動播放:
過去 2 年空間小視訊播放量一直在上漲,造成外網頻寬流量也一直上漲,17 年以前已經做的優化手段有“高峰期關閉自動播放“(使用者點選才播放,但現在來看只要在WiFi 環境下自動播放使用者體驗更順暢,所以也切回去了)。

降位元速率:
搞笑的很多都是小貓小狗,場景比較簡單,當時我們認為這類視訊流暢比清晰度更重要。所以可以適當的降低清晰度(位元速率),於是系統根據熱度,對每小時 TOP2000的熱點視訊後臺壓縮出低位元速率進行播放,節約了大量的頻寬。

8.5空間小視訊H.265技術選型


位元速率太低,質量變差:
位元速率是資料傳輸時單位時間傳送的資料位數,同一種編碼格式下位元速率越高越清晰,當時空間熱點視訊位元速率壓縮到 300kps,不到現在普通手機拍攝的 1/3。位元速率降到肉眼可識別的程度後使用者體驗就會變差。但業務持續上漲,需要既節約頻寬又保障質量,所以考慮使用新一代視訊編碼標準 H.265 來提升壓縮率。

16年當時公司沒有業務嘗試,除了專利風險外,由於H.265計算複雜度遠高於H.264,編解碼都需要硬體在效能上支援。

8.6硬解碼與軟解碼


解碼有硬解和軟體兩種,硬解碼是使用播放裝置(手機和電腦)的硬體解碼,比如通過專用的DSP核心解碼晶片的功率更低,解碼效率更高,現在支援硬解碼的手機比例大概在 70%。安卓客戶端複雜,不確定是否支援解碼。

不具備專用硬體就只能通過軟體利用 CPU 解碼,軟解由於要妥協解碼裝置的通用性,所以演算法上對效率和質量有折扣,相比硬解更耗時,容易造成手機發熱和耗電。

硬解比軟解能減少使用者終端 CPU 佔用、降低系統開銷、減少耗電和發熱,所以現在要做軟硬結合。經過一整年的運營,整體H.265播放佔比從 8% 提升到現在的 30%,壓縮比最高 40%。卡頓率沒有下降,反而提升,使用者體驗更流暢。

9、實時音視訊聊天的流量優化思路


QQ 會議視訊混音:
視訊裡還有一種場景是實時音視訊通話類,比如 QQ 會議視訊,以往會都是有幾個人同時說話,接收方就接收幾路音訊,然後在客戶端進行混音操作。混音是把多種來源的聲音整合至一個立體音軌或單音音軌中。

質量跟蹤:
優化過程中也通過質量評分系統,對使用者質量進行監控。質量隨著混音灰度逐步微升。

10、實時音視訊直播的流量優化


下圖是企鵝電競正在直播的一場吃雞,可以看到房間線上人數非常高,清晰度有高清、超清和藍光,頻寬成本一直很高。


今年春節期間 NOW 直播的答題業務非常火,每天晚上 8 點會在指定房間出題,觀眾答對可以瓜分每天 100 萬的獎金,最高峰值有 90 萬觀眾同時線上,假設平均位元速率1M,峰值會有 900G 的頻寬,成本非常高。

SNG直播業務很多,根據每個產品不同特點,分別做了不同的優化。

空間直播是熟人社交,房間人數普遍很少,低於 10 人,小房間走 OC 回源率非常高,浪費 CDN 分發資源,所以使用IP直連方式。

NOW 直播的房間稍大(一般數十人到數百人不等),但音訊走的DC頻寬,OC頻寬單價是 DC 頻寬的 1/2 還低,所以就推進 DC 轉 OC。

和點播不同,大主播的裝置和網路比較好,一般採用主播上行推2路流,一路H.264 (考慮低端手機硬解能力),一路 H.265。小房間考慮到主播上行頻寬限制和轉碼計算成本,就只出一路 H.264.

NOW 直播答題房間主播同時推 H.264 和 H.265 兩路流可以節約總體 30% 頻寬,可優化力度很大。

11、精細化位元速率優化


頻寬優化案例還有很多,結合產品特色各有千秋,就不一一列舉了,下面我們看一下現在視訊優化的方向。

動態位元速率:
位元速率控制有三種:恆定位元速率(CBR)、平均位元速率(ABR)、動態位元速率(VBR),一般使用的平均位元速率。但平均位元速率有很多弊端。

根據場景不同:
但同一個視訊裡也會出現不同的場景,比如打鬥需要的位元速率要比風景高,可利用深度學習對場景進行分類,在轉碼時給與不同的編碼引數。

根據ROI特徵提取,對人眼感興趣區域重點編碼:
人眼一般對人物特別是人臉區域的注意力要大於其他區域,比如看下圖是鬥魚一姐馮提莫的直播畫面,可以對人臉重點編碼、對人身體和衣服次重點增強、對其他區域適當減弱的策略來轉碼。

自適應解析度:
動態位元速率是在使用者網路條件允許的情況下,找編碼位元速率的最優解,而如果使用者網速限制,但又想為使用者提升清晰度的話,可以用自適應解析度的方式。在相同播放視窗下(顯示解析度相同),相同位元速率下不同編碼解析度的質量PSNR是不同的,所以在固定位元速率和顯示視窗下,有最佳編碼解析度。比如使用者選擇高清,使用者頻寬限制位元速率在1.2M,在這個基礎上可以找到適合使用者網速的最佳編碼解析度進行編碼。

12、總結一下


結合這些實際案例,頻寬優化歸納為一小兩少三不變。檔案壓縮的更小,下載次數少,冗餘下載少,質量不變。

常用的管理和技術手段有很多如下餅圖:

在優化過程可以運用五部曲:

業務運維還有一個非常痛苦的場景就是做預算,利用精細化成本管理思路為產品做頻寬預測和優化模型,因為資料會變化,所以可以採集資料,系統自動統計頻寬的預算和合理性分析。

公眾號推薦:


相關文章