開發實時視頻直播平臺的技術要點

 該篇文章轉自:http://www.52im.net/thread-475-1-1.html

主要列舉了實現視頻直播平臺過程中的技術要點和難點。閱讀長長見識

------------------------分界線------------------------------------------

首先是一個問題,開源WebRTC能做實時視頻直播嗎?

首先,得有一個實現了WebRTC相關協議的客戶端。比如Chrome瀏覽器。然後架設一個類似MCU系統的服務器。

大概的實現步驟如下:

  • 第一步,用你的客戶端,比如Chrome瀏覽器,通過WebRTC相關的媒體API獲取圖像及聲音信源,再用WebRTC中的通信API將圖像和聲音數據發送到MCU服務器。
  • 第二步,MCU服務器根據你的需求對圖像和聲音數據進行必要的處理,比如壓縮、混音等。
  • 第三步,需要看直播的用戶,通過他們的Chrome瀏覽器,鏈接上你的MCU服務器,並收取服務器轉發來的圖像和聲音流。
  • 第四步,檢查瀏覽器的兼容性。IE用的協議和Chrome不一樣,不能互通。firefox和opera情況也不是很理想

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

-------------------------分界線-----------------------------------

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

需要了解:

  • 攝像頭採集;
  • 音視頻編解碼;
  • 流媒體協議;
  • 音視頻流推送到流媒體服務器;
  • 流媒體網絡分發;
  • 用戶播放器;
  • 音視頻同步;
  • 網絡延遲自適應;
  • 需要錄製,多種視頻文件的格式和封裝;
  • 語言:C、C++、html、php、mysql......
  • 開發環境:嵌入式,Linux,Windows,Web......

解決辦法有3種:

  • 用CDN加速;
  • 花錢自己架服務器;
  • 或者用別人的雲服務。

        用CDN加速,可以儘量減少延遲。目前業內水準來看,視頻延遲都在3-6秒之間。也就是在視頻直播時,你看到的是幾秒以前的畫面。
        自己架服務器,如果你部署的數據中心不夠多,那麼遇上跨網、跨省的傳輸,還是得用CDN加速。那麼爲了儘可能降低延遲,你就需要在全國各省市都部署數據中心,來解決跨網、跨省的傳輸。這種解決方案,相較CDN,非常昂貴。
        用雲服務的話,就是別人把服務器給你架好了,你只要傻瓜式的用就行了。

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

可以分爲:

  • 採集:iOS是比較簡單的,Android則要做些機型適配工作(聲網Agora.io目前適配了4000+Android機型)。PC最麻煩各種奇葩攝像頭驅動,出了問題特別不好處理,建議放棄PC只支持手機主播,目前幾個新進的直播平臺都是這樣的。
  • 前期處理:現在直播美顏已經是標配了,80%的主播沒有美顏根本沒法看。美顏算法需要懂圖像處理算法的人,沒有好的開源實現,要自己參考論文去研究。算法設計好了還要優化,無論你打算用CPU還是GPU優化,算法優化本身也需要專業知識支持。GPU雖然性能好,但是也是有功耗的。GPU佔用太高會導致手機發燙,而手機發燙會導致攝像頭採集掉幀,iPhone6尤其明顯。因爲iPhone6的CPU和前置攝像頭很近,在算法開發、算法優化、效果平衡上需要大量的開發調試工作。而這一切都是需要經驗支撐。
  • 編碼:如果你要上720p,肯定要採用硬編碼。軟編碼720p完全沒希望,硬件編碼不靈活。兼容性也有問題。如何適應紛繁複雜的網絡和紛繁複雜的上下行設備?安卓和芯片的坑,開發過的人都知道。那有人問,要求不高,上軟編碼低分辨率360p行不行?就算上低分辨率,軟編碼還是會讓CPU發燙,CPU過熱燙到攝像頭,長期發燙不僅直接反應是費電。既然是手機直播,插着電源和充電器實在說不過去吧。還有,CPU發燙會降頻,怎麼辦?這還是隻說性能方面。和前處理隻影響圖像質量和功耗不同,視頻編解碼技術還關聯成本計算和網絡對抗。考慮性能、功耗、成本、網絡這四個之後你編碼的碼率、幀率、分辨率。軟硬件開發該如何選擇?
  • 傳輸:第三方服務商
  • 解碼:如果你用硬解碼,一定要做容錯處理,一定要做適配。突然一個crash導致手機重啓不好吧。安卓的硬解碼,不說了。如果你加了網絡目前手機的硬解碼還不一定支撐用軟解碼,功耗發熱的問題又來了。
  • 渲染:爲什麼手機明明解碼出好多幀數據。就是渲染不出來。爲什麼畫面就是不同步。

        以爲完了?
        還有音頻呢。mic資源被搶佔怎麼辦?爲什麼錄音線程老是出問題?音頻的前處理更復雜。什麼時候開啓三A引擎噪聲抑制?回聲消除?增益控制?爲什麼AAC比Opus質量好?什麼是aac,he-aac,heaacv2?如何選擇?要不要加混響?播放和錄音模式該如何選擇?如果你想互動回聲消除就要適配N多機型。
        以上是媒體模塊,還有信令控制,登錄、鑑權、權限管理、狀態管理等等,各種應用服務,消息推送,聊天,禮物系統,支付系統,運營支持系統,統計系統等。
        後臺還有數據庫,緩存,分佈式文件存儲,消息隊列,運維繫統等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章