使用nginx搭建rtmp服務器

 


1、軟件需求php

 

一、nginx源碼包  下載地址:http://nginx.org/。筆者下載的是1.10.3。html

 

二、pcre源碼包。這是一個正則表達式庫。nginx會用到這個開源庫來作正則匹配。不少軟件都會引用,好比php引擎編譯的時候也會用到。nginx

 

下載地址:https://ftp.pcre.org/pub/pcre/pcre-8.36.zipgit

 

三、nginx-rtmp-module源碼包  github

 

這才rtmp服務真正要的工具。正則表達式

 

下載地址:https://github.com/arut/nginx-rtmp-module服務器

 

四、openssl源碼包。這個不是必須。只有nginx 版本在1.3.14 - 1.5.0之間的,才須要安裝。nginx-rtmp-module的文檔特地提到了這點。網絡

在編譯nginx的時候,加上參數--with-http_ssl_module。如:./configure --add-module=rtmp模塊的源碼位置 --with-http_ssl_moduleapp

 

 

五、推流客戶端工具:ffmpeg。Ffmpeg工具下載官網:http://www.ffmpeg.org/download.htmlide

六、拉流播放工具:須要一個很經常使用的流媒體播放工具VLC。下載地址:http://www.videolan.org/vlc/

 

2、編譯nginx

 

解壓nginx。進入到nginx源碼目錄,執行以下命令:

 

第一步:

 

./configure --prefix=nginx安裝到哪一個目錄 

--with-pcre=pcre庫的源碼目錄,注意是源碼目錄  

--add-module=rtmp模塊的源碼目錄

 

注:預先將pcre庫、rtmp模塊解壓。以便上面使用。

 

通常兩種壓縮包。命令不一樣,以下:

 

tar.gz包命令:tax -xzvf 軟件包

zip包:unzip 軟件包

 

 

第二步:

 

make && make install

 

 

3、配置nginx

 

配置nginx.conf,增長rtmphttp是同級別的,內容以下:

user  root;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  error;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}

#服務於rtmp協議的請求 rtmp://開頭
rtmp{

        server{
        
             listen 1395;
             chunk_size 4096;
             #自定義的直播名稱,路徑中將會用到
             #rtmp://192.168.56.88:1395/my_live/rtmpstream中的my_live就是下面定義的名稱
    
             application my_live{
    
                #開啓直播功能
                live on;
#接收的rtmp視頻流是否落地存儲到flv文件,不開啓就直接在內存中,存儲也是一個視頻拆成不少小flv文件 record all; #存儲路徑 record_path /tmp/nginx_rtmp_av; record_max_size 128K; #爲同一個視頻文件的視頻分片加時間戳 record_unique on; }


#hls協議,同樣是一個application後面接着自定義名稱,區別是hls on;

                             application hls {

                                 live on;

                                #開啓hls
                                hls on;

                               #hls的視頻分片文件(.ts)存放路徑

                               hls_path /tmp/nginx_hls_av;


                              #每一個視頻分片文件包含多少秒


                              hls_fragment 5s;


                             #是否清理掉舊的ts文件。默認是開啓的。如今關閉
                             hls_cleanup off;


                             hls_playlist_length 5h;
}


} #這裏能夠加其餘server偵聽其餘端口 } #服務於http請求 http{ }

  

 


注:nginx-rtmp-module在nignx.conf中使用的指令有不少,須要慢慢消化。先搭建一個簡單的骨架。好比還能夠進行hls協議的服務。

使用指令的說明文檔:https://github.com/arut/nginx-rtmp-module/wiki/Directives

 

 

 

 

4、推流和拉流

 

 

怎麼推流

 

使用ffmpeg工具來推流。Ffmpeg是一套開源的庫:視頻採集功能、視頻格式轉換、視頻抓圖、給視頻加水印。不少軟件引入了這個庫來完成視頻的採集、轉碼。

 

命令格式以下:

 

ffmpeg -re -i  E:\test.mp4 -f flv rtmp://192.168.56.88:1395/my_live/rtmpstream

 

上述命令,就會讀取-i參數指定的視頻文件,推流到指定地址去。須要將ffmpeg添加到環境變量中去。或者直接輸入ffmpeg的完整安裝路徑來執行也是能夠的。

 

 

其中,my_live是nginx.conf中配置的直播名稱。rtmpstream是自定義的名稱。後續拉流的時候,就必須使用這個名稱來拉流,nginx-rtmp落地存儲數據(若開啓了)的時候,就是使用這個名稱命名flv文件的。如一個視頻文件才服務器磁盤上被拆成了:rtmpstream-1502794875.flv、rtmpstream-1502794879.flv、rtmpstream-1502794885.flv.................。

 

-r設定幀速率,默認爲25。

 

-i 設定輸入流,也就是讀取哪一個文件推流到服務端。

 

運行命令後,會在命令行看到推流過程:

 

客戶端使用ffmpeg完成視頻的推流,接着能夠在另一端,輸入拉流地址,拉流觀看視頻。

 

怎麼拉流觀看視頻

 

須要一個很經常使用的流媒體工具:VLC。

 

軟件安裝好後(筆者安裝的是window下VLC工具),打開軟件,選擇"打開網絡串流",以下所示:

 

 

輸入拉流的地址,推流和拉流都是同一個地址(說的是rtmp協議)。如:rtmp://192.168.56.88:1395/my_live/rtmpstream

 

 

 到此,完成了,一邊推流,一邊拉流的效果。

 

 

 

特別注意:

 

使用hls方式來推流給nginx,客戶端ffmpeg的參數要不同了:須要增長兩個參數-vcodec copy和-acodec copy。若是沒有這兩個參數,是不會把視頻落地到hls對應的目錄去的。

 以下:

ffmpeg -re -i  E:\test.mp4   -vcodec copy -acodec copy  -f flv rtmp://192.168.56.88:1395/hls/hls_stream

-acodec表示音頻編碼,copy表示不改變編解碼器,只是改封裝器。

-vcodec表示視頻編碼,copy表示不改變編解碼器,只是改封裝器。

相關文章
相關標籤/搜索