手機直播連麥技術分析

直播火了,連麥直播也火了,那麼說明是直播,連麥直播是什麼。

手機直播連麥功能的特點,我們按下面三部分來聊一聊手機直播和直播連麥:

  • 手機直播連麥功能的特點
  • 人物畫像和設計思維
  • 一個有趣的連麥功能交互建議

手機直播連麥功能的特點

體驗了鬥魚、NOW直播、美拍直播、淘寶直播、新浪直播、映客、me直播等直播平臺、發現只有映客和me直播推出了手機直播的連麥功能。
我們從以下三點來展開分析直播連麥的特點:
  1. 連麥功能的權限
  2. 連麥人數和顯示位置
  3. 連麥交互流程
連麥權限

ME直播的連麥功能是沒有權限設定的,所有的主播和觀衆都可以進行連麥,連麥的icon在直播頁面的明顯位置,很容易被發現,因此在ME直播的很多房間裏,都可以看到主播與粉絲連線的畫面。但看多了你會發現,能跟主播連線互動的要麼是其他主播,要麼是送禮物多的粉絲。

而映客的連麥功能是有權限設定的,並且門檻比較高,要求百萬映票、等級80以上以及紫V認證的用戶才能進行連線互動。這從某個方便來說對於質量上有了提高。

連麥人數和顯示位置

ME直播只能單人連線,位置在屏幕右下方,相對不怎麼遮擋視線。映客可以單人連線,也可以同時連線2個人。至於這個技術怎麼實現的,後面會詳細聊到。

連麥交互流程

ME直播的交互流程是每個人都可以體驗到的,分爲三個視角:發起連線人視角、主播視角、普通觀衆視角。通過不同的分級和角色實現不同的角色連接。

說了這麼多,那這種技術具體怎麼做的呢,這是我們做技術的需要關注的。首先來看一下直播的原理圖:

正如上圖所示,整個直播流程分爲以下幾個關鍵步驟:

1、主播客戶端,將本地採集的視頻推送到CDN;

2、CDN對視頻流進行緩存以及轉發;

3、觀衆客戶端,拉取CDN中緩存視頻流進行播放;

這其中最核心的就是CDN了,那神馬事CDN呢?

CDN技術原理

CDN的全稱爲Content Delivery Network,即內容分發網絡,是一個策略性部署的整體系統,主要用來解決由於網絡帶寬小、用戶訪問量大、網點分佈不均勻等導致用戶訪問網站速度慢的問題。這中間就有了很多的CDN節點,簡單一點理解就相當於我們開始學習計算機選擇網絡。具體實現是通過在現有的網絡中,增加一層新的網絡架構,將網站的內容發佈到離用戶最近的網絡節點上,這樣用戶可以就近獲取所需的內容,解決之前網絡擁塞、訪問延遲高的問題,提高用戶體驗。



上圖中,不同的流媒體走的節點和協議做了區分,網絡擁塞減少,訪問延遲降低,帶寬得到良好的控制等等。 CDN直播中常用的流媒體協議包括RTMP,HLS,HTTP FLV等。

RTMP(Real Time Messaging Protocol)是基於TCP的,由Adobe公司爲Flash播放器和服務器之間音頻、視頻傳輸開發的開放協議。 HLS(HTTP Live Streaming)是基於HTTP的,是Apple公司開放的音視頻傳輸協議。 HTTP FLV則是將RTMP封裝在HTTP協議之上的,可以更好的穿透防火牆等。

CDN的常用架構

CDN架構設計比較複雜。不同的CDN廠商,也在對其架構進行不斷的優化,所以架構不能統一而論。這裏只是對一些基本的架構進行簡單的剖析。
CDN主要包含:源站、緩存服務器、智能DNS、客戶端等幾個主要組成部分。

源站:是指發佈內容的原始站點。添加、刪除和更改網站的文件,都是在源站上進行的;另外緩存服務器所抓取的對象也全部來自於源站。對於直播來說,源站爲主播客戶端。

緩存服務器:是直接提供給用戶訪問的站點資源,由一臺或數臺服務器組成;當用戶發起訪問時,他的訪問請求被智能DNS定位到離他較近的緩存服務器。如果用戶所請求的內容剛好在緩存裏面,則直接把內容返還給用戶;如果訪問所需的內容沒有被緩存,則緩存服務器向鄰近的緩存服務器或直接向源站抓取內容,然後再返還給用戶。

智能DNS:是整個CDN技術的核心,它主要根據用戶的來源,以及當前緩存服務器的負載情況等,將其訪問請求指向離用戶比較近且負載較小的緩存服務器。通過智能DNS解析,讓用戶訪問同服務商下、負載較小的服務器,可以消除網絡訪問慢的問題,達到加速作用。

客戶端:即發起訪問的普通用戶。對於直播來說,就是觀衆客戶端,例如手機客戶端,PC客戶端。

用圖表示如下:


整個流程描述如下:

主播開始進行直播,向智能DNS發送解析請求; 智能DNS返回最優CDN節點IP地址; 主播端採集音視頻數據,發送給CDN節點,CDN節點進行緩存等處理; 觀衆端要觀看此主播的視頻,向智能DNS發送解析請求; 智能DNS返回最優CDN節點IP地址; 觀衆端向CDN節點請求音視頻數據; CDN節點同步其他節點的音視頻數據; CDN節點將音視頻數據發送給觀衆端;

採用CDN的缺點

大概瞭解了CDN的技術原理後,我們在做直播選型時,還需要了解一個方案優缺點。接下來,我們來分析一下CDN的短板。
總結一下主要有如下短板:

播放延時(網絡延時)

網絡延時這裏指的是從主播端採集,到觀衆端播放,這之間的時間差。這裏不考慮主播段採集對視頻進行編碼的時間,以及觀衆端觀看對視頻進行解碼的時間,僅考慮網絡傳輸中的延時。例如說下圖中的網絡延時:

網絡抖動

網絡抖動,是指數據包的到達順序、間隔和發出時不一致。比如說,發送100個數據包,每個包間隔1s發出。結果第27個包在傳輸過程中遇到網絡擁塞,造成包27不是緊跟着26到達的,而是延遲到87後面才達。在直播中,這種抖動的效果實際上跟丟包是一樣的。因爲你不能依照接收順序把內容播放出來,否則會造成失真。網絡抖動,會造成播放延時對應增大。如果網絡中抖動較大,會造成播放卡頓等現象。這個之前在雲計算上都不是什麼難事。

網絡丟包

CDN直播中用到的RTMP、HLS、HTTP FLV等協議都是在TCP的基礎之上。TCP一個很重要的特性是可靠性,即不會發生數據丟失的問題。爲了保證可靠性,TCP在傳輸過程中有3次握手,見下圖。首先客戶端會向服務端發送連接請求,服務端同意後,客戶端會確認這次連接。這就是3次握手。接着,客戶端就開始發送數據,每次發送一批數據,得到服務端的“收到“確認後,繼續發送下一批。TCP爲了保證傳到,會有自動重傳機制。如果傳輸中發生了丟包,沒有收到對端發出的“收到”信號,那麼就會自動重傳丟失的包,一直到超時。
由於互聯網的網絡狀況是變化的,以及主播端的網絡狀況是無法控制的。所以當網絡中丟包率開始升高時,重傳會導致延時會不斷增大,甚至導致不斷嘗試重連等情況,這樣不能有效的緩存,嚴重情況下會導致觀衆端視頻無法觀看。

連麥

直播中,主播如果要與用戶交互,常見有兩種方式:
第一種方式:文字,這種比較常見,實現也比較簡單,這裏不再進行分析;這種比較簡單
第二種方式:連麥,這樣主播可以面對面與觀衆進行交互,增加了互動性;這種最網絡的要求更高。
所以爲了解決上面的問題,出現了RTMP協議。
RTMP是目前主播中最常用的協議,使用RTMP協議,可以實現最簡單的一種連麥方式,當有連麥者時,則主播端和連麥者端,都分別推一路RTMP流到CDN,CDN再將這兩路RTMP流發送給觀衆端,觀衆端將兩路RTMP流合成爲一個畫面。

解決連麥的第二種方式是:
主播端與連麥者之間使用P2P方式進行交互,然後主播端將自己和連麥者的視頻進行合併,再推到CDN上,CDN再發送給觀衆端。

不過P2P在某些網絡下無法穿透,有些觀衆根本無法與主播端進行交互; 主播端需要上傳兩路視頻:一路P2P與連麥者進行交互,一路使用RTMP推到CDN。還要下載一路視頻:連麥者P2P發送過來的交互數據。所以主播端要求帶寬需要較高,網絡較差時無法進行主播 主播端要進行多路視頻的編碼、解碼,要求主播端設備配置比較高,較差的設備也無法進行主播; 只能支持一個連麥者,不能支持多個連麥者; 由於主播端和連麥者經過CDN合併成一路,因此,不能實現主播端和連麥者視頻大小窗口切換。

還有一種方式就是通過CDn中轉:

是主播和連麥者都將視頻推送到CDN中,然後CDN內部對這幾路視頻進行合圖,再將其發送給觀衆端。


主播和連麥者各路視頻都使用RTMP推送到CDN,可以保證延時較小; 由於CDN進行視頻合圖和發送,所以主播不需要很高的帶寬; 由於CDN進行視頻合圖,所以主播的設備不需要配置非常高; 沒有聲音干擾問題; 可以支持多個連麥者連麥;

不過,CDN需要進行視頻的合圖,需要額外開發工作,並且邏輯比較複雜; CDN需要進行視頻的合圖,需要消耗較高服務器資源; CDN合圖後的佈局難控制; 所以對CDN要求奇高;

在實際的網絡直播中,我們常常會加入直播質量的監控,這裏做了完備的數據上報及分析系統,基本上涵蓋了各種關鍵性指標,既能反應直播的各種性能方便優化,同時也能輔助定位各種問題;這個是播放端的整體統計數據,下行帶寬、卡頓率、緩衝大小、CPU佔用率,這是一個宏觀統計數據,反應了當前直播觀看端的一個質量。有了直播質量監控,更精細一些我們可以做一些運營分析。

基於上面的問題,有人提出了基於SD-RTN的解決方案,有興趣的可以去搜一下。


客戶端均通過UDP連接SD-RTN(Agora Global Network),通過SD-RTN的就近接入策略,讓使用者就近接入質量最好的數據節點,通過Agora Global Network的軟件定義優化路由,經過傳輸延遲和質量優化的最優路徑,自動避免網絡擁塞,並規避骨幹網絡故障的影響。

採用SD-RTN做直播有如下特點:

1、可以支持更多的主播交互,目前支持7人視頻交互,100人語音交互。
2、當有觀衆連麥時,其他觀衆端收到的多路視頻,觀衆端可以動態選擇佈局;
3、聲網Agora.io會將直播視頻推送到CDN,其他觀衆(網頁端等)可以直接觀看;
4、當有觀衆連麥時,聲網Agora.io會將視頻合圖後推送到CDN,其他觀衆(網頁端等)可以觀看到連麥者與主播的互動;
5、在經過RTMP推流前的觀衆端,可以進行大小流切換,自主選擇視頻大小窗口的切換。


 


發佈了1002 篇原創文章 · 獲贊 2000 · 訪問量 414萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章