使用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
 

猜你喜欢

转载自blog.csdn.net/u011247322/article/details/81410390