N+增強能力系列 | 視頻直播HLS與RTMP

2021-02-07 F5Networks

下面我們就進入NGINX Plus增強能力系列專題》的首篇「視頻直播HLS與RTMP」,作者朱傑。


  朱傑  

F5 解決方案顧問

擁有10多年的伺服器、存儲、以及雲計算大數據的IT從業經驗,熟悉web及移動應用的開發及運維,長期致力於為客戶提供優質的服務交付。具有豐富及廣泛的行業知識,對業務的運營及運維有著深刻的理解。曾作為公有雲的高級產品經理,設計大型共有雲服務UI/UE整體架構及運營體系。




視頻點播直播—推拉流

視頻點播直播有兩個關鍵詞,推流和拉流,那麼什麼是推拉流呢?推流,指的是把採集階段封包好的內容傳輸到伺服器的過程;拉流是指伺服器已有直播內容,用指定地址進行拉取的過程。

上圖清晰的說明了推拉流的過程,在上圖上豐富一下,就形成了當下主流的直播點播的架構示意圖了:


1. ngx_http_hls_module 是什麼

隨著直播行業大火,遊戲、樂秀、教育、發布會等直播類產品層出不窮,能夠滿足各方人員的需求。國內常見的直播協議有幾個:RTMP、HLS、HTTP-FLV,下面我們來介紹一下RTMP與HLS。

RTMP,全稱 Real Time Messaging Protocol,即實時消息傳送協議。Adobe 公司為 Flash 播放器和伺服器之間音視頻數據傳輸開發的私有協議。工作在 TCP 之上的明文協議,默認使用埠 1935。協議中的基本數據單元成為消息(Message),傳輸的過程中消息會被拆分為更小的消息塊(Chunk)單元。最後將分割後的消息塊通過 TCP 協議傳輸,接收端再反解接收的消息塊恢復成流媒體數據。

RTMP 主要有以下幾個優點:RTMP 是專為流媒體開發的協議,對底層的優化比其它協議更加優秀,同時它 Adobe Flash 支持好,基本上所有的編碼器(攝像頭之類)都支持 RTMP 輸出。現在 PC 市場巨大,PC 主要是 Windows,Windows 的瀏覽器基本上都支持 Flash。另外RTMP適合長時間播放,曾經有過測試,聯繫 100 萬秒,即 10 天多連續播放沒有出現問題。最後 RTMP 的延遲相對較低,一般延時在 1-3s 之間,一般的視頻會議,互動式直播,完全是夠用的。

當然 RTMP 並沒有盡善盡美,它也有不足的地方。一方面是它是基於 TCP 傳輸,非公共埠,可能會被防火牆阻攔;另一方面,也是比較坑的一方面是 RTMP 為 Adobe 私有協議,很多設備無法播放,特別是在 iOS 端,需要使用第三方解碼器才能播放。

HLS (HTTP Live Streaming) 則是蘋果公司基於 HTTP 的流媒體傳輸協議。主要應用於 iOS 設備,包含(iPhone, iPad, iPod touch) 以及 Mac OSX 提供音視頻直播服務和錄製內容(點播)等服務。

相對於常見的流媒體協議,HLS 最大的不同在於它並不是一下請求完整的數據流。它會在伺服器端將流媒體數據切割成連續的時長較短的 ts 小文件,並通過 M3U8 索引文件按序訪問 ts 文件。客戶端只要不停的按序播放從伺服器獲取到的文件,從而實現播放音視頻。

相較 RTMP 而言,使用 HLS 在 HTML5 頁面上實現播放非常簡單:

<video src=」example.m3u8」 controls></video>


HLS 的優勢:

Apple 的全系列產品支持:由於 HLS 是蘋果提出的,所以在 Apple 的全系列產品包括 iPhone、 iPad、safari 都不需要安裝任何插件就可以原生支持播放 HLS, 現在 Android 也加入了對 HLS 的支持。

穿透防火牆。基於 HTTP/80 傳輸,有效避免防火牆攔截

性能高。通過 HTTP 傳輸, 支持網絡分發,CDN 支持良好,且自帶多碼率自適應,Apple 在提出 HLS 時,就已經考慮了碼流自適應的問題。

HLS 的劣勢:


在Nginx Plus 裡,Nginx_http_hls_module是專門針對HLS的擴展模塊。


1.  Nginx OSS rtmp module 配置

1.1 安裝nginx依賴軟體

yum -y install gcc gcc-c++ autoconf automake make

yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel


1.2 安裝nginx與rtmp模塊

//首先進入local目錄

cd /usr/local


//下載nginx

wget http://nginx.org/download/nginx-1.13.12.tar.gz


//解壓

tar zxvf nginx-1.13.12.tar.gz


//創建nginx安裝目錄與模塊目錄

mkdir -p /usr/local/nginx/module


//創建視頻數據存放文件

mkdir -p /usr/local/nginx/myapp


//進入/usr/local/nginx/module目錄

cd /usr/local/nginx/module


//下載nginx-rtmp-module(沒有安裝git的請安裝,執行語句的時候沒有git會提示你)

git clone  https://github.com/arut/nginx-rtmp-module.git

//下載後的文件夾名稱叫做nginx-rtmp-module


//進入解壓後的nginx目錄中,指定nginx安裝目錄並且指定了安裝的模塊

cd /usr/local/nginx-1.13.12/

./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx/module/nginx-rtmp-module


//編譯並安裝

make && make instal


//啟動nginx

/usr/local/nginx/sbin/nginx


1.3 配置nginx與nginx-rtmp-module

//在nginx-rtmp-module中帶有一個nginx.conf的配置文件,把它覆蓋到nginx中的配置文件

cp /usr/local/nginx/module/test/nginx.conf /usr/local/nginx/conf

詢問你是否覆蓋,輸入y 並回車


//編輯nginx配置文件,使用vim打開

vim /usr/local/nginx/conf/nginx.conf

//修改的地方一共有三處分別是

1、rtmp節點下的在live on;下加入

    hls on;

    hls_path /usr/local/nginx/myapp;


2、在http節點下,修改兩個root的路徑。


1.4 Html文件修改

1.4.1 修改文件/usr/local/nginx/module/nginx-rtmp-module/test/www/index.html,修改ip以及埠。


        sources: [

            {

                file: "rtmp://10.1.10.146:1935/myapp?carg=1/mystream?sarg=2"

            }


1.4.2修改文件/usr/local/nginx/module/nginx-rtmp-module/test/www/record.html,修改ip以及埠。


var flashvars =

{

    'streamer':                     'rtmp://10.1.10.146:1935/myapp',

    'file':                         'mystream',

    'type':                         'camera',

    'controlbar':                   'bottom',

    'stretching':                   'none',

    'frontcolor':                   '86C29D',  // text & icons                  (green)

    'backcolor':                    '849BC1',  // playlist background           (blue)

    'lightcolor':                   'C286BA',  // selected text/track highlight (pink)

    'screencolor':                  'FFFFFF',  // screen background             (black)

    'id':                           'playerID',

    'autostart':                    'true'

};


重新加載配置,使用命令/usr/local/nginx/sbin/nginx -s reload;


1.5   推流(以直播為例)

1.5.1     下載OBS與VLC軟體;

1.5.2     打開OBS軟體,在設置中選擇串流→自定義伺服器,配置如下:


1.5.3     OBS軟體,點擊添加源,新建視頻捕捉設備;


1.5.4     點擊推流,然後在瀏覽器中輸入http://10.1.10.146:8080;

至此,服務端的推流部分完成,你會發現有趣的是,直播網頁比你obs裡的動作慢3秒,有興趣的可以去了解一下原理。


1.6   拉流(以點播為例)

1.6.1     修改nginx.conf文件,添加點播播放目錄:

rtmp {

    server {

        listen 1935;

        application vod {

            play /usr/local/nginx/vod;

        }

重啟nginx服務

#nginx -s reload

➜  scp TS.MP4  root@10.1.10.146:/usr/local/nginx/vod


1.6.3     打開VLC,進行拉流工作,打開網絡地址,配置如下:

即可正常觀看視頻文件。


2.  Nginx Plus ngx_http_hls_module 配置

ngx_http_hls_module是NGINX PLUS的模塊,他的功能主要有:

A.支持mp4,mov文件的點播;

B.支持緩存,調整緩存大小,能夠實現MP4視頻seeking功能(拖動進度條);

C.支持URI附加參數,能夠對視頻進行操作;

2.1 安裝Nginx Plus (略)2.2 配置nginx.conf文件,添加如下代碼;


location / {

    hls;

    hls_fragment

    hls_buffers

    hls_mp4_buffer_size

    hls_mp4_max_buffer_size 5m;

    root /var/video/;

}


2.3 重啟nginx進程;


#nginx -s reload


2.4 拷貝測試mp4文件到/var/video目錄下(注意驗證文件的可執行性/nginx用戶與用戶組權限);2.5 拷貝測試mp4文件到/var/video目錄下;2.6 在客戶端安裝VLC,用VLC拉流播放,並可以對視頻進行時間剪輯等操作;

http://10.1.10.146:8080/1.mp4.m3u8?offset=1.000&start=1.000&end=2.200

http://10.1.10.146:8080/1.mp4m3u8?len=8.000

http://10.1.10.146:8080/1.mp4.ts?start=1.000&end=2.200



對於直播和點播場景來說,能夠簡化配置,操作與調度視頻流,幫助視頻開發應用快速發布與運維。對於企業的數位化轉型,客戶教育,員工培訓,價值傳遞,線上獲客等具有積極作用。



OSS只有RTMP的第三方模塊,通過RTMP來實現HLS的功能

N+有HLS的獨立模塊,能夠實現在列表URI與分片URI上增加額外的參數,方便開發設計



NGINX   PLUS/hls module

NGINX   OSS/rtmp module

協議

http/https

rtmp/http/https

Directives

HLS   緩衝區設置

URL轉發參數

HLS   分片

HLS   MP4 緩衝區設置

HLS   MP4 最大緩衝區設置



PS:直播技術繞不開的視頻轉碼和切片技術本文未提及,可安裝ffmpeg程序對視頻文件進行切片,有興趣的小夥伴可以自行嘗試。



NGINX PLUS增強模塊與指令


NGINX PLUS介紹



相關焦點

  • H5直播系列四 RTMP HTTP-FLV HLS MPEG-DASH
    參考【騰訊Bugly乾貨分享】從0到1打造直播 App從入門到出家:流媒體協議—FLVH5直播起航全面進階 H5 直播HTML5 視頻直播(一)HLS 和 RTMPHTML5 視頻直播(二)Web Sockets+CanvasHTML5 視頻直播(三)WebRTC直播伺服器簡單實現 http_flv和hls 內網直播桌面RTMP、RTSP、HTTP視頻協議詳解(附:直播流地址
  • 更新一下直播電視臺的直播源
    日本電視臺源日本9,rtmp://wv2.tp33.net/sat/jp091日本8,rtmp://wv2.tp33
  • 視頻/小說/直播源
    1.港澳臺: 有線新聞,https://ws.matchupstream.tuboshu.com/live/77dd1fceca65268901ea37bf26a090c2.flv有線18臺,rtmp://59.124.75.156/sat/hk041NOW·新聞臺,https://ws.matchupstream.tuboshu.com
  • 麼麼直播的音視頻技術實踐和優化
    2018年3月31日,「ZEGO Meetup 視頻直播+的技術實踐之道」第三期在上海成功舉辦,現場吸引了滿堂的直播行業從業者到場聆聽。會上,如預期一樣,麼麼直播前端團隊負責人黃銘新、即構科技資深技術專家和架構師冼牛、滬江CCTalk 音視頻架構師武海濱和塗圖TuSDK 研發技術總監王勝,這4位直播行業大咖給大家做了精彩分享。
  • 2020.10.26 更新一套Http格式直播源,低調速用
    更新Http格式港澳臺直播源,儘快使用,低調翡翠臺
  • 全棧開發——動手打造屬於自己的直播間(Vue+SpringBoot+Nginx)
    :第一是視頻直播、第二是聊天室。說到直播我們先了解下幾個常用的直播流協議,看了挺多的流媒體協議文章博客,但都是非常粗略,這裡有個比較詳細的 流媒體協議介紹(地址:http://blog.csdn.net/tttyd/article/details/12032357/),如果想詳細了解協議內容估計去要看看專業書籍了。這裡我們用到的只是rtmp和hls,實踐後發現:rtmp只能夠在電腦端播放,hls只能夠在手機端播放。
  • 不用任何第三方,寫一個RTMP直播推流器
    然而個人覺得直播的門檻相對較高,從推流端到服務端器到播放端,無不需要專業的技術來支撐,僅僅推流端就有不少需要學習的知識。目前大部分直播採用的都是RTMP協議,我這裡寫一個簡單的Demo,幫助大家更好的理解直播推流的過程,主要包括:音視頻採集、音視頻編碼、數據打包、RTMP協議等相關的知識等。項目結構分的很清楚,各個模塊也用協議進行了分離,方便大家學習不同的模塊。
  • 《抖音》上火的hls可樂桶是什麼
    抖音上火的hls可樂桶是什麼?最近刷《抖音》的小夥伴相信都看到了一些關於hls可樂桶的視頻,視頻除搞笑之外,還有很多小夥伴都在想這個hls可樂桶是什麼意思,那麼今天小編就給大家介紹一下抖音上火的hls可樂桶的相關含義。
  • 免費rtmp看電視
    :1935/livetv/cctv2CCTV-3綜藝: rtmp://58.200.131.2:1935/livetv/cctv3CCTV-4中文國際: rtmp://58.200.131.2:1935/livetv/cctv4CCTV-5體育: rtmp://58.200.131.2:1935/livetv/cctv5CCTV-6電影: rtmp://58.200.131.2
  • 愛上直播軟體一鍋端
    /fs_yspd.m3u8佛山公共,http://pili-live-rtmp.wdit.com.cn/wditlive/fs_ggpd.m3u8佛山新聞頻道,http://pili-live-rtmp.wdit.com.cn/wditlive/fs_zhpd.m3u8佛山順德,http://pili-live-rtmp.wdit.com.cn/wditlive
  • 橙子直播內置部分源
    id=tvs4廣東佛山綜合[1280*720],http://pili-live-rtmp.wdit.com.cn/wditlive/fs_zhpd.m3u8廣東佛山影視[1280*720],http://pili-live-rtmp.wdit.com.cn/wditlive/fs_yspd.m3u8廣東佛山公共[1280*720],http://pili-live-rtmp.wdit.com.cn
  • 《視頻直播技術詳解》系列之七:現代播放器原理
    結合七牛實時流網絡 LiveNet 和直播雲解決方案的實踐,我們用八篇文章,更系統化地介紹當下大熱的視頻直播各環節的關鍵技術,幫助視頻直播創業者們更全面、深入地了解視頻直播技術,更好地技術選型。本系列文章大綱如下:(一)開篇(二)採集(三)處理(四)編碼和封裝(五)推流和傳輸(六)延遲優化(七)現代播放器原理(八)SDK 性能測試模型在上一篇延遲優化中,我們分享了不少簡單實用的調優技巧。本篇是《視頻直播技術詳解》系列之七:現代播放器原理。
  • 這直播超讚!好看實用還秒播,鎮弟大佬最新直播規則分享
    @@http://tv.sason.xyz/logo/jsws.png',\n'軍旅劇場@@http://112.50.243.8/PLTV/88888888/224/3221225887/1.m3u8@@http://www.tvyan.com/uploads/dianshi/newtvjspl.jpg',\n'翡翠劇場@@https://dlhls-cdn-mp.zhanqi.tv/zqlive
  • cdn.chxjon直播源
    id=fhdy 鳳凰電影,rtmp://58.200.131.2:1935/livetv/fhdy香港衛視,rtmp://zhibo.hkstv.tv/livestream/mutfysrqTVB翡翠,http://116.199.5.52:8114/00000000/index.m3u8?
  • 《視頻直播技術詳解》之(四):編碼和封裝
    結合七牛實時流網絡 LiveNet 和直播雲解決方案的實踐,我們用八篇文章,更系統化地介紹當下大熱的視頻直播各環節的關鍵技術,幫助視頻直播創業者們更全面、深入地了解視頻直播技術,更好地技術選型。本篇是《解密視頻直播技術》系列之四:編碼和封裝。視頻編碼是本系列一個重要的部分,如果把整個流媒體比喻成一個物流系統,那麼編解碼就是其中配貨和裝貨的過程,這個過程非常重要,它的速度和壓縮比對物流系統的意義非常大,影響物流系統的整體速度和成本。同樣,對流媒體傳輸來說,編碼也非常重要,它的編碼性能、編碼速度和編碼壓縮比會直接影響整個流媒體傳輸的用戶體驗和傳輸成本。
  • 《抖音》hls可樂桶介紹
    《抖音》上面最近出現了一個非常奇怪的詞,這一個詞就是「hls可樂桶」,聽上去是不是非常像KFC新出的套餐呢?不過,真實的意思可遠遠不是這樣的。接下來小編就給各位玩家小夥伴詳細的講解一下《抖音》hls可樂桶介紹,一起來看看吧。
  • 2020/12/05 全套直播源,可以收藏備用,十分穩定
    聲明:本影視電視直播源完全來自於網絡,轉載網絡,如果侵犯版權,請及時與作者聯繫,予以刪除!
  • 大疆無人機直播視頻回傳如何用導播一體機推流?
    直播行業本身或許也需要無人機的加持。在直播內容同質化的現狀下,無人機也許能成為直播界的小清新。這一點在國外已經有了起色,根據大疆給出的數據,在與Facebook合作之後,每天有2000到3000的無人機玩家自發直播,提供的內容涵蓋風景、突發事件等等領域。
  • 媒體智能-淘寶直播流媒體互動實踐 | D2 分享視頻+文章
    ,MediaAI Studio這樣一款編輯器的實現;最後講講我們後續的建設方向。,大概的操作流程是這樣的:首先還是添加素材貼紙,選擇財神帽的序列幀動畫,調整大小和位置,在跟隨位置裡選擇跟隨人臉的前額部位。