天天看點

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

漫談直播,從零開始認識直播并快速搭建專屬直播平台

author:pasca

time:2018/12/05

目錄

文章目錄

  • 漫談直播,從零開始認識直播并快速搭建專屬直播平台
  • 目錄
  • 一、直播科普
    • 1、直播是什麼
    • 2、視訊編碼壓縮
    • 3、視訊直播的準确定義
  • 二、常見直播技術梳理
    • 1、直播業務邏輯
    • 2、直播技術棧
      • 1、資料采集(主播端)
      • 2、資料預處理
      • 3、資料編碼
      • 4、資料傳輸
      • 5、解碼資料
      • 6、資料播放(播放端)
  • 三、直播協定的差別以及應用場景
    • 1、推流
    • 2、拉流
    • 3、開源推拉流軟體推薦
      • 1、推流工具
      • 2、播放工具
  • 四、使用七牛雲從0到1打造直播平台
    • 1、簡要流程
    • 2、産品架構

一、直播科普

1、直播是什麼

在之前一篇文章詳細解答過關于視訊的結構,這裡就直接上個思維導圖。

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

了解視訊的結構有助于我們更好的去了解直播。從本質上講,直播就是一幀幀的資料加上時序标簽流式傳輸。

這裡有個悖論:一個容器封裝好後的視訊是“結構化”的,即不可變的,那直播又是怎麼産生的呢?或者說,怎麼去打破這個已經産生的“結果”,進而還往裡面加上時序标簽流式傳輸的呢?

很簡單,那就是**“邊生産邊傳輸邊播放”。**

至于如何達到這種效果,我們繼續往下看。

2、視訊編碼壓縮

前面講直播,怎麼又突然講到視訊了呢?

簡而言之,視訊和直播息息相關。當然,這也是既定的事實,是以也不多說。

那這裡講的編碼壓縮又是什麼呢?

采集裝置采集一幀圖像會生成無損的**.bmp檔案格式的圖檔檔案,一個6M通過有損壓縮得到200kb的JPEG檔案,壓縮比就是1/30。

但是視訊不需要單獨傳輸一張張壓縮圖,隻需要記錄每幀之間的差别即可。于是,根據I幀(200K原始圖像)生成差異檔案P幀,通過I幀和P幀再生成B幀。

這,就是H.264編碼。

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

如上圖所示,編碼壓縮就像魔術一般,一段視訊,如果經過編碼壓縮後,可以大幅度的縮小體積。而各種不同的壓縮算法就是編碼格式**,如今主流的音視訊編碼格式就是H.264+AAC,也是各大平台相容性最好的編碼格式方案。

視訊内容經過編碼壓縮大幅度的減少體積後,有利于存儲和壓縮。但是相應的,傳輸時也是被壓縮算法所“加密”的視訊。是以,在播放端也需要一個“解密”的過程。

是以,在編碼和解碼之間,顯然需要一個編碼器和解碼器都可以了解的約定,就圖像而言:生産端的編碼器将多張圖像進行編碼後生成一段端的GOP(Group of pictures), 播放端的解碼器則是讀取一段段的GOP解碼後讀取畫面再渲染顯示。

編碼過程如下圖所示:

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台
漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

一個公式:

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幀的大小。

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

總結,編碼後的視訊(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、直播業務邏輯

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

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

今天我們這裡主要講述的主要是前一種,也就是“信号塔”式直播。相比較“舞台式”互動直播,“信号塔”式直播隻要知道發射塔的信号頻率(即頻道号或連結)就能收看它發送的節目,但是并不能很好的去實時互動動。而對于互動直播來說,“舞台上”的演員可以很多個,觀衆也可能被邀請到舞台上面對面交流,是以互動直播的延時會比直播更低,甚至達到了毫秒級(100ms)。

當然,互動直播經過旁路轉推也可以經過“發射塔”播出去,這就是“旁路轉推”功能。

常見直播業務邏輯如下:

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

推流:指的是把采集階段封包好的内容傳輸到伺服器的過程

拉流:即将伺服器封包好的内容拉取到播放端解碼播放的過程

2、直播技術棧

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

上圖是一個如今主流的直播泳道,非常直白的表述了從主播端采集視訊到觀看端播放直播的資料流向,下面我們根據其中主要的幾大子產品一一詳解。

資料采集→資料預處理→資料編碼→資料傳輸(流媒體伺服器)→解碼資料→直播播放

1、資料采集(主播端)

采集裝置:手機、電腦、錄影機

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台
漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

2、資料預處理

涉及功能:美顔、濾鏡

涉及技術:SDK内置算法或第三方特效

3、資料編碼

編碼器主要流程:

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

上圖為幀内編碼(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

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

5、解碼資料

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

6、資料播放(播放端)

播放管道:移動端(手機、平闆等)、用戶端(PC等)、網頁端(各終端)

三、直播協定的差別以及應用場景

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

1、推流

推流協定:RTMP、RTSP和QUIC

備注:RTSP、RTMP、QUIC協定都在應用層。

  • RTSP是流媒體協定,主要應用于安防監控,目前絕大多數的攝像頭預設支援RTSP推流。一般傳輸的是 ts、mp4 格式的流。RTSP在體系結構上位于RTP和RTCP之上,它使用TCP或UDP完成資料傳輸。但是實作複雜,各家CDN支援度不高,一般需要将直播流轉碼成CDN支援更好的RTMP。
    漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

    一般來說,視訊資料由RTP傳輸、視訊品質由RTVP/RTCP控制,視訊建議和控制由RTSP控制。

    備注:作為點播協定實作倍數播放必須使用到RTSP,因為RTSP是雙向協定。

  • RTMP也是流媒體協定,屬于Adobe,基于TCP長連結一般傳輸的是 flv,f4v 格式流。優點是延時低,國内CDN廠商都相容。這也是主要的推流方式。但是在浏覽器中隻能使用 Flash 實作播放器。但作為拉流協定時無法支援移動端 Web 播放(手機無法安裝flash)是它的硬傷。
  • QUIC全稱 quick udp internet connection,即“快速 UDP 網際網路連接配接”。是谷歌公司制定的一種基于 UDP 協定的低延遲時間網際網路傳輸協定。使用QUIC推流,針對弱網使用者也能夠有很好的使用者體驗。
    漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台
    各大平台對QUIC都大同小異,而在七牛。主要是将基于TCP的RTMP傳輸改成基于QUIC的RTMP傳輸,即對外暴露的推流位址都是RTMP形式。

2、拉流

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

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

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、簡要流程

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

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

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

2、産品架構

漫談直播,從0認識直播并快速搭建專屬直播平台漫談直播,從零開始認識直播并快速搭建專屬直播平台目錄一、直播科普二、常見直播技術梳理三、直播協定的差別以及應用場景四、使用七牛雲從0到1打造直播平台

主要分為四部分:

  • 業務伺服器

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

  • 建立直播房間
  • 傳回直播房間播放位址清單
  • 關閉直播房間
  • LiveNet 實時流網絡

    負責流媒體的分發、直播流的建立、查詢等相關操作

  • 采集端
  • 負責采集和推送流媒體
  • 播放端
  • 負責拉取并播放流媒體

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

繼續閱讀