直播火了,連麥直播也火了,那麼說明是直播,連麥直播是什麼。
手機直播連麥功能的特點,我們按下面三部分來聊一聊手機直播和直播連麥:
手機直播連麥功能的特點
人物畫像和設計思維
一個有趣的連麥功能互動建議
體驗了鬥魚、now直播、美拍直播、淘寶直播、新浪直播、映客、me直播等直播平台、發現隻有映客和me直播推出了手機直播的連麥功能。
我們從以下三點來展開分析直播連麥的特點:
連麥功能的權限
連麥人數和顯示位置
連麥互動流程
連麥權限
me直播的連麥功能是沒有權限設定的,所有的主播和觀衆都可以進行連麥,連麥的icon在直播頁面的明顯位置,很容易被發現,是以在me直播的很多房間裡,都可以看到主播與粉絲連線的畫面。但看多了你會發現,能跟主播連線互動的要麼是其他主播,要麼是送禮物多的粉絲。
而映客的連麥功能是有權限設定的,并且門檻比較高,要求百萬映票、等級80以上以及紫v認證的使用者才能進行連線互動。這從某個友善來說對于品質上有了提高。
me直播隻能單人連線,位置在螢幕右下方,相對不怎麼遮擋視線。映客可以單人連線,也可以同時連線2個人。至于這個技術怎麼實作的,後面會詳細聊到。
me直播的互動流程是每個人都可以體驗到的,分為三個視角:發起連線人視角、主播視角、普通觀衆視角。通過不同的分級和角色實作不同的角色連接配接。
說了這麼多,那這種技術具體怎麼做的呢,這是我們做技術的需要關注的。首先來看一下直播的原理圖:
正如上圖所示,整個直播流程分為以下幾個關鍵步驟:
1、主播用戶端,将本地采集的視訊推送到cdn;
2、cdn對視訊流進行緩存以及轉發;
3、觀衆用戶端,拉取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主要包含:源站、緩存伺服器、智能dns、用戶端等幾個主要組成部分。
源站:是指釋出内容的原始站點。添加、删除和更改網站的檔案,都是在源站上進行的;另外緩存伺服器所抓取的對象也全部來自于源站。對于直播來說,源站為主播用戶端。
緩存伺服器:是直接提供給使用者通路的站點資源,由一台或數台伺服器組成;當使用者發起通路時,他的通路請求被智能dns定位到離他較近的緩存伺服器。如果使用者所請求的内容剛好在緩存裡面,則直接把内容返還給使用者;如果通路所需的内容沒有被緩存,則緩存伺服器向鄰近的緩存伺服器或直接向源站抓取内容,然後再返還給使用者。
智能dns:是整個cdn技術的核心,它主要根據使用者的來源,以及目前緩存伺服器的負載情況等,将其通路請求指向離使用者比較近且負載較小的緩存伺服器。通過智能dns解析,讓使用者通路同服務商下、負載較小的伺服器,可以消除網絡通路慢的問題,達到加速作用。
用戶端:即發起通路的普通使用者。對于直播來說,就是觀衆用戶端,例如手機用戶端,pc用戶端。
用圖表示如下:
整個流程描述如下:
主播開始進行直播,向智能dns發送解析請求; 智能dns傳回最優cdn節點ip位址; 主播端采集音視訊資料,發送給cdn節點,cdn節點進行緩存等處理; 觀衆端要觀看此主播的視訊,向智能dns發送解析請求; 智能dns傳回最優cdn節點ip位址; 觀衆端向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推流前的觀衆端,可以進行大小流切換,自主選擇視訊大小視窗的切換。