不作任何開發,弱網環境下實現直播零卡頓,聽上去是否是天方夜譚?看完這篇文章你就知道,七牛直播雲是如何作到的。網絡
卡頓是最影響直播體驗的因素之一,也是最難解決的問題之一。在流媒體的傳輸鏈路中,任何一個環節丟包均可能致使用戶觀看卡頓。測試
其中,主播端的推流卡頓最影響觀看體驗,會直接影響到全部觀看直播的最終用戶。主播推流卡頓在部分場景會特別顯著,好比戶外直播就很是考驗在網絡情況複雜的狀況下推流的穩定性。優化
減小卡頓一直是開發者重大的技術挑戰,七牛雲做爲互聯網直播行業的先驅又有什麼樣的對策呢?ui
Google 從 2014 年推出 QUIC 協議後一直在音視頻產品上實踐該協議。如今,通過一年多的探索和實踐,七牛雲直播雲產品已經擁抱 QUIC,最新推出的直播 QUIC 推流方案能夠大幅度的下降直播的卡頓問題,能夠在各類複雜網絡環境下給客戶提供優秀的直播體驗。操作系統
既然 QUIC 能夠解決如此重要的直播體驗問題,那麼咱們先從總體瞭解一下 QUIC 協議。.net
1. QUIC 協議的定義視頻
QUIC 全稱 Quick UDP Internet Connection, 是谷歌公司制定的一種基於 UDP 協議的低時延互聯網傳輸協議。對象
咱們知道,TCP/IP 協議族是互聯網的基礎。其中傳輸層協議只有兩種: TCP 和 UDP 協議。與 TCP 協議相比,UDP 更爲輕量,可是錯誤校驗也要少得多。因爲 UDP 是不可靠協議,不保證按序送達,因此其可靠性比不上 TCP 協議。ip
QUIC 傳輸層基於 UDP 協議但倒是一種可靠的傳輸協議,由於它將不少可靠性的驗證策略從系統層轉移到應用層來作,這樣可使用更適合現代流媒體傳輸的擁塞控制策略。資源
2. QUIC 在網絡傳輸中所處的位置
 從圖上能夠看出,QUIC 傳輸層用 UDP 協議替代了 TCP。
3. QUIC 在傳輸上爲何有優點
從上面全部對 QUIC 的定義上來看,很明顯 QUIC 的對比對象是 TCP。因此下面全部的優點的枚舉都是基於 QUIC 和 TCP 的比較。
3.1 更出色的擁塞控制
雖然例如 HTTP/2 或者 SPDY 協議如今都支持將頁面的多個數據經過一個數據連接進行傳輸,該特性也確實可以加快數據的傳輸速度。可是因爲 TCP 協議在處理包時是有嚴格順序的,因此仍是會遇到隊首阻塞的問題。
好比發生以下圖所示場景下的問題時,當其中一個數據沒有發送成功,TCP 鏈接須要等待這個包完成重傳以後才能繼續進行。所以,即便邏輯上一個 TCP 鏈接上並行的在進行多路數據傳輸,其餘毫無關聯的數據也會所以阻塞。
 QUIC 協議直接經過傳輸層使用 UDP 協議就能夠避免該問題的發送。因爲 UDP 協議沒有嚴格的順序要求,當一個數據包遇到問題須要重傳時只會影響該數據包對應的資源,其餘獨立的資源不會受到影響而阻塞傳輸。  3.2 QUIC 更加靈活
TCP 協議棧一般由操做系統層面來實現,例如如 Linux、Windows、iOS、Android 操做系統。所以若是要修改 TCP 協議須要從操做系統層面去作不少事情,這是一項複雜的工程。相對來講 UDP 協議在操做系統層面實現更爲簡單,QUIC 基於 UDP 在應用層作了不少網絡擁塞控制層面的優化,幫助用戶減小複雜網絡下的卡頓率,提升流暢度,這是 TCP 沒法作到的。
4. 小結
從以上全部的介紹中能夠看出,若是咱們須要使用 QUIC 改善直播體驗,就是用它來代替直播中 TCP 協議所扮演的角色。你們都清楚目前直播所使用的協議都基本是 RTMP 協議,而 RTMP 協議的傳輸層是基於 TCP 協議。因此七牛的 QUIC 推流方案就是把 RTMP 當中的傳輸層協議換成 QUIC,從而達到推流卡頓率降低的效果。
上面說了那麼多基於 QUIC 作媒體傳輸的理論優點,那麼有沒有實際的實驗測試做爲理論的支撐呢?下面一塊兒來看看七牛雲 QA 團隊給出的測試數據吧。
測試的參數配置: 
測試方式: 使用 ATC 模擬的弱網環境下,用 srs 播放器播放 5 mins,記錄流暢度和卡頓次數。
結果分別如圖所示:
而在 TCP 這種網絡配置下,推不起來,或者推一會就會斷開。
咱們相信不少客戶已經發現 QUIC 推流這項技術對於本身產品的意義,它能夠有效減小主播因爲網絡問題帶來的煩惱。 客戶只須要換上七牛最新版本的推流 SDK ,打開客戶端上的 QUIC 推流開關,配合七牛雲專爲直播產品打造的實時流網絡,便可讓你的產品體驗更加流暢。
關注公衆號七牛雲,瞭解更多信息哦~