在windows下搭建、配置nginx流媒體服務器,並進行rtmp流的推流、拉流測試

    在博主之前的博文《Ubuntu下安裝、編譯、運行nginx和nginx-rtmp-module》中講述了在linux(Ubuntu)下搭建nginx流媒體服務器的方法。下面講述在windows下搭建nginx流媒體服務器的方法,使其支持rtmp協議的直播以及通過配置支持直播狀態監聽。

 

一、nginx的安裝和配置

    首先我們下載nginx。在nginx官網上下載的nginx是不帶rtmp模塊的,所以我們在http://nginx-win.ecsds.eu/download/中下載nginx 1.7.11.3 Gryphon.zip,如下圖所示。該版本的nginx包含rtmp組件,通過rtmp組件,才能提供流媒體服務,使nginx成爲rtmp流媒體服務器。

 

下載後我們解壓nginx 1.7.11.3 Gryphon.zip,得到nginx 1.7.11.3 Gryphon文件夾。使用命令提示符進入解壓後的路徑下,輸入命令

nginx.exe -v

上述命令的作用是查看nginx版本,輸入上述命令後出現下圖所示信息表示nginx安裝成功

 

我們在nginx 1.7.11.3 Gryphon目錄下新建三個目錄:m3u8File、rec、vod,如下圖所示:

 

然後我們進入nginx 1.7.11.3 Gryphon文件夾的conf目錄下,新建一個文件“nginx.conf”,如下圖所示:

 

打開nginx.conf,輸入如下信息後,保存。


worker_processes  1;   #Nginx進程數,建議設置爲等於CPU總核數

events {
    worker_connections  1024;  #工作模式與連接數上限
}

rtmp_auto_push on;


#RTMP服務
rtmp{
    server{
	    listen 1935;        #服務端口
		chunk_size 4096;    #數據傳輸塊的大小
		
		application vod{
		    play ./vod;   #視頻文件存放位置
		}
		application live{
		    live on;                     #開啓直播
			hls on;                      #開啓hls直播。這個參數把直播服務器改造成實時回放服務器
			#wait_key on;                #對視頻切片進行保護,這樣就不會產生馬賽克了
			hls_path ./m3u8File;         #切片視頻文件存放位置(HLS,m3u8文件存放位置)
			hls_fragment 2s;             #每個視頻切片的時長
			hls_playlist_length 16s;
			recorder myRecord{
			    record all manual;
				record_suffix _.flv;
				record_path ./rec;
			}
			#hls_continuous on;          #連續模式
			#hls_cleanup on;             #對多餘的切片進行刪除
			#hls_nested on;              #嵌套模式
		}
	}
}


#HTTP服務
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /live_hls{
		    types{
			    #m3u8 type設置
				application/vnd.apple.mpegurl m3u8;
				#ts分片文件設置
				video/mp2t ts;
			}
			#指向訪問m3u8文件目錄
			alias ./m3u8File;
			    add_header Cache-Control no-cache; #禁止緩存
		}

        location /control{
		    rtmp_control all;
		}
		
		location /stat{
		    rtmp_stat all;
			rtmp_stat_stylesheet stat.xsl;
		}
		location /stat.xsl{
		    root ./nginx-rtmp-module-master;
		}

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

 

然後我們通過命令提示符在nginx.exe所在的目錄下輸入命令:

nginx.exe -t

該命令的作用是檢查nginx的配置文件是否正確,當輸出如下信息時,表示配置文件nginx.conf正確了。

 

當通過上面的步驟驗證了nginx配置文件的正確性後,我們就可以啓動nginx了。通過命令提示符在nginx.exe所在的目錄下輸入命令:

start nginx

上述命令的作用是載入缺省./conf/nginx.conf配置文件,啓動nginx。輸入完成後,在瀏覽器中輸入nginx所在電腦的ip(該ip地址可以通過ipconfig命令查看,或者直接輸入127.0.0.1localhost,也是可以的),得到下圖所示頁面,則表示nginx啓動成功了。然後用戶可以通過命令nginx.exe -s stop或者nginx.exe -s quit停止nginx。

 

啓動nginx成功的另一個標誌是在nginx 1.7.11.3 Gryphon文件夾的logs目錄下生成nginx.pid文件,如下圖所示:

 

該nginx.pid文件存放的是當前nginx主進程的ID號,打開該文件後可以看到裏面存放着“3980”這個數字,這個數字就是本次啓動nginx主進程的ID號(每次啓動的數字都會不同的)

 

我們可以在任務管理器中查詢到該進程,則表示nginx啓動成功了。

 

 

二、推流測試:

  啓動nginx後,我們就可以進行推流、拉流測試了。推流指的是把採集階段封包好的內容傳輸到服務器的過程,主播端把本地採集的語音視頻流推送到媒體服務器。就是將現場的視頻信號傳到網絡的過程。下面我們使用ffmpeg將媒體文件video3.mp4推流到nginx中,然後通過vlc播放器播放出來。

在windows的命令提示符中執行命令:

ffmpeg -i video3.mp4 -f flv rtmp://127.0.0.1/live/test1

其中-i 表示輸入流。這裏的輸入流是video3.mp4。-f 表示設定的輸出格式。這裏因爲推流爲rtmp流得使用flv格式,所以設成-f flv。因爲是本機測試,所以推流的IP地址填127.0.0.1(也可以填用ipconfig命令查看到的nginx所在電腦的ip),推流地址爲rtmp://127.0.0.1/live/test1。關於"live"目錄,詳情可見《 關於使用FFmpeg推流時,live目錄的理解》。上述語句的意思是通過ffmpeg將媒體文件video3.mp4轉換成rtmp流,推流到本機的nginx服務器中。

執行完上述命令,會出現如下界面,表示推流成功了。

 

 

三、拉流測試

  拉流指的是用戶端從服務器拉取語音視頻流到客戶端播放。下面我們會通過vlc拉流nginx中的語音視頻流,然後在vlc播放。執行完上述推流的步驟後,我們在windows中打開vlc,點擊“打開網絡串流”,如下圖所示:

 

輸入網絡URL,如下圖所示(因爲是本機測試,所以IP地址填127.0.0.1,也可以填用ipconfig命令查看到的nginx所在電腦的ip))

 

可以看到在vlc中出現視頻畫面了,表示拉流成功了

 

四、進行直播狀態監聽

    我們在https://github.com/arut/nginx-rtmp-module/,下載nginx-rtmp-module-master.zip,解壓後複製到目錄:nginx 1.7.11.3 Gryphon下,如下圖所示:

在nginx-rtmp-module-master目錄下,我們可以看到有個文件stat.xsl。這正好對應於配置文件nginx.conf中的設置,如下圖所示:

 

然後我們在瀏覽器中輸入http://127.0.0.1/stat。如下圖所示,在下面的頁面中我們就可以進行直播狀態監聽了。

 

五、遇到的問題和注意事項

1.啓動nginx報錯,如下圖所示。產生該問題的原因爲nginx安裝路徑含有中文,選一個不含中文的路徑安裝即可解決這個問題。

 

2.使用vlc拉流播放視頻會很卡,而且會很模糊。我們改變ffmpeg推流的命令,如下所示,再拉流播放,即可緩解這個問題。

ffmpeg -re -i video3.mp4 -vcodec h264 -acodec copy -f flv rtmp://127.0.0.1/live/test1

 

3.nginx服務器默認佔用的端口爲1935(rtmp服務端口)和80(http端口)(這兩個端口可以從配置文件nginx.conf中更改)。啓動nginx前請在命令提示符中用"netstat -ano"命令查看這兩個端口是否已經被佔用,保證這兩個端口沒有被其它程序佔用

 

4.啓動nginx前最好要關閉所在電腦的防火牆

 

 

六、其它相關文章的鏈接

    1.本文僅僅講述使nginx支持rtmp協議的直播的方法。要想使其支持hls協議的直播和rtmp點播,請參考:《在windows下配置nginx流媒體服務器,使其支持hls協議的直播和rtmp點播

    2.本文講述的是在windows下安裝,配置nginx的例子。下面的兩篇文章講述的是在linux下安裝、配置nginx的方法

Ubuntu下安裝、編譯、運行nginx和nginx-rtmp-module》,《使用FFmpeg將視頻推流到nginx,通過vlc拉流播放(通過命令的方式)

    3.本文搭建出來的nginx是隻能在局域網(內網)內訪問,要想實現外網也能訪問,可以參考文章《將nginx部署在阿里雲上實現公網訪問本地nginx、外網推流播放音視頻流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章