寫這篇文章首先是想給本身一個總結、整理,還有就是給那些 沒有特別明白直播是怎麼回事的人一點 思路前端
最近公司想要作pc端直播,做爲一個自認爲很菜的前端實在是不知從何下手,因此只能用國人最愛的百度,搜索了不少資料、文章,得出的第一個結論就是 直播很燒錢,可是燒不燒錢 這個我可能管不了,我也沒有辦法管,因此只能繼續探索個人直播之路,根據個人查找有了一些結論,固然這些結論可能多事別人說過的 ,我拿來用一下,總結一下,還望各位見諒,如下有一些都是我本身的看法。 web
首先直播分爲兩個端,主播端和看直播的一端(這是我本身的理解)算法
主播端確定是錄視頻,將錄的視頻傳給後臺編程
看直播的一端 是從後臺將視頻拉取過來 播放 淡然 還有什麼 評論、送禮物等等。瀏覽器
因此 總結一下 官方的說法就是 視頻直播能夠分爲 採集、前處理、編碼、傳輸、解碼、渲染 這幾個環節。ide
採集---通常都是移動端,IOS比較簡單,機型比較贊成,Android則相對複雜,由於有不少機型,須要作適配,PC最麻煩 ,各類不同的攝像頭,麥克風,比較凌亂 很差處理。優化
前處理 ---就是美顏什麼的 ,得讓主播好看,好多大牛都說美顏算法要用到GPU編程(這個仍是不太瞭解)
編碼
編碼 --- 應該是將錄的視頻作一下處理(還不太瞭解,自我理解是這樣)spa
傳輸 --- 這個很貴 涉及到流量什麼的 視頻
解碼 --- 應該是觀看直播時,將視頻拉取過來要作一些處理(還不太瞭解,自我理解是這樣)
渲染 --- 播放視頻時 音畫同步
直播包括 推流和拉流
目前web上主流的視頻直播方案有HLS和RTMP,移動端主要以HLS爲主(HLS存在延遲性問題,也能夠藉助video.jscaiyong RTMP),PC端主要用RTMP 爲主 實時性較好(這段話是從別人的博客裏看到的 可是忘記是誰了 做者看到 見諒)
下面說一下 推送協議
1.RTMP(Real Time Messaging Protocol)實時消息傳輸協議
該協議基於TCP
優勢:
CDN支持良好,主流的CDN廠商都支持
協議簡單,在各平臺上實現容易
缺點:
基於TCP,傳輸成本高,在弱網環境丟包率高的狀況下問題顯著
不支持瀏覽器**
Adobe私有協議,Adobe已經再也不更新
2.WebRTC 名稱源自網頁即時通訊(英語:Web Real-Time Communication)的縮寫
是一個支持網頁瀏覽器進行實時語音對話或視頻對話的API。它於2011年6月1日開源並在Google、Mozilla、Opera支持下被歸入萬維網聯盟的W3C推薦標準。
優勢
W3C標準,主流瀏覽器支持程度高
Google在背後支撐,並在各平臺有參考實現
底層基於SRTP和UDP,弱網狀況優化空間大
能夠實現點對點通訊,通訊雙方延時低
缺點
ICE,STUN,TURN傳統CDN沒有相似的服務提供
3.基於UDP的私有協議
有些直播應用會使用UDP作爲底層協議開發本身的私有協議,由於UDP在弱網環境下的優點經過一些定製化的調優能夠達到比較好的弱網優化效果,但一樣由於是私有協議也勢必有現實問題:
優勢
更多空間進行定製化優化
缺點
開發成本高
CDN不友好,須要自建CDN或者和CDN達成協議
獨立做戰,沒法和社區一塊兒演進
以上就是我在作直播準備時 找到資料,但願能對有些人有幫助,另外再次強調有一些是別人的話 借用一下 忘見諒