基于Nginx搭建RTMP/HLS视频直播流媒体服务器

1,Nginx环境搭建(基于lnmp环境)

lnmp环境一键安装脚本
按照教程安装!
下载并安装lnmp环境,可以根据该网站的安装步骤进行

wget -c http://soft.vpser.net/lnmp/lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp

安装完成后访问服务器地址会出现如下界面
基于Nginx搭建RTMP/HLS视频直播流媒体服务器_第1张图片

安装时生成的解压文件夹lnmp1.3先别删除!

2,安装Nginx的扩展rtmp模块

github下载 nginx-rtmp-module
下载的时候注意要在Linux的服务器上安装好GIT中后下载不要先下载到窗户后在上传到的Linux服务器会报错:

nginx: [emerg] unknown directive “rtmp” in xxxxx

这问题由两个方面造成,先确保安装rtmp模块的时候没有报错,其次是配置文件的编码最好是ASCII文本,可以使用文件nginx.conf指令查看一下。我的问题是第一个,安装的时候有报错:

报了大量的   $'\r': command not found

回忆了一下犯了个错误,我是在窗户下的git拉下来考到服务器上的,中间文件换编码了。。 。。切记切记。。。要直接从Linux的混帐克隆下来再安装。

[root@localhost ~]# nginx -V   //查看nginx的配置参数

基于Nginx搭建RTMP/HLS视频直播流媒体服务器_第2张图片

复制配置参数:后的所有参数!例如:

复制configure arguments:后的所有参数!
例如:--user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module

关闭nginx,php-fpm服务

//关闭nginx
service nginx stop
//关闭php-fpm
service php-fpm stop

进入安装时生成的文件夹:./lnmp1.3/src目录

//解压nginx源码包
tar -xzvf nginx-1.10.0.tar.gz
//进入nginx源码目录
cd nginx-1.10.0
//安装rtmp扩展模块
./configure  刚才复制的nginx configure参数  --add-module=rtmp扩展包目录
如:
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --add-module=/usr/local/nginx/extend_module/nginx-rtmp-module
//编译
make
//安装
make install
//重启nginx
service nginx start
service php-fpm start
//查看安装状态
nginx -V

基于Nginx搭建RTMP/HLS视频直播流媒体服务器_第3张图片

!上图如果出现nginx-rtmp-module说明安装成功!

3、配置rtmp

进入cd /usr/local/nginx/conf 目录

//编辑配置
vim nginx.conf

加入 rtmp

rtmp{} 和 http{} 是同一级

rtmp {    
    server {
        listen 1935;  
        chunk_size 4000;
        application hls { 
            live on;
            hls on;
            hls_path /home/wwwroot/default/hls;    
            hls_fragment 5s;    
        }
    }
}

#参数说明:

#rtmp              是协议名称
#server            说明内部中是服务器相关配置
#listen            监听的端口号, rtmp协议的默认端口号是1935
#application       访问的应用路径是 hls
#live on;          开启实时
#hls on;           开启hls
#hls_path;         rtmp推流请求路径,文件存放路径
#hls_fragment 5s;  每个TS文件包含5秒的视频内容
#record off;       不记录数据

开始推流

做好以上的配置后,就可以开始推流了,我们可以使用obs来推流。
可以百度一下 “obs直播软件” 下载
基于Nginx搭建RTMP/HLS视频直播流媒体服务器_第4张图片
在设置->串流 中填写信息:URL为 rtmp://xxx:1935/hls,xxx为你的服务器的IP地址,hls是用来存放流媒体的。
秘钥可以随便填写一个,用来播放的时候识别播放哪个流媒体的,例如填写mystream。
填写完毕后,点击开始串流,就说明我们的流媒体服务器搭建成功了。
打开/usr/share/nginx/html/hls,里面出现mystream.m3u8说明推流正常了

观看直播(拉流)

观看直播就比较简单了,可以简单的使用H5的录象标签就可以观看了。可以访问HTTP:// XXX:81 / HLS / mystream.m3u8来观看直播,其中XXX为你的服务器IP地址,因为pc不支持m3u8,所以使用video.js地址https://github.com/videojs/video.js新建一个test.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://x.x.x.x:81/hls/123.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>  

然后使用手机访问这个网站就能够观看直播了。延迟大概在20S左右。
基于Nginx搭建RTMP/HLS视频直播流媒体服务器_第5张图片
(m3u8文件内容)
如果降低延迟也不是没有方法,可以设置切片生成的大小以及访问的速度,但是这样大大增加了服务器的压力。
当然,我们也可以用rtmp拉流工具(VLC等)来看该直播,延迟大概在2-5S左右,拉流地址与推流地址一致。

你可能感兴趣的:(nginx,服务器,linux)