1. 程式人生 > >使用Nginx+nginx-rtmp-module+OBS推流搭建流媒體伺服器

使用Nginx+nginx-rtmp-module+OBS推流搭建流媒體伺服器

一、安裝Nginx

  1. 下載必備安裝包
  • 建立安裝包存放資料夾
cd
mkdir /usr/source #建立原始碼目錄 後面的原始碼都放在這個目錄
cd source
yum -y install git #安裝git
git clone https://github.com/nginx/nginx.git #從github伺服器上將nginx的原始碼下載下來
git clone https://github.com/arut/nginx-rtmp-module.git #將rtmp模組的原始碼下載下來

當git下載nginx失敗時可以去官網下載後放到伺服器
nginx的官方網站為:http://nginx.org/en/download.html

下載依賴模組原始碼pcre、OpenSSL、zlib 如果機器上已經安裝了這些模組就不需要了
wget https://www.openssl.org/source/openssl-1.1.0.tar.gz #下載OpenSSL原始碼包
wget https://ftp.pcre.org/pub/pcre/pcre-8.39.tar.gz #下載pcre原始碼包
wget http://www.zlib.net/zlib-1.2.11.tar.gz #下載zlib包原始碼、

  • 對壓縮包進行解壓並安裝Nginx
cd /usr/source

tar -zxvf 包名  #解壓各個包原始碼

我這裡採用的Nginx版本為nginx-1.9.9  因此我們進入的 cd /usr/source/nginx-1.9.9 進入資料夾後進行./configure操作

./configure --prefix=/usr/local/nginx \ #nginx安裝路徑
        --with-pcre=../pcre-8.39 \ #pcre檔案路徑 
        --with-openssl=../openssl-1.1.0 \ #openssl檔案路徑 
        --with-zlib=../zlib-1.2.11 \ #zlib檔案路徑 
        --with-http_v2_module \
        --with-http_flv_module \
        --with-http_mp4_module \
        --add-module=../nginx-rtmp-module/ #nginx-rtmp-module模組

根據自己原始碼包的版本填寫相應的路徑以及資料夾名!!!

./configure完成後就可以進行安裝了

為了確保依賴的gcc和c++存在我們可以先執行安裝gcc跟c++

yum -y install gcc #確保依賴的gcc安裝
yum -y install gcc-c++ #確保依賴的c++已經安裝
make && make install

安裝完成後需要把伺服器的80埠開啟 直接輸入地址訪問 檢視Nginx是否安裝成功!

當看見這個介面時說明Nginx安裝成功了

  • rtmp相關配置 
新建hls_path資料夾
mkdir -p /usr/share/nginx/html/hls #該路徑可以自定義 需要與Nginx內的rtmp配置的hls_path路徑一致

 修改Nginx配置檔案

vi /usr/local/nginx/conf/nginx.conf  

 加入以下內容rtmp模組:(rtmp{}的內容和http{}為同級)

rtmp  {
    server {    
        listen 1935;  #監聽的埠  
        chunk_size 4000;      
        application hls {  #rtmp推流請求路徑  
            live on;    
            hls on;    
            hls_path /usr/share/nginx/html/hls;    
            hls_fragment 5s;    
        }    
    }
}

修改http中的server模組可以根據自己的需求進行修改{location部分}

server {
        listen       80;
        server_name  localhost;

    	location / {  
	     add_header Cache-Control no-cache;
	     add_header 'Access-Control-Allow-Origin' '*' always;
	     add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
	     add_header 'Access-Control-Allow-Headers' 'Range';
	     root   /usr/share/nginx/html;  
	     index  index.html index.htm;  
	    } #主要修改這一部分程式碼

        location = /50x.html {
            root   html;
        }

    }

修改完畢重啟Nginx

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

 

 

接下來是推流了

在設定->串流 中填寫資訊:URL為 rtmp://xxx:1935/hls,xxx為你的伺服器的IP地址,hls是用來存放流媒體的。

祕鑰可以隨便填寫一個,用來播放的時候識別播放哪個流媒體的,例如填寫mystream。

填寫完畢後,點選開始串流,就說明我們的流媒體伺服器搭建成功了。

開啟/usr/share/nginx/html/hls,裡面出現mystream.m3u8說明推流正常接下來我們就可以拉流播放了

 

拉流播放我們可以使用H5的vedio標籤就可以實現播放

也可以訪問http://xxx:81/hls/mystream.m3u8來觀看直播

當你在瀏覽器輸入你的播放地址時候你會發現竟然是把mystream.m3u8下載下來!

因為pc不支援m3u8,所以需要使用video.js   地址 https://github.com/videojs/video.js

新建html頁面 程式碼如下

<link href="//vjs.zencdn.net/7.0/video-js.min.css" rel="stylesheet">
<script src="//vjs.zencdn.net/7.0/video.min.js"></script>
<script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
<video
    id="my-player"
    class="video-js"
    controls
    preload="auto"
    poster="//vjs.zencdn.net/v/oceans.png"
    data-setup='{}'>
	 <source
     src="http://ip地址:埠(預設80)/hls/mystream.m3u8"(你的流祕鑰)
     type="application/x-mpegURL">
  <p class="vjs-no-js">
    To view this video please enable JavaScript, and consider upgrading to a
    web browser that
    <a href="http://videojs.com/html5-video-support/" target="_blank">
      supports HTML5 video
    </a>
  </p>
</video>
<script>
var player = videojs('my-player');
var options = {};
 
var player = videojs('my-player', options, function onPlayerReady() {
  videojs.log('Your player is ready!');
 
  // In this context, `this` is the player that was created by Video.js.
  this.play();
 
  // How about an event listener?
  this.on('ended', function() {
    videojs.log('Awww...over so soon?!');
  });
});
</script>

儲存後放到nginx配置的root目錄下即可成功訪問並拉流播放了。

直播存在一定的延遲 這是因為.m3u8檔案,這個檔案內容是將一個個ts檔案串聯起來的,這就達到了一個播放的效果,所以看起來會有很大的延遲。

延遲解決方案 :可以設定切片生成的大小以及訪問的速度,但是這樣大大增加了伺服器的壓力。

當然,我們也可以用rtmp拉流工具(VLC播放器)來觀看直播,延遲會縮短,拉流地址與推流地址一致。

特別提示:需要外部訪問的埠我們都需要開啟 請根據自己的需要將相應的埠開啟即可!

rtmp的引數可以參考:https://github.com/arut/nginx-rtmp-module/wiki