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

<?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用来验证的

以上是推流权限设定,同理我们可以设置播放流时的权限限制
播放流时我们可以通过设置 on_play来限定,具体实现跟设置on_publish类似。也可以参考nginx-rtmp的官方wiki:
https://github.com/arut/nginx-rtmp-module/wiki/Directives

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