nginx-rtmp-module 权限控制

张丰
2023-12-01

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

 类似资料: