[流媒体]nginx-rtmp-win32的权限管理(事件回调)

上一次研究了如何搭建nginx-rtmp服务器,以及推流和观看直播。

但是问题是只要知道直播地址,任何人都可以往rtmp://127.0.0.1/live推送视频流。

如何管理权限以及实现多个房间(多个频道)直播?

一、多个房间(多个频道)

这个比较简单,一个RTMP服务器本来就支持多个直播流,只需要改变推流地址就可以。

比如改为:rtmp://127.0.0.1/live/123456,那么就得到一条名为123456的直播流。

这个123456就可以理解为房间号,或者频道号。

当然在OSB里地址不是这样写的,应该这样写:

二、权限管理

nginx-rtmp提供了一个webapi回调接口,需要在配置文件添加以下配置:

publish_notify on;
notify_method get;
on_publish http://127.0.0.1/api/live/auth;
on_publish_done http://127.0.0.1/api/live/auth;
on_play http://127.0.0.1/api/live/auth;
on_play_done http://127.0.0.1/api/live/auth;

当收到推流或者播放事件时,会自动调用这些API,并且传递一些必要的参数过去。

如果API返回200表示认证成功,返回404表示认证失败。

要实现权限管理,重点就是分析传递过来的这些参数。

默认情况下是以POST方式传递参数,但是可以使用notify_method修改为GET方式。

我觉得GET方式可能比POST方便一些。

参数格式是:application/x-www-form-urlencoded

参数长什么样?

我这里测试的结果是这样的:

开始推流时我收到这样的请求:

http://127.0.0.1/api/live/auth?

app=live&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=rtmp://127.0.0.1/live&tcurl=rtmp://127.0.0.1/live&pageurl=&addr=127.0.0.1&clientid=7&call=publish&name=123456&type=live

当我关闭OBS时收到这样的请求:

http://127.0.0.1/api/live/auth?app=live&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=rtmp://127.0.0.1/live&tcurl=rtmp://127.0.0.1/live&pageurl=&addr=127.0.0.1&clientid=7&call=publish_done&name=123456

从这两个测试结果可以看出来,包含以下参数:

app=live
flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)
swfurl=rtmp://148.70.143.48/live
tcurl=rtmp://148.70.143.48/live
pageurl=
addr=113.87.163.76
clientid=7
call=publish
name=123456
type=live

两种情况只有call参数和name不一样,

call参数表示事件类型:一个是publish,另一个是publish_done。

name参数表示我们设定的房间号。

其它参数我们可以不去关心。

要实验身份认证,那么我们可以从这个name参数入手,在name里面添加一些认证信息。

比如把房间号设定为123456?user=admin&pass=admin

假设定义user=用户名,pass=密码,然后通过解析这些值,最终实现用户权限管理。

最后:

房间号如果不写?而用其它&#这些特殊符号,可能会被编码为%xx,还可能导致在本地生成临时文件夹失败。

所以应该使用123456?aaa=bbb&ccc=ddd这样的写法。

这样nginx会自动把aaa=bbb添加到查询字符串当中去。

1.本站默认解压密码为:xiaoqingtai.com
2.本站所有内容均由互联网收集整理,仅供大家参考、学习,禁止商用。
3.本站所有内容版权归原著所有,如有侵权请及时联系我们做删除处理。
请扫描下方二维码关注微信公众号或直接微信搜索“小青苔基地”关注
小青苔基地 » [流媒体]nginx-rtmp-win32的权限管理(事件回调)

发表评论