可以用WebRTC來做視頻直播嗎?


https://www.zhihu.com/question/25497090

 
作者:韋易笑
鏈接:https://www.zhihu.com/question/25497090/answer/72397450
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
//--------------------------------------------------------------------------------------------
作者:劉津瑋
鏈接:https://www.zhihu.com/question/25497090/answer/43395462
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。

我所在的項目用這個技術兩年多了,先說結論: 完全可以!

但是,凡事總有但是, 也沒那么簡單。你以為調用幾個Chrome的API就能直播了?too simple

樓上 米小嘉 回答中的猜想是不正確的,WebRTC用的不是插件,是Chrome自帶的功能,是原生js的API,也沒有什么瀏覽器自帶的插件。
樓上 煎餅果子社長 的方法也不對,WebRTC的API不僅僅是給你獲取本地信源的,所謂RTC是real time communication的縮寫,自然這套API是帶傳輸功能的。所以獲取圖像信源之后不應該用websocket發送圖像數據,而是直接用WebRTC的通信相關API發送圖像和聲音(這套API是同時支持圖像和聲音的)數據。

所以,正確的方法是什么呢?
1、你得有一個實現了WebRTC相關協議的客戶端。比如Chrome瀏覽器。
2、架設一個類似MCU系統的服務器。(不知道MCU是什么?看這: MCU(視頻會議系統中心控制設備)

第一步,用你的客戶端,比如Chrome瀏覽器,通過WebRTC相關的媒體API獲取圖像及聲音信源,再用WebRTC中的通信API將圖像和聲音數據發送到MCU服務器。
第二步,MCU服務器根據你的需求對圖像和聲音數據進行必要的處理,比如壓縮、混音等。
第三步,需要看直播的用戶,通過他們的Chrome瀏覽器,鏈接上你的MCU服務器,並收取服務器轉發來的圖像和聲音流。

先說步驟一,如果你只是做着玩玩,完全可以直接用Chrome瀏覽器做你的直播客戶端。把攝像頭麥克風連上電腦之后,Chrome可以用相關的js的API獲取到攝像頭和麥克風的數據。缺點就是如果長時間直播,Chrome的穩定性堪憂,我不是嚇唬你。我們項目的經驗是,chrome這樣運行24小時以上內存占用很厲害,而且容易崩潰。

第二步,你可能要問,WebRTC可以直接在瀏覽器之間P2P地傳輸流,為什么還要有中轉的MCU服務器?因為Chrome的功能很弱,視頻的分辨率控制、多路語音的混音都做不了,所以需要MCU參與。最重要的是,Chrome同時給6個客戶端發視頻流就很消耗資源了,所以你如果有超過10個用戶收看的話,Chrome很容易崩潰。

第三步就比較簡單了,沒什么好說的。

最后最后,還是老話題,兼容性。你可以查一下現在支持的瀏覽器有款,IE據說支持,但是我們研究了一下好像他用的協議和Chrome不一樣,不能互通。firefox和opera情況也不是很理想。

-------------------------2015年11月17日 更新--------------------------
韋易笑 的答案中說“10人以內使用,超過10人就掛了”。從我個人的經驗來看,我認為WebRTC並沒有那么不堪。我不知道他是用什么樣的方案,但是我原來的那個項目,13年做的結果是 1人廣播,39人收看,在一台i3 + 4G + Centos6.4 mini的機器上跑MCU,連續運行48小時沒有出現問題。CPU的使用率大概在60%左右,內存使用率是多少我記不清了,但是印象中不高,而且比較穩定。能不能支持更多的客戶端我們沒有嘗試,因為當時已經滿足我們的需求了。
//--------------------------------------------------------------------------------------------
別迷信 WebRtc,WebRtc只適合小范圍(8人以內)音視頻會議,不適合做直播:

1. 視頻部分:vpx的編碼器太弱,專利原因不能用264,做的好的都要自己改264/265代碼才行。
2. 音頻部分:音頻只適合人聲編碼,對音樂和其他非人聲的效果很糟糕。
3. 網絡部分:對國內各種奇葩網絡適應性太低,網絡糟糕點或者人多點就卡。
4. 信號處理:同時用過 GIPS和 WebRTC 進行對比,可以肯定目前開源的代碼是GIPS閹割過的。
5. 使用規模:10人以內使用,超過10人就掛了,WebEx方案支持的人數都比 RTC 強。

正確的方法是啥呢?
------------------------- 分割線 -------------------------
讓粉絲們來看直播,如果同時粉絲數>10人,那么不關 WebRtc 鳥事,服務器請使用 nginx rtmp-module架設,架設好了用 ffmpeg 命令行來測試播攝像頭。主播客戶端請使用rtmp進行推流給rtmp-module,粉絲請使用 rtmp / flv + http stream 進行觀看,PC-web端的粉絲請使用 Flash NetStream來觀看,移動 web端的粉絲請使用 hls / m3u8 來觀看。

如果你試驗成功要上線了,出現壓力了,那么把nginx分層(接入層+交換層),稍微改兩行代碼,如果資金不足以全國部署服務器,那么把 nginx-rtmp-module 換為 cdn 的標准直播服務,也可以直接調過 nginx,一開始就用 cdn 的直播服務,比如網宿(斗魚的直播服務提供商)。

這是正道,別走彎路了
 
//--------------------------------------------------------------------------------------
作者:沈園舊友
鏈接:https://www.zhihu.com/question/25497090/answer/72527818
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。

WebRTC 的初衷和優勢是 Browser-to-Browser 的,它是 Web 端音視頻實時通信。考慮到需要實現 live broadcast,所以 WebRTC 幾乎不靠譜,頂多在 broadcaster 和 server 上實現協議棧。server 實現各種 management,比如 room server;如果不在 server 端轉發,而是以 broadcaster 為中心進行多個 p2p 連接,那要實現 signaling server, ice server,供 browser 之間連接,而且一個 broadcaster client 能力有限所以支持不了太多連接(基本上是個位數);如果要在 server 端轉發(幾乎是必需),那要實現 stream server,接收 broadcaster 的 WebRTC 的 rtp 包,流媒體處理(考慮下 gstreamer ?),錄制成文件或 rtmp 發送到各個 participants。大系統可以考慮用多台 stream server,cdn + p2p 結合,於是要再實現個 server 搜集和維護各個 peer 的網絡信息進行分發調度……其他的 client 端問題無非是網絡傳輸協議和音視頻編解碼問題,注意統一和兼容。Chrome 的 WebRTC 實現已經很完整,有人提到回聲消除,這在 VoiceEngine 里有實現,是用的 NetEQ 算法,源自 GIPS,還有降噪、靜音檢測等功能。VoiceEngine 十分強大,我想剝出來自己使用(其實不是我想)。
 
//--------------------------------------------------------------------------------------
補充一點,直播應該是流媒體處理及利用上早就有的概念。WebRTC只是提供了一種可以替換現有的直播系統中的流媒體傳輸及處理的框架。

同時,其它答案也提到了,做直播或者視頻內的服務,很多都會牽涉到對流媒體的Mix處理及轉發。在這里我需要提醒大家,Video相關的mix在webrtc的底層框架中是沒有的, 這里有很大的坑,不是那么簡單就能填起來的,請大家在做產品預言的時候深入考慮下哦:),Audio相關的Mix倒是在webrtc的底層音頻相關的框架中已經有了,很容易就可以被大家拿來使用(雖然chrome啥的,都是只用來做p2p)。

用WebRTC來實現一個支持直播的服務是完全可行的,但是,要做到直播的交互性,以及大規模的並發(比如一個主播,數以千計的觀眾)這是做直播最需要考慮的問題。WebRTC在這里點上只是提供了一個流媒體的傳輸途徑包括音頻、視頻編解碼的接入等,這些都是可以借鑒或者使用它來作為實現直播的一個部分。但是,只用webrtc,你也只能做一個簡單的玩具,做產品的話,請更多考慮產品的應用場景,用戶量,帶寬需求,服務器搭設及運維。

作者:魯強
鏈接:https://www.zhihu.com/question/25497090/answer/44968159
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
 
 
 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com