漫談直播,從0認識直播並快速搭建專屬直播平臺

一、直播科普

1、直播是什麼

在之前一篇文章詳細解答過關於視頻的結構,這裏就直接上個思維導圖。
視頻組成

理解視頻的結構有助於我們更好的去理解直播。從本質上講,直播就是一幀幀的數據加上時序標籤流式傳輸。
這裏有個悖論:一個容器封裝好後的視頻是“結構化”的,即不可變的,那直播又是怎麼產生的呢?或者說,怎麼去打破這個已經產生的“結果”,從而還往裏面加上時序標籤流式傳輸的呢?
很簡單,那就是**“邊生產邊傳輸邊播放”。**
至於如何達到這種效果,我們繼續往下看。

2、視頻編碼壓縮

前面講直播,怎麼又突然講到視頻了呢?
簡而言之,視頻和直播息息相關。當然,這也是既定的事實,所以也不多說。
那這裏講的編碼壓縮又是什麼呢?
採集設備採集一幀圖像會生成無損的**.bmp文件格式的圖片文件,一個6M通過有損壓縮得到200kb的JPEG文件,壓縮比就是1/30。
但是視頻不需要單獨傳輸一張張壓縮圖,只需要記錄每幀之間的差別即可。於是,根據I幀(200K原始圖像)生成差異文件P幀,通過I幀和P幀再生成B幀。
這,就是H.264編碼。

如上圖所示,編碼壓縮就像魔術一般,一段視頻,如果經過編碼壓縮後,可以大幅度的縮小體積。而各種
不同的壓縮算法就是編碼格式**,如今主流的音視頻編碼格式就是H.264+AAC,也是各大平臺兼容性最好的編碼格式方案。
視頻內容經過編碼壓縮大幅度的減少體積後,有利於存儲和壓縮。但是相應的,傳輸時也是被壓縮算法所“加密”的視頻。所以,在播放端也需要一個“解密”的過程。
因此,在編碼和解碼之間,顯然需要一個編碼器和解碼器都可以理解的約定,就圖像而言:生產端的編碼器將多張圖像進行編碼後生成一段端的GOP(Group of pictures), 播放端的解碼器則是讀取一段段的GOP解碼後讀取畫面再渲染顯示
編碼過程如下圖所示:
-w600
-w600

一個公式:
GOP = I(幀內編碼幀) + B(雙向預測幀) + P(前向預測幀)
其中I幀也叫關鍵幀,是一副完整的畫面,而P幀則是記錄I幀的變化(H.264中通過補償算法根據I幀得到的差異文件),B幀類似。
再簡單點說,如果沒有I幀,P幀和B幀也無法解碼。這也很好理解,沒有原始對比文件,只有差異文件是無法渲染畫面的。
GOP結構一般兩個數字,如M=1,N=2。M指定I幀和P幀之間的距離,N指定兩個I幀之間的距離,其他都是B幀填充。如M=1,N=2這裏的例子是IDR PB I排序。
有些地方會講IDR幀,其實就是GOP的第一個I幀,這個幀很重要,因爲關於首開優化基本上都在去儘可能減小IDR幀的大小。

總結,編碼後的視頻(video) = 一組 GOP 畫面 = 一組 I幀 +B幀 +P幀。

如果用物理學上的概念來比喻,Video就是“物體”, GOP好比“分子”,I/P/B幀的圖像就是“原子”
而直播,就是利用video的“原子”傳輸。

3、視頻直播的準確定義

到這裏,我們終於可以來嘗試來給直播表述較爲準確的一個定義。

直播就是將每幀數據(Video/Audio/Data Frame),打上時序標籤後進行流式傳輸的過程。發送端源源不斷的採集音視頻數據,經過編碼、封包、推流,再經過中繼分發網絡進行擴散傳播。播放端則源源不斷的下載數據並按時序進行解碼播放。
這樣就完成了“邊生產、邊傳輸、邊播放”的直播過程了。
簡而言之,視頻直播技術,就是將視頻內容的最小顆粒(I/P/B幀),基於時序標籤,以流式傳輸的一種技術。

題外話:GOP越長,所包含的B幀和P幀越多,響應的壓縮比也會更高。
GOP越短,I幀比例增高,壓縮比增加,同碼率下視頻質量會下降。

二、常見直播技術梳理

1、直播業務邏輯

直播也分爲兩種,一種就是直播服務,一種叫互動直播。打個比方,如果 直播 服務是個信號發射塔,那 互動直播 就是個帶舞臺的劇院。

今天我們這裏主要講述的主要是前一種,也就是“信號塔”式直播。相比較“舞臺式”互動直播,“信號塔”式直播只要知道發射塔的信號頻率(即頻道號或鏈接)就能收看它發送的節目,但是並不能很好的去實時交互動。而對於互動直播來說,“舞臺上”的演員可以很多個,觀衆也可能被邀請到舞臺上面對面交流,所以互動直播的延時會比直播更低,甚至達到了毫秒級(100ms)。
當然,互動直播經過旁路轉推也可以經過“發射塔”播出去,這就是“旁路轉推”功能。

常見直播業務邏輯如下:

直播邏輯-w500
推流:指的是把採集階段封包好的內容傳輸到服務器的過程
拉流:即將服務器封包好的內容拉取到播放端解碼播放的過程

2、直播技術棧

上圖是一個如今主流的直播泳道,非常直白的表述了從主播端採集視頻到觀看端播放直播的數據流向,下面我們根據其中主要的幾大模塊一一詳解。

數據採集→數據預處理→數據編碼→數據傳輸(流媒體服務器)→解碼數據→直播播放

1、數據採集(主播端)

採集設備:手機、電腦、攝像機

2、數據預處理

涉及功能:美顏、濾鏡
涉及技術:SDK內置算法或第三方特效

3、數據編碼

編碼器主要流程:

上圖爲幀內編碼(I 幀),幀間編碼(P幀)類似。

編碼方式:CBR(靜態碼率)和VBR(動態碼率)
視頻編碼格式:H.265、H.264、MPEG-4等
音頻編碼格式: Opus、G711、AAC、Speex、3A等
視頻封裝容器:封裝容器有TS、MKV、AVI、MP4等
音頻封裝容器:MP3、OGG、AAC等

4、數據傳輸

傳輸協議:

  • 推流:RTSP、RTMP、QUIC
  • 拉流:RTMP、HTTP-FLV、HLS
    控制信令:SIP、SDP、SNMP

5、解碼數據

涉及技術:編碼器自帶解碼器

6、數據播放(播放端)

播放渠道:移動端(手機、平板等)、客戶端(PC等)、網頁端(各終端)

三、直播協議的區別以及應用場景

在第二部分,我們已經詳細介紹了直播的流程,其中還簡要的介紹的直播過程中拉流和推流所使用到的協議,下面我們來一一詳解。

1、推流

推流協議:RTMP、RTSP和QUIC
備註:RTSP、RTMP、QUIC協議都在應用層。

  • RTSP是流媒體協議,主要應用於安防監控,目前絕大多數的攝像頭默認支持RTSP推流。一般傳輸的是 ts、mp4 格式的流。RTSP在體系結構上位於RTP和RTCP之上,它使用TCP或UDP完成數據傳輸。但是實現複雜,各家CDN支持度不高,一般需要將直播流轉碼成CDN支持更好的RTMP。

    一般來說,視頻數據由RTP傳輸、視頻質量由RTVP/RTCP控制,視頻建議和控制由RTSP控制。
    備註:作爲點播協議實現倍數播放必須使用到RTSP,因爲RTSP是雙向協議。

  • RTMP也是流媒體協議,屬於Adobe,基於TCP長鏈接一般傳輸的是 flv,f4v 格式流。優點是延時低,國內CDN廠商都兼容。這也是主要的推流方式。但是在瀏覽器中只能使用 Flash 實現播放器。但作爲拉流協議時無法支持移動端 Web 播放(手機無法安裝flash)是它的硬傷。

  • QUIC全稱 quick udp internet connection,即“快速 UDP 互聯網連接”。是谷歌公司制定的一種基於 UDP 協議的低時延互聯網傳輸協議。使用QUIC推流,針對弱網用戶也能夠有很好的用戶體驗。

    各大平臺對QUIC都大同小異,而在七牛。主要是將基於TCP的RTMP傳輸改成基於QUIC的RTMP傳輸,即對外暴露的推流地址都是RTMP形式。

2、拉流

有直播推流到流媒體服務器,那肯定也會有相應的拉流方式。相比較於推流,目前主流的拉流協議有三種:RTMP、HLS、HTTP-FLV。

RTMP拉流:

  1. 基於TCP長連接,默認使用端口1935,延時在1-3s左右
  2. Web端依賴flash,H5需要安裝插件
  3. 手機瀏覽器由於flash原因,不能使用RTMP拉流

HLS拉流:

  1. 基於HTTP短連接,默認80端口,由蘋果公司創造。
  2. 對H5支持較好,但是延時一般在10S以上
  3. 可以使用 HTTPS 做加密通道

HTTP-FLV:

  1. 基於HTTP長鏈接,默認80端口,延時在1-3s左右
  2. 使用B站開源flv.js可以很好的支持H5,否則也依賴flash
  3. 很好的支持移動端(Android,IOS)
  4. 可以使用 HTTPS 做加密通道

在支持瀏覽器的協議裏,延遲排序是:
HTTP-FLV >= RTMP < HLS
而性能排序恰好相反:
RTMP > HTTP-FLV > HLS
就目前主流直播平臺(鬥魚、虎牙、熊貓等)清一色的都是使用HTTP-FLV(主)+RTMP(備)協議。而手機web端(小程序)則大多數使用的HLS協議。

3、開源推拉流軟件推薦

1、推流工具

Windows端:

  • OBS(Open Broadcaster Software)
  • Adobe Flash Media Encoder(不再更新)
  • XSplit推流器
  • ffmpeg命令行工具

移動端(IOS和Andriod):

  • 七牛開源SDK

備註:不支持H5推流

2、播放工具

Web端:

  • 七牛雲Web sdk
  • 超酷開源播放軟件

Windows:

  • 七牛windows開源播放器
  • VLC播放器

移動端(IOS和Andriod):

  • 七牛開源移動播放器

四、使用七牛雲從0到1打造直播平臺

1、簡要流程

通過七牛開發者平臺快速創建直播空間、直播流及獲取推流播放地址等操作,一站式完成直播業務的基本推流及播放。

備註:申請七牛雲直播需審覈以及一個雙備案(ICP及公安部)的域名。

2、產品框架

主要分爲四部分:

  • 業務服務器
    負責協調直播類應用的業務邏輯,包括但不限於:

  • 創建直播房間

  • 返回直播房間播放地址列表

  • 關閉直播房間

  • LiveNet 實時流網絡
    負責流媒體的分發、直播流的創建、查詢等相關操作

  • 採集端

  • 負責採集和推送流媒體

  • 播放端

  • 負責拉取並播放流媒體

七牛雲官網文檔:https://developer.qiniu.com/pili/manual/1217/live-architecture-fleetly

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