参考搭建文档地址: https://www.cnblogs.com/suiyuewuxin/p/7256972.html
一、nginx安装环境
nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境。
- gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:
- 在线安装yum install gcc-c++ 这种是可以访问外网的才可以安装
- 查看命令:gcc –version,出现下图则已经安装过
- PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
- 在线安装 yum install -y pcre pcre-devel 命令,可以访问外网才可以这样安装
- 在内网安装方式
去该网站下载相应的安装包
https://ftp.pcre.org/pub/pcre/
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
- zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
- 在线安装 yum install -y zlib zlib-devel 命令,可以访问外网才可以这样安装
- 在内网安装方法
去该网站下载安装包
- openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
- 在线安装 yum install -y openssl openssl-devel 命令,可以访问外网才可以这样安装
- 在内网安装方法
去该网站下载安装包
离线安装步骤: https://blog.csdn.net/WuXianYuYongHeng/article/details/53781657
二、搭建nginx流服务器
1、将nginx-1.8 和nginx-rtmp-module 上传到服务器
2、nginx-rtmp-module上传到安装nginx的目录
3、Nginx-1.8上传 再解压到安装nginx的目录 tar –zxvf nginx-1.8.0.tar.gz –C/home/admin/local
4、再进去解压后的nginx-1.8目录
cd nginx-1.8.0
5、首次安装nginx,先安装 configure
configure
./configure --help查询详细参数(参考本教程附录部分:nginx编译参数)
参数设置如下:
./configure \
--prefix=/home/admin/local/nginx \
--pid-path=/home/admin/local/nginx/logs/nginx.pid \
--lock-path=/home/admin/local/nginx/lock/nginx.lock \
--error-log-path=/home/admin/local/nginx/logs/error.log \
--http-log-path=/home/admin/local/nginx/logs/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/home/admin/local/client \
--http-proxy-temp-path=/home/admin/local/nginx/proxy \
--http-fastcgi-temp-path=/home/admin/local/nginx/fastcgi \
--http-uwsgi-temp-path=/home/admin/local/nginx/uwsgi \
--http-scgi-temp-path=/home/admin/local/nginx/scgi
遇到的错误
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
安装:
yum -y install pcre-devel 遇到的错误 则需要安装
pcre-devel-8.32-17.el7.x86_64: [Errno 256] No more mirrors to try.
根据系统的版本查询对应的版本安装
http://rpmfind.net/linux/rpm2html/search.php?query=pcre-devel
安装命令: rpm -i pcre-devel-7.8-7.el6.x86_64.rpm
6、再执行 make 命令
7、再执行 make install 命令
8、再执行命令:
./configure --prefix=/home/admin/local/nginx --add-module=/home/admin/local/nginx-rtmp-module --with-http_ssl_module
查看一下是否添加了nginx-rtmp-module
5、再执行 make 命令
6、再执行 make install 命令
7、修改: nginx/conf目录下的 nginx.conf配置文件内容
rtmp {
server {
listen 1935;
chunk_size 8192;
application live {
live on;
#开始推流回调,url地址为java接口
on_publish http://localhost:8089/vin/auth;
}
#hls配置
application hls {
live on;
hls on;
hls_path /home/admin/local/nginx/hls; #存放流视频的文件夹
#开始推流回调,url地址为java接口
#on_publish http://localhost:8089/cloudLive/vin/auth;
#推流停止回调,url地址为java接口
#on_done http://localhost:8089/cloudLive/vin/auth;
}
#rtmp日志设置
access_log logs/rtmp_access.log ;
}
}
关于推流的日志:详询说明地址:https://github.com/arut/nginx-rtmp-module/wiki/Directives#access-log
访问日志
语法:access_log off|path [format_name]
Context:rtmp,server,application
设置访问日志参数。默认情况下会启用日志记录。关闭它使用access_log off
指令。默认情况下,访问日志记录与HTTP访问记录器(logs/access.log
)完成相同的文件。您可以在access_log
指令中指定另一个日志文件路径。第二个参数是可选的。它可用于按名称指定日志记录格式。log_format
有关格式的更多详细信息,请参阅指
log_format new '$remote_addr';
access_log logs/rtmp_access.log new;
access_log logs/rtmp_access.log;
access_log off;
log_format
语法:log_format format_name format
Context:rtmp
创建命名日志格式。日志格式与nginx HTTP日志格式非常相似。日志格式支持几个变量:
connection
- 连接号码remote_addr
- 客户地址app
- 应用名称name
- 最后一个流名称args
- 最后一个流播放/发布参数flashver
- 客户端flashVerswfurl
- 客户端swfUrltcurl
- 客户tcUrlpageurl
- 客户端页面.Urlcommand
-播放/发布客户机发送命令:NONE
,PLAY
,PUBLISH
,PLAY+PUBLISH
bytes_sent
- 发送到客户端的字节数bytes_received
- 从客户端收到的字节数time_local
- 客户端连接结束时的本地时间session_time
- 连接持续时间(秒)session_readable_time
- 人类可读格式的连接持续时间msec
- SEC.MSEC格式的当前unix时间戳
默认日志格式具有名称combined
。这是这种格式的定义
$remote_addr [$time_local] $command "$app" "$name" "$args" -
$bytes_received $bytes_sent "$pageurl" "$flashver" ($session_readable_time)
8、进入 nginx的sbin目录执行命令 ./nginx -c /home/admin/local/nginx/conf/nginx.conf
再启动nginx
./nginx
退出nginx
./nginx -s quit
-------------------------------------------------------------------------------------------------------------------------
以上是服务器的配置
两种后台验证方式,第一种是推流url带参数方式实现
二、编写后台java代码,使用springboot框架写的后台。
@Controller
@RequestMapping(value = "/vin")
public class AuthController {
@RequestMapping(value = "/auth", method = RequestMethod.POST)
@ResponseBody
public String hello(String vin, HttpServletRequest request,HttpServletResponse response) {
System.out.println("vin="+ vin);
if(vin.equals("1234567890")){
System.out.println("返回编号为200");
return "{\"code\":\"200\",\"detail\":\"SUCCESS\"}";
}else{
response.setStatus(500);
System.out.println("返回编号为500");
return "{\"code\":\"500\",\"detail\":\"auth error\"}";
}
}
}
这样你推流的时候就会先进入验证的方法如果不成功就回返回500断开连接,成功则返回200可以继续直播,如果不想验证的话就把on_publish去掉就可以了
三、再使用ffmpeg推流
可以参考的地址:https://www.jianshu.com/p/eacfc0a9f2fd 感谢这位博主的文章
使用ffmpeg将视频转成流资源命令:
ffmpeg -re -i orange.mp4 -vcodec libx264 -acodec aac -f flv rtmp://10.9.160.147:1935/live/home?vin=1234567890
已经在推流
看java后台输出,说明验证成功
拉流使用VLC
观看视频流程
第二种是 我这边项目要求是,手机端调用后台生成推流地址,如:rtmp://10.9.160.147:1935/live/1234567890,其中1234567890可以用uuid生成,这样每次推流地址都不一样,有效防止推流地址固定,摄像头就推流到这个地址,通过下面java验证是最好的方法。有效验证方式:生成的推流地址uuid为1234567890,我们存入缓存如redis和数据库中,摄像头那边推流,我们通过服务配置 on_publish参数,获取推流参数与缓存如redis和数据库的值,做比较是否存在,存在则验证通过成功,不存在则推送失败。
二、编写后台java代码,使用springboot框架写的后台。
@Controller
@RequestMapping(value = "/vin")
public class AuthController {
@RequestMapping(value = "/auth", method = RequestMethod.POST)
@ResponseBody
public String hello(HttpServletRequest request,HttpServletResponse response) {
String name = request.getParameter("name");
System.out.println("name:"+name);
if(name.equals("1234567890")){
System.out.println("返回编号为200");
return "{\"code\":\"200\",\"detail\":\"SUCCESS\"}"; // 流媒体服务器认证通过必须返回200 流媒体服务器才可以继续推流
}else{
response.setStatus(500);
System.out.println("返回编号为500");
return "{\"code\":\"500\",\"detail\":\"auth error\"}";
}
}
}
这样你推流的时候就会先进入验证的方法如果不成功就回返回500断开连接,成功则返回200可以继续直播,如果不想验证的话就把on_publish去掉就可以了
三、再使用ffmpeg推流
可以参考的地址:https://www.jianshu.com/p/eacfc0a9f2fd 感谢这位博主的文章
使用ffmpeg将视频转成流资源命令:
切换到D盘的live目录,里面有orange.mp4视频资源,再执行命令,如下图。
ffmpeg -re -i orange.mp4 -vcodec libx264 -acodec aac -f flv rtmp://10.9.160.147:1935/live/1234567890
执行命令:如下意见在推流了