linux CentOS7 nginx nginx-rtmp-module搭建直播


直播配置

1. 安裝 Nginx 依賴軟件

yum -y install gcc gcc-c++ autoconf automake make yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel 

2. 安裝nginx與rtmp模塊

l 首先進入local目錄

cd /usr/local l 下載nginx(沒有安裝wget的請安裝,安裝命令:yum -y install wget) wget http://nginx.org/download/nginx-1.13.12.tar.gz l 解壓 tar zxvf nginx-1.13.12.tar.gz l 創建nginx安裝目錄與模塊目錄 mkdir -p /usr/local/nginx/module l 創建視頻數據存放位置 mkdir -p /usr/local/nginx/myapp l 進入到/usr/local/nginx/module目錄 cd /usr/local/nginx/module l 下載nginx-rtmp-module,下載后的文件夾名叫nginx-rtmp-module(沒有安裝git的請安裝,執行語句的時候沒有git會提示你) git clone https://github.com/arut/nginx-rtmp-module.git l 進入解壓后的nginx目錄中,指定nginx安裝目錄並且指定了安裝的模塊 cd /usr/local/nginx-1.13.12/ ./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx/module/nginx-rtmp-module(此處一句命令) l //編譯並安裝 make && make install l //啟動nginx /usr/local/nginx/sbin/nginx 

此時如果沒有問題,那么你就可以訪問http://127.0.0.1了,會出現welcome界面。
3. 配置nginx與nginx-rtmp-module

// 在nginx-rtmp-module中帶有一個nginx.conf的配置文件,把它覆蓋到nginx中的配置文件cp /usr/local/nginx/module/nginx-rtmp-module/test/nginx.conf /usr/local/nginx/conf 詢問你是否覆蓋,輸入y 並回車
// 編輯nginx配置文件,使用vim打開
vim /usr/local/nginx/conf/nginx.conf
//(按i進入編輯模式,編輯完成后esc退出, 輸入:wq 保存並退出)
//修改nginx.conf文件,修改三處
1.Rtmp節點下,在live on ;下加入
    hls on;
    hls_path  /usr/local/nginx/myapp;
 
nginx.conf
2.在http 節點下,修改兩個root的路徑
    location /rtmp-publisher {
            root  /usr/local/nginx/module/nginx-rtmp-module/test;
        }

        location / {
            root /usr/local/nginx/module/nginx-rtmp-module/test/www;
        }
 
nginx.conf

修改之后保存即可,接下來修改web界面。
第一個頁面
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/www/index.html,修改ip以及端口(以下192.168.1.7為rtmp服務器ip)


 
index.html

第二個頁面
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/www/record.html,修改ip以及端口

 
record.html

第三個頁面(點播配置)
創建視頻存放位置
mkdir -p /usr/local/nginx/vod/flvs
上傳一個mp4格式的視頻到/usr/local/nginx/vod/flvs下(以2.mp4為例)
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/rtmp-publisher/player.html,修改ip以及端口
 
player.html

4.這時需要重新加載配置,使用命令

 

/usr/local/nginx/sbin/nginx -s reload

5.如果啟動沒有問題,那么訪問端口剛才已經修改為8080那么你看到的界面應該是下圖

 
nginx首頁

6.下面配置直播工具 OBS

 

安裝后打開界面在設置中選中,串流,類型選擇: 自定義流媒體服務器

 
OBS配置

配置圖像輸出:
在來源處點+號,選擇視頻捕捉設備,然后在設備處選擇你的攝像頭即可。
 
抓取窗口

這是可以開始直播了,點擊右側開始串流,然后打開web地址,192.168.1.7:8080就可以看見了,直播完成
 
點播

訪問 http://192.168.31.41:8080/rtmp-publisher/player.html即可查看上傳的視頻,點播完成

 

常見的直播協議

國內常見的直播協議有幾個:RTMP、HLS、HTTP-FLV
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 端,需要使用第三方解碼器才能播放。
FLV(Flash Video) 是 Adobe 公司推出的另一種視頻格式,是一種在網絡上傳輸的流媒體數據存儲容器格式。其格式相對簡單輕量,不需要很大的媒體頭部信息。整個 FLV 由 The FLV Header, The FLV Body 以及其它 Tag 組成。因此加載速度極快。采用 FLV 格式封裝的文件后綴為 .flv。
而我們所說的 HTTP-FLV 即將流媒體數據封裝成 FLV 格式,然后通過 HTTP 協議傳輸給客戶端。
HTTP-FLV 依靠 MIME 的特性,根據協議中的 Content-Type 來選擇相應的程序去處理相應的內容,使得流媒體可以通過 HTTP 傳輸。相較於 RTMP 協議,HTTP-FLV 能夠好的穿透防火牆,它是基於 HTTP/80 傳輸,有效避免被防火牆攔截。除此之外,它可以通過 HTTP 302 跳轉靈活調度/負載均衡,支持使用 HTTPS 加密傳輸,也能夠兼容支持 Android,iOS 的移動端。
說了這么多優點,也來順便說下 HTTP-FLV 的缺點,由於它的傳輸特性,會讓流媒體資源緩存在本地客戶端,在保密性方面不夠好。因為網絡流量較大,它也不適合做拉流協議。
上述兩個協議都是有Adobe公司推出的,而下面要講的
HLS (HTTP Live Streaming) 則是蘋果公司基於 HTTP 的流媒體傳輸協議。主要應用於 iOS 設備,包含(iPhone, iPad, iPod touch) 以及 Mac OSX 提供音視頻直播服務和錄制內容(點播)等服務。
相對於常見的流媒體協議,HLS 最大的不同在於它並不是一下請求完整的數據流。它會在服務器端將流媒體數據切割成連續的時長較短的 ts 小文件,並通過 M3U8 索引文件按序訪問 ts 文件。客戶端只要不停的按序播放從服務器獲取到的文件,從而實現播放音視頻。
相較 RTMP 而言,使用 HLS 在 HTML5 頁面上實現播放非常簡單:
直接:

<video src = "xxx.m3u8" controls> </video> 

間接

<video controls> <souce src = "xxx.m3u8"></souce> </video> 

HLS 的優勢:

Apple 的全系列產品支持:由於 HLS 是蘋果提出的,所以在 Apple 的全系列產品包括 iPhone、 iPad、safari 都不需要安裝任何插件就可以原生支持播放 HLS, 現在 Android 也加入了對 HLS 的支持。
穿透防火牆。基於 HTTP/80 傳輸,有效避免防火牆攔截
性能高。通過 HTTP 傳輸, 支持網絡分發,CDN 支持良好,且自帶多碼率自適應,Apple 在提出 HLS 時,就已經考慮了碼流自適應的問題。

HLS 的劣勢:

實時性差,延遲高。HLS 的延遲基本在 10s+ 以上
文件碎片。特性的雙刃劍,ts 切片較小,會造成海量小文件,對存儲和緩存都有一定的挑戰


 
流媒體協議 RTMP, HTTP-FLV, HLS 簡單對比

RTMP 協議為流媒體而設計,在推流中用的比較多,同時大多 CDN 廠商支持RTMP 協議。
HTTP-FLV 使用類似 RTMP流式的 HTTP 長連接,需由特定流媒體服務器分發的,兼顧兩者的優點。以及可以復用現有 HTTP 分發資源的流式協議。它的實時性和 RTMP 相等,與 RTMP 相比又省去了部分協議交互時間,首屏時間更短,可拓展的功能也更多。
HLS 作為蘋果提出的直播協議,在 iOS 端占據了不可撼動的地位,Android 端也同時提供相應的支持。
又拍雲一站式直播解決方案基於又拍雲 CDN,支持 RTMP、HTTP-FLV 和 HLS 三大直播協議,並且通過智能調度、鏈路保障、追幀處理、丟幀處理以及業界首創的 HLS+ 技術,將 RTMP、HTTP-FLV 直播延遲控制在1秒內,將 HLS 直播延時控制在 4 秒左右。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM