本篇为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上推流时发生错误,如下图所示:

七.密码正确输入:
