天天看點

使用nginx搭建rtmp伺服器

一、軟體需求

1、nginx源碼包  下載下傳位址:http://nginx.org/。筆者下載下傳的是1.10.3。

2、pcre源碼包。這是一個正規表達式庫。nginx會用到這個開源庫來做正則比對。很多軟體都會引用,比如php引擎編譯的時候也會用到。

下載下傳位址:https://ftp.pcre.org/pub/pcre/pcre-8.36.zip

3、nginx-rtmp-module源碼包  

這才rtmp服務真正要的工具。

下載下傳位址:https://github.com/arut/nginx-rtmp-module

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

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

5、推流用戶端工具:ffmpeg。Ffmpeg工具下載下傳官網:http://www.ffmpeg.org/download.html

6、拉流播放工具:需要一個很常用的流媒體播放工具VLC。下載下傳位址:http://www.videolan.org/vlc/

二、編譯nginx

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

第一步:

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

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

--add-module=rtmp子產品的源碼目錄

注:預先将pcre庫、rtmp子產品解壓。以便上面使用。

一般兩種壓縮包。指令不同,如下:

tar.gz包指令:tax -xzvf 軟體包

zip包:unzip 軟體包

第二步:

make && make install

三、配置nginx

配置nginx.conf,增加rtmp與http是同級别的,内容如下:

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

四、推流和拉流

怎麼推流

使用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 設定輸入流,也就是讀取哪個檔案推流到服務端。

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

使用nginx搭建rtmp伺服器

用戶端使用ffmpeg完成視訊的推流,接着可以在另外一端,輸入拉流位址,拉流觀看視訊。

怎麼拉流觀看視訊

需要一個很常用的流媒體工具:VLC。

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

使用nginx搭建rtmp伺服器

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

使用nginx搭建rtmp伺服器

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

特别注意:

使用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表示不改變編解碼器,隻是改封裝器。

-----------------------------------------------

Created By 王滔 專注于網際網路系統開發

原創文章,轉載注明出處,

-----------------------------------------------

繼續閱讀