盼盼资源网-亲测资源网-盼盼的家园www.panpan.org

 找回密码
 立即注册
查看: 56|回复: 1

为nginx-rtmp加上用户名和密码

[复制链接]

600

主题

620

帖子

40万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
402387
发表于 2019-4-7 10:48:36 | 显示全部楼层 |阅读模式
为nginx-rtmp加上用户名和密码
nginx-rtmp-module客户端推流权限解决方案

问题由来:
网上有解决这个问题的方法,但我在centos 和 windows上都测试了,on_publish 参数确实起了效果,如果验证php页面不通过,确实是能够阻止客户端推流。但是如文中所说,obs客户端推流过来的地址,如:rtmp://x.x.x.x/live/test?user=x&pass=x ,地址参数,这验证页面php是接受不到的 ,所以还是实现不了效果。

网上的都试了,不行,只好自己研究了一天,做了好多次测试,发现了是参数获取问题,不应该使用 _GET获取,正确的是要用 _POST 方式:


代码如下:

在nginx 模块配置文件中设置 on_publish

那么,配置文件在哪里呢?
如果安装了宝塔的LNAP模式和docker那么情况可能会有点复杂
可以用如下命令查找所有的nginx.conf文件
[root@localhost ~]# find / -name nginx.conf
/var/lib/docker/overlay2/长串数字1/diff/tmp/build/nginx/nginx-1.15.0/conf/nginx.conf
/var/lib/docker/overlay2/长串数字12/diff/tmp/build/nginx-rtmp-module/nginx-rtmp-module-1.2.1/test/nginx.conf
/var/lib/docker/overlay2/长串数字3/diff/etc/nginx/nginx.conf
/var/lib/docker/overlay2/长串数字4/diff/etc/nginx/nginx.conf
/var/lib/docker/overlay2/长串数字5/merged/etc/nginx/nginx.conf
/www/server/nginx/conf/nginx.conf

然后,
/var/lib/docker/overlay2/长串数字5/merged/etc/nginx/nginx.conf
/www/server/nginx/conf/nginx.conf
这两个比较可疑,应该是配置文件,分别看看即可。

找到后就可以修改nginx.conf了:

rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;

        application myapp {
            live on;

            on_publish http://localhost:8080/on_publish.php;
        }
}

说明: http://localhost:8080/on_publish.php;
on_publish.php 要放在 能执行 php的地方就行,端口号也不一定是8080,就是你能运行php的网址和端口

然后在on_publish.php中做我们的处理。例如:
on_publish.php

<?php

// ?user=user&pass=pass

@$name = $_POST['name'];
@$pass = $_POST['pass'];

$savename= test;
$savepass = password;

if(empty($name) || empty($pass)){

    echo "串码流不正确!";
    header('HTTP/1.0 404 Not Found');

}else{
    if (strcmp($name, $savename) == 0 && strcmp($pass, $savepass) == 0) {
        echo "串码流正确!";
    } else {
        echo "串码流不正确!";
        header('HTTP/1.0 404 Not Found');
    }
}

?>

此代码简单的作了用户验证,也可以改成带数据库验证以及加入更多参数进行验证。

客服端推流设定
以Open Broadcaster Software(OBS)为例

1、FMS URL:
rtmp://localhost:1935/myapp

2、播放路径/串码流(如果存在):
test?pass=password

其中test为streamkey串码流的名称,?pass=password用来验证的 (实际使用中需要把 test 改为想要的名, password 改成 自己想要的密码,例如设为 1234567890)

客户端的 RTMP 设置:
rtmp://IP地址:1935/myapp/test

本人于2019-4-7 10:47 测试测试成功!


回复

使用道具 举报

600

主题

620

帖子

40万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
402387
 楼主| 发表于 2019-4-7 10:58:25 | 显示全部楼层
可以多路直播(当然得修改on_publish.php中的判定代码了):

直播1:
rtmp://IP地址:1935/myapp/test1
obs设置
1、FMS URL:
rtmp://localhost:1935/myapp
2、播放路径/串码流(如果存在):
test1?pass=password1

直播2:
rtmp://IP地址:1935/myapp/test2
obs设置
1、FMS URL:
rtmp://localhost:1935/myapp
2、播放路径/串码流(如果存在):
test2?pass=password2

直播3:
rtmp://IP地址:1935/myapp/test3
obs设置
1、FMS URL:
rtmp://localhost:1935/myapp
2、播放路径/串码流(如果存在):
test3?pass=password3
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|民间故事|新华字典|周公解梦|实用工具|加密解密|便民服务|盼盼工具箱|闹钟|默笙工具箱|易经风水|Archiver|手机版|小黑屋|盼盼资源网