標籤:

聊一聊直播利器,連麥互動背後的混流方案(一)

借莎翁的名言作為開場白:混流,還是不混流,這是個問題。

在連麥互動直播方案中,混流還是不混流,還真是一個需要仔細考量的問題。

這篇文章將會分享即構科技連麥互動直播方案在工程化和高並發運維的過程中總結出來的關於混流的經驗。

什麼叫做混流 ?

在開始討論這個問題之前,讓我們先搞明白什麼叫做混流。

混流,就是把多路音視頻流混合成單流。準確地說,混流應該叫作混音(音頻流)混畫面(視頻流)。

為了表述簡單,我們這裡就簡稱為混流。

混流的過程包括解碼,混流,編碼,和推流這四個步驟。混流這個環節包括做抖動緩衝,目的是把多路流進行畫面對齊和音畫同步,同時通過緩衝對抗網路抖動,以便混合成一路流以後能夠達到良好的效果。

混流本身是一個相對比較耗費計算資源的運算,也是一個比較耗費時間的環節。說它耗費計算資源是因為這個過程涉及到多路流的實時轉碼,這是比較耗費CPU的事情。說它耗費時間,是因為這個環節涉及到抖動緩衝,會造成一定的延遲。實時轉碼本身耗費的時間一般會低於一幀的時間,相對不算顯著;但是根據網路情況的不同,抖動緩衝會消耗大概80毫秒到1秒的時間。在連麥互動直播中,抖動緩衝造成的延遲對觀眾的體驗十分關鍵。

在混流的過程中,難點是如何對抗網路抖動等不確定因素。對於各種不確定因素的處理,是最考驗技術能力的。在網路好的時候,要盡量讓延遲降低,要盡量快地完成處理。在網路不好的時候,又要避免卡頓和不同步等問題。這裡需要有比較好的彈性設計,去滿足對抗網路抖動的要求。要保證無論是網路好,還是網路抖動的情況下,音視頻流的效果都一直處於一種平穩的狀態,而不是跟隨網路抖動而劇烈地抖動,包括延遲也要處於一種比較平滑和穩定的狀態。這是一個技術難點,也是即構科技連麥互動直播方案的核心技術之一。

好了,現在基本搞清楚了混流的概念和難點了。那麼混流這個事情,要不要做?如果要做,在哪裡做?這兩個問題都需要一番權衡。為了作出正確的選擇,我們要先知道每種選擇的優勢和劣勢。

本篇短文將只討論混流還是不混流,在下一篇中將會討論在哪裡混流,敬請期待。

不混流的優勢和劣勢

如果不混流,那麼進行連麥互動直播的時候,多個主播推出來的音視頻流就會分別獨立地被拉到觀眾端播放,這種方式我們叫作拉多流。

不混流的優勢

1)延遲低

不用混流,節省了混流消耗的時間,顯著地降低了延遲。

2)成本低

如果是在服務端進行混流,將會耗費計算資源。考慮到服務端計算資源比較昂貴,如果不用混流,將會節省寶貴的計算資源,顯著地降低成本。雖然拉多流比起拉單流會消耗更多的帶寬成本,但是拉多流節省計算資源成本,整體而言,成本是降低了。

3)靈活性

在觀眾端,業務側可以比較靈活的操控多路流,來滿足多樣化的業務需求。比如畫中畫大小畫面相互切換,和對半分屏畫面左右調換等效果,來提高觀眾端的用戶體驗。

不混流的劣勢

上面提到,拉多流會消耗更多的帶寬。多路流被從服務端推到CDN, 然後觀眾端從CDN拉多流,都會耗費比較多的帶寬成本。對於帶寬成本佔了運營成本顯著百分比的遊戲直播平台來說,的確是需要慎重考量的。

混流的優勢和劣勢

如果混流,那麼進行連麥互動直播的時候,多個主播推出來的音視頻流就會被混合成一路單流被拉到觀眾端播放,這種方式我們叫作拉單流。

混流的優勢

我們要從多個角度看混流的優勢,包括成本,易錄製,易傳播和兼容性。

1)成本

可以分為計算資源成本和帶寬成本。由於預先做混流,因此計算資源成本會上去,但是由於只拉單流,因此帶寬成本會下來。

上面已經對這個議題進行了簡單的討論。

如果混流是在服務端做的話,那麼整體成本還是會上去的。因為服務端的計算資源成本相對比較昂貴,提高的計算資源成本比混流後節省的帶寬成本要多。

如果混流是在推流端做的話,相當於平台把計算成本和帶寬成本轉嫁給推流端(主播端),因此整體成本會降下來,但是服務質量也會降下來,這樣就付出「用戶體驗成本」。

綜合而言,混流並非一定會節省成本。

2)可錄製

如果業務上有錄製音視頻流的需求,以備監管抽查或者觀眾回放的話,那麼需要進行混流。如果不進行混流的話,錄製的時候只能錄製到其中一個路音視頻流,也就是只能看到其中一個主播的畫面。要錄製全畫面的話,必須要進行混流。

3)易傳播

如果業務上有通過音視頻流地址鏈接(HLS)進行轉發傳播的需求,那麼也需要進行混流,因為地址鏈接只會指向一路音視頻流。如果不混流,使用轉發的地址鏈接就只會播放出一個主播的音視頻流。

4)兼容性

還有另外一個情況,直播平台早期已經開發了一個版本的播放器,這個播放器只能播放單流。為了和這個老版本的播放器兼容,也必須要進行混流,才能夠產生單流讓這個播放器播放。

混流的優勢是能夠做全畫面錄製,很便利地轉發傳播,而且兼容直播平台的老系統。運營成本是否能夠降低,主要看混流是在服務端做還是在推流端做。

混流的劣勢

1)高延遲

由於在做混流的過程中,需要做抖動緩衝和實時轉碼等計算處理,將會耗費時間,從而造成額外的延遲。

混流的延遲比不混流的延遲要高。

如果在推流端進行混流,那麼延遲的時間包括實時轉碼處理的時間,抖動緩衝的時間,還有等待其它主播音視頻流的時間。推流端必須要等待其它主播的音視頻流到達以後才能進行混流。

如果在服務端進行混流,那麼延遲的時間包括實時轉碼處理的時間和抖動緩衝的時間。

在推流端混流的延遲比在服務端混流的延遲要高。

2)不靈活

由於觀眾端拉單流觀看,多路音視頻流已經被混合成單流,所以觀眾端無法再靈活地對多流進行操控,比如切換畫中畫的主次畫面。

3)高成本

由於混流需要額外的計算資源,這裡會導致額外的運營成本。

如果混流在服務端進行,混流的成本就由平台承擔。雖然混流後拉單流節省帶寬,但是服務端的計算資源比較昂貴,節省的帶寬成本並沒有額外消耗的計算資源成本多。 整體而言,混流的成本還是比不混流的成本高。

如果混流在推流端進行,混流的成本就被從服務端轉嫁給推流端。推流端需要具備以下條件:

a)推流端(主播端)的手機配置要求比較高,手機的性能要求比較好,要能夠支持混流所需要的計算能力。

b)推流端的上行帶寬有比較高的要求。推流端推兩路流,拉其它主播的多路流。推的兩路流包括:自己原始的音視頻流,和混流以後的音視頻流。拉的多路流是其它主播的音視頻流,要從媒體伺服器上拉取下來。

因為推流端需要有更好的手機配置,更好的上行網路帶寬,所以需要付出更高的成本。

混流的劣勢是高延遲和不靈活。成本方面要看是在服務端混流還是在推流端混流。如果在服務端混流會導致高成本,如果在推流端混流會導致高延遲,付出「用戶體驗成本」。

綜上所述,混流和不混流的方案,各有各的優點。要針對直播平台具體的業務需求和使用場景來決定使用哪個方案。相對來說,不混流的方案有不少突出的優點,比如延遲低,成本低,而且靈活性高等。

即構科技同時提供混流和不混流的方案,靈活而且全面的滿足各種類型的直播平台的業務需求。在即構科技的實踐中,發現不混流的方案更加受到主流客戶的歡迎,效果是得到了市場證明的。使用不混流方案的客戶包括花椒和栗子直播。

經過一番討論,我們回過頭來發現:混流,還是不混流,這還是個問題。

即構科技在服務一線直播客戶的過程中總結了混流和不混流方案的各種優勢和劣勢。根據這些經驗來衡量採用混流,還是不混流的方案,做出來的決定應該更加靠譜和接地氣。

做完混流,還是不混流的決定以後,如果要混流,那麼在哪裡做混流?是在推流端還是服務端?這一點將會在下一篇中毫無保留地詳細討論,分享即構科技的技術經驗。

可繼續關注即構科技帶來的技術乾貨分享系列的下篇:連麥互動直播中的混音混畫面方案:推流端 VS 服務端。

推薦閱讀:

如果用快手直播的形式打開《仙劍奇俠傳》劇情會是什麼樣子?
熊貓tv的主播有哪些好看的?
如何看待遊戲主播盧本偉(五五開)被全網封殺?
使用flv.js做直播
阿里云:移動直播問答技術難點及解決方案

TAG:直播 |