一、nginx的安装和配置

  在nginx官网下载的nginx是不带rmtp模块,因此要去http://nginx-win.ecsds.eu/download/下载nginx 1.7.11.3 Grouphon.zip,该版本包含了rtmp组件,该组件可以提供流媒体服务,使nginx成为rtmp流媒体服务器。

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_docker 推流 rtsp 服务器

 

 

 将下载的安装包解压到我们想要放在的路径,在该路径下打开命令行输入

nginx.exe -v

该命令是用来查询版本号,输入该命令后出现下图所示信息表示nginx安装成功

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_docker 推流 rtsp 服务器_02

 

 

 在nginx 1.7.11.3 Gryphon目录下创建三个文件夹,分别是m3u8File、rec、vod

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_nginx_03

 

 

 

 

 然后进入nginx文件夹中创建nginx.conf文件

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_html_04

 

 

 打开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;    #指定录制的flv文件存放目录
            }
            #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配置是否正确,在命令行中输入

nginx.exe -t

当输出以下信息,表示nginx配置正确

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_html_05

 

 验证配置文件正确后,开始启动nginx,在nginx.exe所在目录输入命令

start nginx

该命令的作用是载入缺省./conf/nginx.conf配置文件,启动nginx。验证nginx启动成功,在浏览器中输入nginx所在电脑的ip地址\输入127.0.0.1\localhost,得到下图页面,即为启动成功。

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_html_06

 

 还可以通过查看目录下的logs目录是否生成nginx.pid文件检验是否启动成功,nginx.pid文件中存储的是每次启动主进程的ID号(每次启动都不一样)

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_docker 推流 rtsp 服务器_07

 

也可以在任务管理器中查看nginx进程是否存在。

 

 二、推流测试

  推流值得是把采集阶段包好的内容传输到服务器的过程。主播端把本地采集的语音视频推送到媒体服务器。就是将现场的视频信号传导网络的过程。

1.下面将使用ffmpeg将媒体文件a.mp4推流到nginx中,然后通过vlc播放器播放出来。

  在winodws的命令提示符中执行命令:

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_html_08

 

 

 -i表示输入流。这里的输入流是a.mp4。-f表示设定的输出格式。因为i这里推流为rtmp流得使用格式为flv,所以设置为-f flv。这次为本机测试,故将推流IP地址设为127.0.0.1.

执行完上述命令,会出现如下界面,表示推流成功

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_docker 推流 rtsp 服务器_09

 

2.使用OBS推流

进入设置界面,在设置界面中选择推流进行设置。这里推流为rtmp流所以服务器输入rtmp://127.0.0.1/live,串流密钥输入任意输入(若为自定义推流,若为其他服务器\第三平台需要在其服务器\平台得到串流密钥\服务器)

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_docker 推流 rtsp 服务器_10

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_nginx_11

 

 

 

 

三、拉流测试

拉流是指的是用户端从服务器拉取语音视频流到客户端播放。下面我们会通过vlc拉流 nginx中得语音视频流,然后再vlc播放。执行完上述推流得步骤后,我们再Windows中打开vlc,点击“打开网络串流”,如下图所示

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_html_12

输入网络URL,如下图所示(根据推流得IP地址输入,OBS需要服务器+串流密钥)

 

 

 

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_服务器_13

 

 

 

可以在vlc中看到推送得视频,表示拉流成功。

四、进行直播状态监听

我们在https://github.com/arut/nginx-rtmp-module/,下载nginx-rtmp-module-master.zip,解压后复制到目录:nginx 1.7.11.3 Gryphon下,如下图所示:

 

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_nginx_14

 

 

在nginx-rtmp-module-master目录下,我们可以看到有个文件stat.xsl。这正好对应于配置文件nginx.conf中的设置,如下图所示:

 

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_nginx_15

 

 

 

然后我们在浏览器中输入http://127.0.0.1/stat。如下图所示,在下面的页面中我们就可以进行直播状态监听了。

 

 

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_服务器_16

五、遇到的问题和注意事项
1.启动nginx报错,如下图所示。产生该问题的原因为nginx安装路径含有中文,选一个不含中文的路径安装即可解决这个问题。

 

docker 推流 rtsp 服务器 rtmp服务器搭建 推流拉流_服务器_17

 

 

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前最好要关闭所在电脑的防火墙