1. 程式人生 > >騰訊高階音視訊架構師郭亮:解密互動直播技術

騰訊高階音視訊架構師郭亮:解密互動直播技術

2016年9月10日,第52期【OSC源創會】在珠海圓滿落幕,350餘名OSCer齊聚報業大廈,聆聽了一場誠意滿滿、乾貨多多的技術分享盛會。

本期源創會由5位講師分別針對5個不同的主題進行分享,為給未能到現場以及參與活動後仍意猶未盡的OSCer更好的瞭解和學習,開源中國將每位講師的演講內容進行了整理,並將逐一發布。乾貨多多,不容錯過!

首先是由騰訊高階音視訊架構師郭亮帶來的《互動直播技術解密》,主要是對目前主流直播方案的解析,以及依託於QQ音視訊的騰訊雲互動直播SDK在多個關鍵技術上的深度優化方案的分享。

完整演講內容如下:

開源中國社群珠海的小夥伴們,下午好!感謝主持人把氣氛調動的這麼歡快,也很開心大家冒著大雨來參加我們的活動,包括現在也有許多不能來現場的小夥伴在線上觀看我們的活動直播。

 

首先,做個自我介紹,我叫郭亮,來自騰訊雲視訊,07年畢業之後加入中興通訊一直從事音視訊相關工作,包括核心網、媒體閘道器等相關音視訊架構。而後進入了騰訊,近一年來,一直在專注於開發騰訊的直播的一些引擎。

話不多說,我們進入主題。大家剛才應該有看到,我有和觀看線上直播的小夥伴打招呼。近一年來,直播被拱上風口。據統計,在過年的一年裡,有超過1000家廠商進入直播行業,現在已隨處可見各種各樣的直播。可以說,直播已經走進了我們的生活。

其實對於直播行業,我們有做一個自己的分析,大概將其分為以下幾類:

第一種是傳統的語音直播網站,像是YY、9158這些,現在發展依然強勁。

第二種是近兩年興起的遊戲類直播網站,像是鬥魚、龍珠、戰旗等,也已經探索出一條成熟的直播變現道路,有著不錯的使用者量和收益。

另外就是傳統的視訊網站,包括騰訊視訊、愛奇藝、搜狐視訊等,也推出了自己的直播業務。

還有最近興起的秀場,像是映客、花椒等,在最近的各個熱點話題背後都能看到它們的身影,也成功塑造出許多網紅。
此外,像是聚美、蘑菇街、唱吧這些電商、歌唱、炒股類的網站,也紛紛加入了隊伍,做跨界直播。

說完分類,接下來正式來聊本期的主題——互動直播。互動直播其實也是不斷在演變,最初的主播只是簡單迴應觀眾文字類、彈幕類的提問和話題的方式,逐漸衍生出接送禮物、連麥等更具互動交流的形式。到現在,隨著VR技術的逐漸成熟,已經有國內外的網站在推出VR的直播,可以說是互動直播未來的一種發展方向。

可能有人會想,既然直播這麼火,那也去做一個直播的APP,或者在APP裡面加入直播能力。那麼問題來了,一個好的直播產品需要清晰、低延遲、秒開、連麥等等一系列的技術特性,我們到底該如何進行技術選型呢?

其實,目前市面上比較流行的是這幾種直播方案:

第一種是基於TCP的RTMP,這可以說是相對成熟的一種方案,它的優勢是隻要瀏覽器支援FLASH,就可以內嵌播放;但不足的是,在互動直播中2-5S的延時會對體驗有所影響。第二種FLV是基於HTTP下載協議的一個方案,在互動上比RTMP會稍微輕便點,但同樣存在溝通延遲的問題。第三種HLS是目前直播中比較常見的一種方案,其最大的優勢就是手機瀏覽器是原生支援的,這在移動網際網路時代可以說是一大殺手鐗;不過它最大的問題是延遲比前面兩種會更為嚴重。還有一種RTP方案,是目前QQ和微信中做實時音視訊使用的方案,它的優勢就是延遲可以做到很低,控制性強,但它的一大缺點就是在PC和移動端的原生支援都是比較差的,需要做一些SDK的嵌入。

看完這四種方案,是不是發現好像並沒有哪種方案是做的特別好的?在這種情況下,騰訊雲做了一套自己的直播方案,對各方面有做一定的折中。首先,我們有做一套實時音訊的框架,主播和觀眾可以實現很好的互動,保證溝通的順暢。而為保證下行的抗損耗能力,我們又接入了OC系統的分發體系。同時,為更好的對瀏覽器支援,我們做了一套“旁路推流”系統,將音視訊流轉到RTMP、FLV或HLS等,通過傳統的CDN方案推給客戶端,實現瀏覽器原生支援。這樣,我們既能實現好的延遲和抗損,也能有相對較強的相容。

接下來,給大家介紹互動直播方案中比較核心的技術,主要針對幾個關鍵點進行講述。

1、秒開

舉個例子,從下圖可以看到,網站的開啟速度對於使用者留存以及網站自身收益有著很大影響。

在直播當中,秒開的重要性同樣不言而喻。而影響秒開的因素非常多,包括自身的影響、和業務側的影響、以及一些裝置方面的影響等等。對於秒開,騰訊雲將其分成了兩個環節——進房和岀畫。在進房這一部分,我們將一些可以提前做的東西提前在登陸的時候完成;另外就是針對裝置上的一些啟動啊進行並行操作;還有就是和業務側的配合,像禮物狀態的存取、人數的拉取等,做並行處理。而在岀畫環節,則設立了後臺音視訊資料的雙GOP快取機制,後臺根據網路上的情況和客戶端向Server拉取的時機,智慧的選擇存取單個還是兩個GOP資料,以及智慧推送前一個GOP資料還是當前GOP資料,給後面的音畫同步和快取帶來聯動作用。

那是不是隻要做完這些就可以達到很好的效果呢?

然而,並不!因為我們在做完發現後臺在推送資料的時候會一下推送兩個GOP龐大的資料,對頻寬的壓力極大。因此,我們又做了一些其他的策略來保證穩定性,包括推流速度的控制以及推流資料的QoS保障機制。我們不固定速度推送,而是根據使用者當前的資料量和網路情況自動選擇合適的推送速度,降低丟包,再加上保障機制,給使用者穩定的互動。

下圖是騰訊雲和一些競品的互動資料:
 

2、流暢無卡頓

這是比秒開在直播過程中接到使用者反饋更多的核心要素,事實上,影響卡頓的環節很多,包括採集、播放等等,而這其中又分為功能方面和網路方面上的優化。在此,則主要講的是網路上的優化。其實上行不穩和下行不穩都會造成卡頓,對此,騰訊雲從以下幾個方面進行解決:一是依託於多年的使用者積累,及海外多點部署的伺服器,能及時的進行鍼對性擴容,保證接入。二是採用“三級火箭調控”機制,根據使用者卡頓時間進行自適應調整。三是同一事件往往有各個平臺的人在進行直播,大家均在競爭網路下進行工作,需要有優異的搶頻寬能力,騰訊雲基於UDP的傳輸方案在此時則具有明顯優勢。

3、低延時連麥

低延時連麥是互動直播中的重點也是最基本的要求,騰訊雲同樣是基於多年的音視訊積累經驗,轉換了一套解決方案。低延時連麥對音視訊的基礎能力要求較高,包括對語音的回聲消除能力、視訊的原音編解碼等能力。

說到回聲抵消技術,可能有做過IOS開發的同學會說,IOS上自帶有迴音抵消能力的,為什麼不直接用呢?其實,大家真正去用的話,回聲抵消真正要做細緻的話,需要考慮很多東西。騰訊雲在訊號對齊、機型設配、音訊防抖上都有很大的優勢。

此外,我們在視訊上針對編解碼也做了許多優化,包括視訊壓縮質量的調節、低位元速率畫面下編碼方式的調節等,使得在視訊編碼的效能和效果上,都有一定的加強。目前已經放開了500多款移動裝置的硬體編解碼。

4、開放式框架

開放式的框架指的是無論是在採集層還是處理層,可以實現既可以使用我們設定的,也可以自定義,包括自定義實時水印、美顏、音效等,更符合個人需求。

5、運營與網路模擬

作為一個開放的SDK,對於運營能力是非常重要的。當你的SDK接入了幾百家的使用者,如果沒有出色的運營能力的話,你很可能會轉變為疲於奔命幫使用者解決問題的客服。騰訊雲目前的做法是除了提供給使用者業界通用的包含每日訪問資料、每日卡頓率變化的報表,還提供一個實時的監控系統,可以讓使用者及時看到訪問情況。

另外,我們實行一套網路模擬系統,我們自己在騰訊大廈實驗室裡面模擬各種託管下、競爭網路下以及運營商網路下的網路環境。現在這一套系統也已經整合在SDK裡,可以進行模擬。

講完這麼多,那究竟要接入騰訊雲SDK的過程是怎麼樣的呢?

其實,經過我們的多輪優化,我們現在接入的過程已變得十分簡單。下圖的8個小框可能僅需要一行程式碼,如果大家想接入的話,可能從我現在講完到待會活動結束,Demo就能跑起來了。可能還有人會覺得說自己音視訊方面的技能比較差,不是很清楚一些房間之類的概念,我們還提供了一個“隨心播”的APP,程式碼是完全開源的,需要的話直接把程式碼Copy過去基本上就能正常使用。

謝謝!

【現場互動環節】
【問】:騰訊雲視訊上對於掛件這一塊有沒有單獨的SDK?
【答】:有的,我們有單獨的渠道來接入、開放。
【問】:直播中的接送禮物、結算這一塊的SDK有沒有公開呢?
【答】:結算的SDK我們沒有做的,因為涉及到使用者的金融還有使用者量等資料,不是很方便去做。一般的直播平臺都會自己去做這一塊,畢竟涉及到結算的問題。