环境:centos7、nginx 1.15.2、nginx-rtmp-module(nginx模块)、win7主机,vmvare虚拟机(已安装号centos7系统)
安装前提:centos已安装OpenSSL、pcre、zlib
1、检查依赖文件是否安装
检测openssl:rpm -qa | grep openssl
检测pcre:rpm -qa | grep pcre
检测zlib:rpm -qa | grep zlib
我的机器上都已经安装……继续下一步
2、下载nginx和rtmp模块
使用的是Git下载的,您也可以使用其他方式获得源码,为方便使用,在/home下建立一个source目录
cd /home
mkdir source
下载源码
cd ./source
git clone https://github.com/nginx/nginx.git #从github服务器上将nginx的源代码下载下来
git clone https://github.com/arut/nginx-rtmp-module.git #将rtmp模块的源码下载下来
3、配置nginx的安装
进入nginx目录中,编写一个执行脚本,(也可以直接执行命令)
vim config.sh
#然后输入下面的内容
./auto/configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_flv_module \
--with-http_mp4_module \
--add-module=../nginx-rtmp-module/
./auto/configure是nginx的编译配置文件
每行后面的\告诉解析器接下来的一行与该行是统一个命令
给脚本赋予执行权限 ,并执行脚本
chmod 777 config.sh
./config.sh
一定要加上路径标识
若出现以下界面说明配置没有问题
4、开始编译并安装
make
make install
也可以将两个命令合成一个命令执行:make && make install
若出现错误,可能是gcc、c++编译器没有安装,执行下面的安装命令重新执行上面的命令即可
yum -y install gcc gcc-c++
安装成功后即可,若出现其他错误,请自行解决
5、测试nginx是否安装成功
启动nginx:
/usr/local/nginx/sbin/nginx
其他nginx命令
#重新加载nginx配置文件
/usr/local/nginx/sbin/nginx -s reload
#停止nginx
/usr/local/nginx/sbin/nginx -s stop
使用:netstat -tunpl 命令查看80端口是否监听(该命令可能会报错,请参考下面安装net-tools工具)
查看服务器的ip地址。由于centos7 请使用以下命令查看网络地址信息
ip addr
若想使用ifconfig命令(netstat命令也一样),安装net-tools工具包
yum -y install net-tools
然后通过本地主机访问nginx服务,在浏览器中输服务器的ip地址并回车,若看到以下界面说明nginx已安装成功
若没有出现上面的界面,并且服务器的80端口已正常监听,可能是防火墙的问题,关闭centos7的防火墙,centos7的防火墙默认是firewalld,输入以下命令即可关闭firewalld
service stop firewalld
再次通过浏览器访问服务器ip,若还是不成功,可能是selinux的问题,请自行百度查找关闭selinux的方法
6、配置nginx.conf文件,启用rtmp服务
cd /usr/local/nginx/conf
#编辑nginx文件
vim nginx.conf
#在文件的末尾写入以下内容
rtmp {
server {
#rtmp服务监听的端口
listen 1935;
chunk_size 4096;
#rtmp线路1
application live {
live on;
record off;
}
#直播线路2
application live2 {
live on;
record off;
}
application vod {
play /var/flvs;
}
application vod_http {
play http://192.168.1.135/vod;
}
#是否启用hls协议
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
}
}
配置完成后重新加载nginx的配置,并查看对应的端口是否成功监听
7、测试推流和拉流
推流测试
地址:rtmp://<IP>/live/房间标识
如:rtmp://192.168.1.135/live/test (使用的是rtmp协议,live为配置文件中直播线路的application名称,test为房间标识)
可以使用OBS软件进行推流(百度搜索)
这里我使用的是ffmpeg来进行推流,该软件可以将一个视频文件推到一条直播流中
使用本地主机,下载ffmpeg,下载完成后解压文件,并进入bin目录
为方便,我在bin目录下放了一个MP4的文件,按住shift键,在文件浏览器空白处右击,选择在此处打开命令窗口
在dos窗口中执行下面的命令
ffmpeg -re -i batch.mp4 -c copy -f flv rtmp://192.168.1.135:1935/live/test
出现以下界面说明正在推流,
测试拉流
点击拉流测试进入测试页面
出现以上界面时,在server中填写rtmp的服务器地址,即:rtmp://192.168.1.135/live。在stream中填写房间标识,即:test,然后点击start,若没有问题,稍等一会即可出现视频画面。
若出现以下界面。请更换浏览器
附加:添加权限验证
有些时候我们需要验证这个推流地址是否是拥有者正在使用,则可以添加一个密钥key验证身份,
首先,配置nginx.conf中的rtmp模块
rtmp {
server {
listen 1935;
chunk_size 4096;
#回调数据转发方式
notify_method GET;
application live {
live on;
#开启推流回调验证
publish_notify on;
#回调验证地址
on_publish http://zhibo.zgc.com/api/client/callback;
#record off;
}
application live2 {
live on;
record off;
}
application vod {
play /var/flvs;
}
application vod_http {
play http://192.168.1.135/vod;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
}
}
然后重新载入nginx的配置文件,对应的推流地址为:
rtmp://192.168.1.135/live/test?key=[key]
在对应的回调地址中写验证程序(这里使用的是php),由于刚才配置的回调数据转发方式的GET,这里是有$_GET接收数据
$steam = $_GET['name']; //房间标识名称
$key = $_GET['key']; //接收的密钥
//验证逻辑,check()方法自己定义
$res = check($steam,$key);
if($res){
//验证成功
return ;
}else{
//验证失败,返回一个404错误
header('HTTP/1.0 404 Not Found');
}