1. 程式人生 > >淺談開發實時視訊直播平臺的技術要點

淺談開發實時視訊直播平臺的技術要點

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

前言


現在大大小小的公司,甚至個人開發者,都想開發自己的直播網站或App,本文會幫你理清,開發視訊直播平臺,你需要注意哪些技術要點。

開源WebRTC能做實時視訊直播嗎?


你以為呼叫幾個Chrome的API就能直播了?

WebRTC用的不是外掛,是Chrome自帶的功能,是原生js的API,也沒有什麼瀏覽器自帶的外掛。獲取影象信源之後不應該用websocket傳送影象資料,而是直接用WebRTC的通訊相關API傳送影象和聲音(這套API是同時支援影象和聲音的)資料。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

最後:如果按照這個方法折騰完了,你認為會得到什麼結果呢?1人廣播,39人收看,在一臺i3 + 4G + Centos6.4 mini的機器上跑MCU,連續執行48小時沒有出現問題,CPU的使用率大概在60%左右。跟現在動輒上十萬的直播相比,是不是弱爆了。



所以,別迷信 WebRTC,WebRTC只適合小範圍(8人以內)音視訊會議,不適合做直播。

開發實時視訊直播需要哪些技術?


自負前端開發人員會以為:“熟悉HTML5、1個人大約7個工作日內就可以開發出來了”。面對這樣的想法,只有一句話:少年,謙虛點。

640?wx_fmt=png


如果你天賦異稟,一個人解決了以上技術問題。那麼,你還需要解決傳輸問題。傳輸好壞,也就是視訊是否延遲、卡頓,取決於網路條件好壞。而公共互利網複雜的網路環境就不用說了吧。在家玩遊戲不卡,看視訊就卡。聊QQ鬥地主無壓力,看視訊就卡。這怎麼辦?

公眾號推薦:

640?wx_fmt=jpeg


解決辦法有3種:

  • 用CDN加速;

  • 花錢自己架伺服器;

  • 或者用別人的雲服務。


視訊訊號從現場出發,到達分散在全國各地的觀眾,需要經過資料中心和各級節點的快取加速,一路上馬不停蹄,可以和楊貴妃的荔枝媲美。而訊號在一路上各個環節所需要的時間總和,就是你看到的延遲。



用CDN加速,可以儘量減少延遲。目前業內水準來看,視訊延遲都在3-6秒之間。也就是在視訊直播時,你看到的是幾秒以前的畫面。

自己架伺服器,如果你部署的資料中心不夠多,那麼遇上跨網、跨省的傳輸,還是得用CDN加速。那麼為了儘可能降低延遲,你就需要在全國各省市都部署資料中心,來解決跨網、跨省的傳輸。這種解決方案,相較CDN,非常昂貴。

用雲服務的話,就是別人把伺服器給你架好了,你只要傻瓜式的用就行了。為防止廣告嫌疑,有關實時直播雲,現在有很多服務商提供這一塊,具體情況請自行了解哦。

當然,不管用哪種方式,請綜合權衡利弊,找到適合自已的方案就是最好的方案。

下面,開始講,視訊直播的究竟需要哪些環節,應該如何處理?

開發實時視訊直播的流程是什麼?

640?wx_fmt=png

- 前期處理:現在直播美顏已經是標配了,80%的主播沒有美顏根本沒法看。美顏演算法需要懂影象處理演算法的人,沒有好的開源實現,要自己參考論文去研究。演算法設計好了還要優化,無論你打算用CPU還是GPU優化,演算法優化本身也需要專業知識支援。GPU雖然效能好,但是也是有功耗的。GPU佔用太高會導致手機發燙,而手機發燙會導致攝像頭採集掉幀,iPhone6尤其明顯。因為iPhone6的CPU和前置攝像頭很近,在演算法開發、演算法優化、效果平衡上需要大量的開發除錯工作。而這一切都是需要經驗支撐。

- 編碼:如果你要上720p,肯定要採用硬編碼。軟編碼720p完全沒希望,硬體編碼不靈活。相容性也有問題。如何適應紛繁複雜的網路和紛繁複雜的上下行裝置?安卓和晶片的坑,開發過的人都知道。那有人問,要求不高,上軟編碼低解析度360p行不行?就算上低解析度,軟編碼還是會讓CPU發燙,CPU過熱燙到攝像頭,長期發燙不僅直接反應是費電。既然是手機直播,插著電源和充電器實在說不過去吧。還有,CPU發燙會降頻,怎麼辦?這還是隻說效能方面。和前處理隻影響影象質量和功耗不同,視訊編解碼技術還關聯成本計算和網路對抗。考慮效能、功耗、成本、網路這四個之後你編碼的位元速率、幀率、解析度。軟硬體開發該如何選擇?

公眾號推薦:

640?wx_fmt=jpeg


- 傳輸:自己做不現實,交給第三方服務商吧。

- 解碼:如果你用硬解碼,一定要做容錯處理,一定要做適配。突然一個crash導致手機重啟不好吧。安卓的硬解碼,不說了。如果你加了網路目前手機的硬解碼還不一定支撐用軟解碼,功耗發熱的問題又來了。

- 渲染:為什麼手機明明解碼出好多幀資料。就是渲染不出來。為什麼畫面就是不同步。

好了,以為完了吧?

還有音訊呢。mic資源被搶佔怎麼辦?為什麼錄音執行緒老是出問題?音訊的前處理更復雜。什麼時候開啟三A引擎噪聲抑制?回聲消除?增益控制?為什麼AAC比Opus質量好?什麼是aac,he-aac,heaacv2?如何選擇?要不要加混響?播放和錄音模式該如何選擇?如果你想互動回聲消除就要適配N多機型。

以上是媒體模組,還有信令控制,登入、鑑權、許可權管理、狀態管理等等,各種應用服務,訊息推送,聊天,禮物系統,支付系統,運營支援系統,統計系統等。

後臺還有資料庫,快取,分散式檔案儲存,訊息佇列,運維繫統等。

小結


以上技術要點的小結,確實能說明開發一個能用於生產環境的實時視訊直播平臺確非易事,跟IM裡傳統的實時音視訊一樣,這樣的技術都是音視訊編解碼+網路傳輸技術的綜合應用體,沒有一定的技術積累,確實有很多坎需要邁過去。。。

640?wx_fmt=jpeg