Nginx与Nginx-rtmp-module搭建RTMP视频直播和点播服务器
一.开发环境
Nginx地址: http://nginx.org/download/nginx-1.14.2.tar.gz
Nginx-rtmp-module地址: https://github.com/arut/nginx-rtmp-module
二.执行安装命令
备份nginx原文件
cp /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/nginx/sbin/nginx.bak.201812.1.rtmp
下载模块并解压:
cd /thirdparties wget https://github.com/arut/nginx-rtmp-module/archive/master.zip unzip master.zip
添加模块并编译openresty(注意:重新编译的时候,记得一定要把以前编译过的模块一同加到configure参数里面)
查看原来的模块
/usr/local/openresty/nginx/sbin/nginx -V
cd /thirdparties/openresty-1.11.2.2 ./configure --prefix=/usr/local/openresty --add-module=/thirdparties/nginx-rtmp-module-master --with-http_ssl_module
make
停止nginx
/usr/local/openresty/nginx/sbin/nginx -s stop
备份nginx原文件
mv /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/nginx/sbin/nginx.bak.201812.origin.rtmp
将编译后的nginx文件覆盖原文件并重启nginx
cp /thirdparties/openresty-1.11.2.2/build/nginx-1.11.2/objs/nginx /usr/local/openresty/nginx/sbin
/usr/local/openresty/nginx/sbin/nginx
查看module是否已经加入到nginx
/usr/local/openresty/nginx/sbin/nginx -V
三.nginx的配置
在添加完模块后nginx的配置文件( /usr/local/nginx/conf/nginx.config)中要增加对rtmp的配置
与http {... ...}同级的地方配置rtmp
events {
use epoll;
worker_connections 1024;
}
#RTMP服务
rtmp {
server {
listen ; #//服务端口
chunk_size ; #//数据传输块的大小
application vod {
play /opt/video; #//视频文件存放位置。
}
#直播
application live{
live on;
record off; #on时将流转换成flv视频文件
#record all;
record_path /opt/video/hls;
#record_max_size 50M;
record_max_size 2M;
notify_method get;#鉴权
on_publish http://localhost:8081/chat_auth;#鉴权
hls on; #这个参数把直播服务器改造成实时回放服务器。
wait_key on; #对视频切片进行保护,这样就不会产生马赛克了
hls_path /opt/video/hls; #切片视频文件存放位置
hls_fragment 600s; #设置HLS片段长度
hls_playlist_length 1m; #设置HLS播放列表长度,这里设置的是10分钟
hls_continuous on; #连续模式
hls_cleanup on; #对多余的切片进行删除
hls_nested on; #嵌套模式
allow play all;
}
}
}
http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout ;
keepalive_timeout ; #gzip on; server {
listen ;
server_name rtmp_server; #charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
index index.html index.htm;
}
location /chat_auth {
proxy_pass https://api.xxxx.com/item_chat_api/v1/account/platform/auth;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page /.html; # redirect server error pages to the static page /50x.html
#
error_page /50x.html;
location = /50x.html {
root html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen ;
# listen somename:;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }
注意:
1. 如果不存在文件夹“/opt/video”、“/opt/video/hls”则要创建一个,并且要改成可读可写的权限(chmod 777 /opt/video)
2. 防火墙是否通:
iptables -I INPUT -p tcp -m state --state NEW --dport 1935 -j ACCEPT #放行1935端口的 NEW状态请求
service iptables save #保存规则
service iptables restart #重启防火墙保证新的规则加载进来
参考:
https://blog.csdn.net/qzcsu/article/details/72782759
https://blog.csdn.net/qq_36510261/article/details/78971387
https://blog.csdn.net/zhiyuan_2007/article/details/52003713
https://www.cnblogs.com/lidabo/p/7099501.html
java代码鉴权:
@ResponseBody()
@RequestMapping(value="/auth", method={RequestMethod.GET,RequestMethod.POST})
public void auth(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = true)String auth_key,
@RequestParam(required = false) String jsonpcallback) {
//openId$userId$orderId
logger.info("auth auth_key:{}",auth_key);
RpcResponseDTO<Boolean> rpcResult = new RpcResponseDTO<>();
String fail= "{\"code\":\"500\",\"detail\":\"sys error\"}";
String succ= "{\"code\":\"200\",\"detail\":\"SUCCESS\"}";
String result = fail;
if (StringUtils.isEmpty(auth_key)) {
response.setStatus(500);
}else {
String[] auth = auth_key.split("\\$");
logger.info("auth auth[0]:{},auth[1]:{},auth[2]:{}",auth[0],auth[1],auth[2]);
if (auth.length!=3) {
response.setStatus(500);
}else {
RtmpAuthParam param = new RtmpAuthParam();
param.setOpenId(auth[0]);
param.setUserId(Long.parseLong(auth[1]));
param.setOrderId(Long.parseLong(auth[2]));
rpcResult = platformAccountRpcService.validateRtmpAuth(Request.build(param));
logger.info("auth rpcResult:{}",JsonHelper.getJSONString(rpcResult));
if (!rpcResult.hasError()&&rpcResult.getPayload()!=null&&rpcResult.getPayload()) {
response.setStatus(200);
result = succ;
}else {
response.setStatus(500);
}
}
}
logger.info("auth result:{}",result);
SpringMVCHelper.renderText(response,result);
}
Nginx与Nginx-rtmp-module搭建RTMP视频直播和点播服务器的更多相关文章
- 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器
使用 nginx 和 rtmp 模块 ,可以很容易地搭建一个视频直播和点播服务器出来. 首先,看一下最经典的参考文献: How to set up your own private RTMP serv ...
- 利用Nginx搭建RTMP视频直播,点播服务器,ffmpeg推流,回看
一.环境和工具 ubuntu 14.04 desktop 不用server的原因是一部分的演示用到了linux视频播放和直播软件,自己还要装桌面,麻烦. 不建议使用 最新的16TLS,我一开始 ...
- 在Windows下搭建基于nginx的视频直播和点播系统
http://my.oschina.net/gaga/blog/478480 一.软件准备 由于nginx原生是为linux服务的,因此官方并没有编译好的windows版本可以下载,要在windows ...
- EasyDSS流媒体服务器软件(支持RTMP/HLS/HTTP-FLV/视频点播/视频直播)-正式环境安装部署攻略
EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作. 其中,点播功能主要包含:上传.转码.分发.直播功能,主要包含:直播.录像, 直播支持RTMP ...
- 基于开源Red5搭建的视频直播平台
开始之前,为了便于大家了解Red5,此处引用网络文字,非原创 引言 流媒体文件是目前非常流行的网络媒体格式之一,这种文件允许用户一边下载一边播放,从而大大减少了用户等待播放的时间.另外通过网络播放流媒 ...
- Centos7.5 搭建Red5视频直播服务器
一.安装java环境 yum install java-1.7.0-openjdk 详细步骤请参考 http://www.cnblogs.com/java-qzq/p/5845509.html 我的这 ...
- flex4+fms3.5+cs4开发实时音视频直播及点播详解
开发工具及环境: 1)flash builder4 2)flash cs4 3)flash media server3.5 fms部分 fms是adobe的流媒体服务器,不过是收费的,价格大概是ora ...
- Android使用FFMpeg实现推送视频直播流到服务器
背景 在过去的2015年中,视频直播页的新宠无疑是户外直播.随着4G网络的普及和覆盖率的提升,主播可以在户外通过手机进行直播.而观众也愿意为这种可以足不出户而观天下事的服务买单.基于这样的背景,本文主 ...
- [RTMP] 国内各大视频直播CDN厂商推流抢流行为分析
背景 当存在一个推流客户端正在向rtmp://xxx.com/live/yyy推流时,又有另外一个推流客户端同时对这个地址进行推流,会发生什么呢? 查阅了 Adobe RTMP Spec 发现规范本身 ...
随机推荐
- 使用一年ESB感受
ESB(Enterprise service bus)-----企业服务总线的简写. 目前使用的是openESB,Sun公司的开源社区提供的,集成在netbean中,使用glassFish服务器. 先 ...
- .Net 从零开始构建一个框架之基本实体结构与基本仓储构建
本系列文章将介绍如何在.Net框架下,从零开始搭建一个完成CRUD的Framework,该Framework将具备以下功能,基本实体结构(基于DDD).基本仓储结构.模块加载系统.工作单元.事件总线( ...
- ②泡茶看<数据结构>,喜欢看源码-栈ADT
前言 听着天籁,我是个音乐迷.时间充实着,会过得很快.我马上也可以到傍晚的时候去乐室吹我心爱的萨克斯. 嘟嘟嘟... 我会吹一首简单的歌咯,哈哈我想到了一个神奇的比喻,待会说. 栈ADT模型(又称LI ...
- java数据类型大转换
1.字符串类型向整形转换 int age = Integer.parseInt(strAge); 2 int -> String int i=12;String s="";第 ...
- 一次Linux自动化部署尝试
最近做一个项目临近测试,购买的是阿里云的服务器,每次部署都是手动打包war,然后上传到服务器,然后修改配置文件,不仅繁琐,而且费时,就思索着找一个一键式的部署方式,今天终于腾出时间来做这件事,记录一下 ...
- linux下umask的使用讲解
最近开始学习linux ,看完马哥的linux课程关于umask的这个部分, 写这篇博客希望加深下我对umask的理解 和对umask不太清楚的博友一些帮助. 1 umask 是什么 当我们登录系统之 ...
- 【原创】《windows驱动开发技术详解》第4章实验总结一
目录 1 实验要求 2 编写过程 2.1 确立整体架构 2.1.1 入口函数——DriverEntry 2.1.2 自定义创建设备函数——CreateDevice 2.1.3 卸载函数——Driver ...
- MySQL数据库——表操作
I.表操作 一.创建表 基本语法如下: create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8: ...
- RabbitMQ 消息中间件
RabbitMQ 是使用 Erlang 语言开发的消息中间件, 其遵循了高级消息队列协议(Advanced Message Queuing Protocol, AMQP). 与 Kafka 等消息队列 ...
- 详细介绍MySQL/MariaDB的锁
官方手册:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html 1.事务提交的方式 在MariaD ...