nginx-rtmp-module默认所有客户端都可以推流,那么问题就来了,怎么限制客户端推流呢?nginx-rtmp-module提供了限制发布者以及观看者的IP地址:
allow publish 127.0.0.1; deny publish all; allow play 192.168.0.0/24; deny play all;
显然IP地址限制,达不到需求。
但是可以通过在模块配置文件中设置 on_publish
编辑nginx.conf
rtmp { server { listen 1935; ping 30s; notify_method get; application myapp { live on; on_publish http://localhost:8080/on_publish.php; } }
然后在on_publish.php中做我们的处理。例如:
编辑on_publish.php
// ?user=user&pass=pass $user = isset($_GET['user']) ? $_GET['user'] : ''; $pass = isset($_GET['pass']) ? $_GET['pass'] : ''; if (empty($user) || empty($pass)) { echo "wrong query input"; header('HTTP/1.0 404 Not Found'); exit(); } $saveuser = user; $savepass = pass; if (strcmp($user, $saveuser) == 0 && strcmp($pass, $savepass) == 0) { echo "Username and Password OK"; } else { echo "Username or Password wrong"; header('HTTP/1.0 404 Not Found'); exit(); }
此代码简单的作了用户验证,也可以改成带数据库验证以及加入更多参数进行验证。
客服端推流设定
以Open Broadcaster Software(OBS)为例:
1、FMS URL:
rtmp://localhost:1935/myapp
2、播放路径/串码流(如果存在):
test?user=username&pass=password
其中test为streamkey,?user=user&pass=pass用来验证的