大型網課翻車現場!緣由竟是……

2020 年初,一場突如其來的疫情,小時候破天荒的想法居然真的成了現實:html

隨着各地中小學紛紛網上開學,至此,辛勤的園丁們搖身一變,變成了當紅主播,經過在線直播爲學生授課;而學生們則變成了爲主播刷「666」,刷「火箭」的粉絲。同時,五花八門的直播課教學「事故」也跟着層出不窮。web

例若有老師聲情並茂地講了一節課,最後發現沒有開麥,一直對着空氣口若懸河……瀏覽器

而有的同窗上課忘記關麥還不自知,數學課上背歷史,場面一度十分尷尬……安全

有的老師家裏網絡太卡,等到網絡恢復,卡頓結束,下課時間也到了……各類「翻車現場」雖然讓直播網課的「娛樂性」直線上升,但學生的學習效能也略打折扣。因而,老師和同窗有了共同的心願:但願疫情早日結束,咱們要開學!服務器

雖然網課直播產生了不少段子,但仍是以教學爲主,是現階段「停課不停學」較有效的學習方式。微信

其實,不止於網課,公司會議、親友拜年、朋友小聚,均可以經過直播實現,這樣既能夠防止人羣彙集,又能完成想要的事情,一箭雙鵰。網絡

直播的協議選擇

說到直播,你們最關心的確定都是直播延遲問題,由於這會直接影響到直播的質量。過年期間在家,我那即將高考的妹妹在家上網課,而她最常說的一句話就是:「老師手速真快,問題還沒回答呢,答案就已經出現到公屏上了。」架構

這就是直播延遲致使的。ide

衆所周知,延遲和網絡環境有很大的關係。網速跟不上,延遲就會變高;傳遞數據丟包時,會出現畫面和聲音「卡頓」現象。所以,想要進行一場完美的直播,不管直播環境仍是觀看環境,都要保證網絡的穩定。性能

除了網絡因素,還有一個很大的影響直播延遲的緣由,那就是直播架構中選擇的直播協議。目前經常使用的直播協議有三種,分別是:RTMP、HLS 和 HTTP-FLV。

RTMP

RTMP,即 Real Time Messaging Protocol(實時消息傳輸協議)。它是 Adobe 爲 Flash 播放器和服務器之間的數據傳輸所開發的專有協議,該協議可經過 Internet 在編碼器和服務器之間提供視頻,音頻和數據的高性能傳輸。RTMP 是一種基於 TCP 的複雜實時網絡協議,專爲低帶寬下的高性能傳輸而設計。它對底層的優化也比其它協議更加優秀,基本上全部的編碼器(攝像頭之類)都支持 RTMP 輸出。

除了上述的一些優勢,RTMP 的最重要優點之一就是傳輸中的實時延遲很是低(大約在1-3秒),而 HTTP 流的延時通常在 10 秒以上。RTMP 流的技術成熟(如今已經有 10 多年的歷史了)能夠相對輕鬆地實現。它不但能夠傳輸多種格式的視頻和音頻,還能夠應用諸如播放器驗證之類的安全功能。

可是,RTMP 也有一些缺點:

  • 僅適用於 Flash,不適用於 HTML5
  • 不少設備沒法播放,特別是在 iOS 端,須要使用第三方解碼器才能播放
  • 容易受到防火牆的阻攔,由於它使用的是特殊的 1935 端口

HLS

在 2019 年,使用過 Chrome 瀏覽器的用戶應該都收到過瀏覽器的彈窗:「自 2020 年 12 月開始,Flash Player 將再也不受支持」。其實不止 Chrome 瀏覽器,其餘瀏覽器也這類提示。目前你們還能夠手動選擇啓用 Adobe Flash Player 插件,但到今年 12 月份後,Chrome 將完全禁止調用 Flash 插件。爲此各個網站只能選擇放棄 Adobe Flash Player,轉身投入 HTML5 的懷抱。而 Adobe 也已經宣佈,2020 年末將中止更新 Flash Player。

到 2020 年底,Flash 最終將會消失。這也是 Apple 向用戶推廣 HLS(HTTP Live Streaming)協議爲流視頻首選方式的緣由。

HLS 是 Apple 推出的基於 HTTP 協議的動態碼率自適應技術,它支持 HTML5,而且實現很是簡單。同時由於 HLS 是 Apple 提出的,因此不管是 iPhone、 iPad、Safari 都不須要安裝任何插件就能夠原生支持播放 HLS, 而如今 Android,Microsoft 和 Linux 設備也都支持播放使用 HLS 推送的流。

爲了向每一個觀看流媒體的人(包括屏幕小,網絡不穩定的人)提供高質量的流,HLS 能夠根據每一個設備的狀況動態調整分辨率,這被稱爲自適應比特率流傳輸。固然了,HLS 不是以一個比特率建立一個實時流,而是使用一個代碼轉換器(一般位於服務器中)來建立具備不一樣比特率和分辨率的多個流。而後,流媒體服務器再根據每一個設備的屏幕和網絡狀況發送最高分辨率的流。

HLS 同時還兼具如下特色:

  • 支持的音頻編解碼器:AAC-LC,HE-AAC+v1 和 v2,MP3
  • 支持的視頻編解碼器:H.264,H.265
  • 着重於觀看體驗,延遲較高,大約 6 到 30 秒
  • 變體:低延遲 HLS(可到 2 秒或更短),PHLS(Protected HLS)

HLS 能夠說是如今最經常使用的流協議了。在國外發布的一份《2019 年視頻流延遲報告》中顯示,超過 45% 的參與者表示他們在使用 HLS 協議進行流分發。

HTTP-FLV

通常的直播應用要麼使用 Adobe 的 RTMP 協議,要麼使用 Apple 的 HLS 協議,下面咱們來講說既結合了 RTMP 的低延時,又能夠複用現有 HTTP 分發資源的流式協議:HTTP-FLV。

FLV 你們都比較熟悉,它是 Flash Video 的簡稱,FLV 流媒體格式是隨着 Flash MX 的推出發展而來的視頻格式。而 HTTP-FLV 表明經過 HTTP 以 FLV 格式傳遞的實時流。對於服務器端,因爲如今仍是廣泛使用 RTMP 進行推流,能夠將 RTMP 流轉換爲 FLV;對於客戶端,播放 FLV 流與播放靜態資源中的 FLV 視頻相同。固然,須要支持 FLV 的播放器。

HTTP-FLV 還具備如下特色:

  • 支持漸進式下載,只要有足夠的緩衝,在下載完成以前就能夠開始播放流媒體
  • 不須要特殊的協議,並且可使用 HTTPS 作加密通道
  • 很好的兼容 HTTP 302 跳轉,調度靈活
  • 不太可能被防火牆攔截

三種協議對比

直播的彈幕實現

對於常常看直播和視頻的小夥伴們,感興趣的確定不只是視頻內容,固然少不了有趣的彈幕了。若是說視頻是一塊蛋糕,那彈幕就是蛋糕上那些五光十色的點綴。彈幕的出現,讓視頻的內容表達更加豐富多彩,讓你們忽然發現原來有這麼多人陪我一塊兒看,咱們還能一塊兒互動,這種歸屬感是何等的強烈。

能夠說彈幕是直播必不可少的一部分,那它能夠藉助什麼技術實現呢?下面咱們來講的就是 WebSocket。

WebSocket 是一種全新的協議,它將 TCP 的 Socket(套接字)應用在了 web page 上,從而使通訊雙方創建起一個保持在活動狀態鏈接通道,而且屬於全雙工(雙方同時進行雙向通訊)。而直播發送的彈幕須要實時顯示,經過 WebSocket 協議可將本地客戶端發送的彈幕信息經過服務端所有推送至其餘用戶的客戶端並進行實時展現。WebSocket 協議更好的節省了服務器資源和帶寬,而且可以更實時地進行通信。

在這以前,不少網站使用的是 HTTP 的輪詢。HTTP 協議是半雙工協議,也就是說在同一時間點只能處理一個方向的數據傳輸,屬於單向傳輸。比起 HTTP,WebSocket 協議是全雙工的,服務器能夠隨時主動給客戶端下發數據,能夠雙向發送或接受信息,屬於雙向傳輸。WebSocket 能夠經過客戶端和服務器的握手創建鏈接,而且鏈接一直保持「打開」狀態,這樣既避免了資源浪費,又保證了實時性。

總結一下,WebSocket 主要有如下優點:

  • 較少的資源浪費
  • 更強的實時性
  • 能夠保持長鏈接

不止直播彈幕,相似網站在線諮詢窗口、在線教育、體育實況更新等場景均可以經過 WebSocket 實現。又拍雲將 WebSocket 協議 與 CDN 完美融合,支持單一域名即有 WebSocket 服務又包含 HTTP 服務,可實現兩種服務同時加速,並經過多種技術優化手段,提高用戶訪問效率。

同時,針對疫情期間線上醫療、在線學習的需求量上升,又拍雲提供了完整的在線解決方案,從文件上傳、內容存儲、音視頻處理、內容分發、安全防禦等方面爲在線用戶提供一站式服務。什麼?你是技術小白?徹底不怕,上直播零門檻搭建線上直播,觀看直播也無需下載任何 App,自動生成直播分享觀看頁面,同時還支持在第三方平臺同步觀看。還在等什麼,趕快行動起來!

往期技術文章都在微信同步分享,能夠添加微信:upyun0001

推薦閱讀

聊聊 WebSocket,還有 HTTP

說說 WebSocket,3 分鐘讓你全面認識它

相關文章
相關標籤/搜索