系统相关
首页 > 系统相关> > nginx-rtmp多房间和授权实现

nginx-rtmp多房间和授权实现

作者:互联网

nginx-rtmp多房间和授权实现
本篇为nginx-rtmp的进阶篇,实现多房间直播和观看直播并且添加推流的授权验证(用java实现的授权验证)。在阅读时您需要去看简单推流实现,传送门, 如果您已经做到了简单的推流可以跳过,废话不多直接进入主题。

nginx多房间推流
实现多房间的直播原理:在推流的时候指定特定房间的地址,并在浏览器端根据这个每个房间特定的地址来拉取视频流。

一. nginx.conf暂时维持原的配置,如下:

rtmp {
server {
listen 1935;
chunk_size 4096;

application live {
live on;
record off;
}
}
}
 
二. 在obs软件中设定中添加路径,如下图:

 

 


然后点击开始串流,如果看到右下角有数据在传输,代表传输成功。

三. 浏览器界面,video.js的地址修改如下:

<source src="rtmp://192.168.1.117:1935/live/668" type='rtmp/flv'>
 
四. 查看整体效果

 

 


五. 如此一来,如果有多房间多渠道推流时,只需要修改obs中的播放地址,并在浏览器中打开对应房间的地址即可。

为房间加上推流验证
在实际场景中,并不是每个人每个人都能往指定地方上推送视频流,而是由主播或者有操作权限的人。当然也nginx-rtmp模块中提供了on_publish,来控制权限。

一. nginx.conf的配置修改如下:

rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
publish_notify on;
on_publish http://192.168.1.117:8081/chat-rest/nlg/auth;
record off;
}
}
}
 
live on:切换现场模式,即一对多的广播
on_publish :这个指令设置了发布命令回调,如果这个地址返回HTTP 2XX代码继续RTMP会议,如果返回HTTP重定向3XX ,则会重定向到指定rtmp地址上(当然需要配置,这里就不做详细配置了,可以去官方文档中参考配置),如果返回其他RTMP连接断开。

二. on_publish回调地址url:

既然是只有有权限的人才能推流,所以需要一个系统来维护房间、直播用户、授权码这些信息,正如你看到上面配置的chat-rest是这个系统的项目名,验证代码如下:

@Controller
@RequestMapping("/nlg")
public class NlgController {
@Resource
private UserService userService;

@RequestMapping("/auth")
public @ResponseBody DataVo auth(HttpServletRequest request, HttpServletResponse response,String passWord) {
DataVo dataVo = new DataVo();
try {
if (passWord.equals("123456")){
Log.logger.info("success:"+passWord);
dataVo = DataUtil.dataInfo(StatusContant.STATUS_SUCCESS,dataVo,"auth success");
}else{
Log.logger.info("fail:"+passWord);
response.setHeader("liveAuth","authCode error");
response.setStatus(500);
}
} catch (Exception e) {
Log.logger.info("",e);
response.setHeader("error","sys error");
response.setStatus(500);
}
return dataVo;
}


这里模拟了只有用户的passWord为123456时才能授权成功,并且通过验证,否者直接返回500.断开连接。着这个方法中,我们可以添加更多requestParam,并通过自己的业务逻辑来实现。

三. 在obs中设定为:

 

 

 

在播放路径/串流码中填写:668?passWord=123456,
这里问号后面的参数会对应到上面验证接口中的参数,并传入验证,如果是多个参数可以用&拼接,eg:668?par1=value1&par2=value2

四. 在浏览器页面中video.js的维持原来配置如下:

<source src="rtmp://192.168.1.117:1935/live/668" type='rtmp/flv'>
 
五.效果如下:

可以看到,这里的验证码passWord已经传入,并且验证成功。

 

 

六. 如果密码错误,会在obs上推流时发生错误,如下图所示:

 

 

 

七.密码正确输入:

 

 

 

小结:在这篇中,我们用到了nginx-rtmp的多房间推流和授权,要完成这些,您需要先去实现简单的推流后再来上手。欢迎大家能多多给出意见,共同进步。


————————————————
版权声明:本文为CSDN博主「echool丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wei389083222/article/details/78721074

标签:passWord,验证,房间,nginx,rtmp,授权,推流
来源: https://www.cnblogs.com/javalinux/p/15845730.html