工作,生活,休閒,專業,分享,記錄

App Insights JS

Total Pageviews

April 3, 2017

RTMP直播服務(1/3) : 安裝建置 NGINX RTMP 直播服務



安裝環境:

l   OS: Ubuntu 14.04 LTS (on Azure VM [A2_v2] )
PS: 不要使用 16.04 LTS 版本,因為安裝 program ‘cc’ 安裝不上去(我尚不知道原因是什麼,需要查一下!)
l   NGINX: Nginx-1.11.12.tar.gz
l   NGINX RTMP Module: Nginx-rtmp-module.git

Azure VM:



VM Firewall setup 範例參考:


Reference:

Microsoft Azure Marketplace 也提供了一些 RTMP streaming package 可以選擇使用。





安裝 NGINX & nginx-rtmp module

本節介紹如何在 Ubuntu server 上面安裝 NGINX,從工具的安裝,軟體下載,Buildinstalltest,連同nginx-rtmp-module 一併安裝完成。

1.     確定安裝 NGINX 所需要的工具
$ sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev


2.     下載 NGINX 1.11.12 版本 source code
$ wget http://nginx.org/download/nginx-1.11.12.tar.gz


3.     下載 nginx-rtmp-module source code
$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip


4.     解壓縮兩個 source code
$ tar -zxvf nginx-1.11.12.tar.gz
$ unzip master.zip
(PS:如果你無法 unzip,請先安裝 $ sudo apt install zip )

5.     開始 build nginx
$ cd nginx-1.11.12
$ ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
$ make
$ sudo make install

安裝完成,default 安裝目錄為  /usr/local/nginx

6.     啟動 NGINX
$ sudo /usr/local/nginx/sbin/nginx


測試連接:使用瀏覽器連接 http://<your server ip/host>/
正常出現如下畫面:


PS:請先開啟你伺服器的防火牆 inbound and outbound : Port 80/443 (for HTTP/HTTPS),如果防火牆沒有開通,可能會出現如下的畫面:



設定 NGINX for RTMP streaming

NGINX 安裝完成之後,我們必須要修改 conf 檔案,加入 rtmp 所需要的設定值,然後讓伺服器重新啟用新的設定,這樣就可以開始測試 rtmp push & pull(後面我們也會介紹如何使用工具來測試 rtmp push & pull)
使用 rtmp push & pull,我們就可以做直播串流,簡單的直播串流範例就完成了。

修改 CONF for RTMP push & pull


1.     首先在 /usr/local/nginx/conf/ 目錄中,修改 nginx.conf 檔案,在檔案的最後面加入下面這一段設定值:
rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application demo {
                        live on;
                        record off;
                }
        }
}


2.     重新載入 nginx.conf 設定檔,或是關掉重開 NGINX
l   重新載入 conf 檔案
$ sudo /usr/local/nginx/sbin/nginx –s reload

l   或是關掉重開 NGINX
$ sudo /usr/local/nginx/sbin/nginx -s stop
$ sudo /usr/local/nginx/sbin/nginx

PS:可參考 nginx 參數說明如下:
blake@BlakeUnbuntu:/usr/local/nginx/sbin$ ./nginx -?
nginx version: nginx/1.11.12
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/nginx/)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file


3.     修改設定,重新執行完成,接下來就可以開始測試 RTMP 直播服務了。


測試 NGINX RTMP push & pull

使用 OBS 來做 RTMP 影片推流 (https://obsproject.com/download)


使用 VLC 來播放 RTMP 直播影片 (http://www.videolan.org/vlc/index.zh-TW.html)


PS:請先確定你的伺服器防火牆有開啟 inbound & outbound rtmp port : 1935

1.     設定直播影片推流 (OBS)
先開啟 OBS 軟體,設定你所要直播的來源(可自行參考 OBS 軟體使用方法或手冊,網路上很多資料可供參考!)


然後點選 [設置],進入設定畫面


點選 [串流],輸入你的 RTMP URL 以及流密碼,這兩個將會組合成日後所要觀看直播的 RTMP URL,然後點選 [確定]
播放的 RTMP URL 將會是:你剛剛設定的 URL + 流密碼
例如:我設定的流密碼是 live,那我在播放的時候,開啟的 RTMP URL 將會是 rtmp://<your server ip>/demo/live
demo 是我們剛剛在設定 nginx.conf 所設定的 Live Channel 名稱,live 是我輸入的流密碼

接下來就可以做 [開始串流],點選開始串流之後,如果正常的話,你的直播來源影片已經成功推流到 NGINX 上了。(可以在伺服器上檢查網路狀態查看)
$ sudo netstat –p | grep nginx


2.     使用 VLC 觀看 RTMP 直播影片
開啟 VLC 軟體,點選 Open Network 來開啟 RTMP URL


輸入你的直播 RTMP URL,然後點選 [Open]


然後在 VLC playlist 列表中,點選你要播放的連結,接著點選 play 按鈕,VLC 會開啟 player 開始播放你的直播串流影片。 


成功播放的畫面如下:


PS:實際測試結果,影片直播的 Latency 大約 8 秒。


另外使用 Azure VM (DS11 v2 : 2 Cores, 14 GB RAM, SSD) 測試,Latency 4~5 秒左右。(所以機器等級上有差別會造成 Latency 的差異。)



設定 NGINX for HLS streaming

接下來要設定 NGINX HLS streaming,這必須要修改 conf 的設定,把 HLS streaming 所需要的設定加入 nginx.conf 檔案,然後再重新啟用設定值。
NGINX HLS streaming 環境設定完成之後,我們會接著介紹如何把 NGINX HLS streaming 串接到 CDN (這裡選擇使用 Azure CDN 來做介紹),讓使用者可以直接從 CDN 連接 HLS 直播串流。







4 comments:

阿邱邱 said...

請問多組rtmp直播要怎麼設?

Blake W. said...

可以在 /usr/local/nginx/conf 裡面找到 nginx.conf
修改 nginx.conf ,加入多組 rtmp live channel,同時輸出也要定義多組 m3u8 存放位置
然後使用 /usr/local/nginx/sbin/nginx -s reload
重新啟用新的 configuration 這樣就可以多組 Live Channel 同時運作了。

阿邱邱 said...

我多組成功運作了

例外想問我OBS推流後在其他手機繪卡頓,伺服器有需要額外的設定嗎?

另外想問怎樣限制推流的人,現在好像只要有網址任何人都可以推流

阿邱邱 said...

安全性設定的自訂網址連結我也用好了
只是發生一種情況
rtmp加了驗證資訊後,我手機的解碼就失效了
電腦依然可以播放