[流媒体]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添加到查询字符串当中去。
2.本站所有内容均由互联网收集整理,仅供大家参考、学习,禁止商用。
3.本站所有内容版权归原著所有,如有侵权请及时联系我们做删除处理。
请扫描下方二维码关注微信公众号或直接微信搜索“小青苔基地”关注
小青苔基地 » [流媒体]nginx-rtmp-win32的权限管理(事件回调)