欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-04 23:41:34
...

一、安装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+nginx-rtmp-module+OBS推流搭建流媒体服务器

当看见这个界面时说明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

 

 

接下来是推流了

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

在设置->串流 中填写信息: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