10月26, 2018

nginx-rtmp-module 权限控制

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


本文链接:https://lxyit.com/article/show/163.html

-- EOF --