zoukankan      html  css  js  c++  java
  • Nginx系列1.2:nginx-rtmp流媒体服务器添加权限认证(推流权限和播放权限)

    用到的工具:OBS Studio(推流)、nginx-rtmp流媒体服务器VLC(拉取流播放)

    Nginx系列1:ubuntu16.04编译出适合自己的nginx服务器

    Nginx系列1.1:ubuntu16.04编译nginx-rtmp流媒体服务器

    1 配置推流权限

    配置nginx-rtmp流媒体服务器的conf/nginx.conf文件;

    rtmp {
         server {
             listen 1935;  #监听的端口
     
             chunk_size 4000;
     
             application hls {  #rtmp推流请求路径  
                 live on;
                 hls on;
                 hls_path /home/zopen/nginx/hls;
                 hls_fragment 5s;
                 on_publish http://localhost:10078/user/auth;
                 # notify_method get;
                 # on_publish http://localhost:81/on_publish.php;
         }
     }

    把auth.py放到任意目录下面,运行:

    (固定用户名密码验证和数据库验证二选一即可)

    auth.py代码(使用固定用户名密码):

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    #https://www.jianshu.com/p/0d14ae8f081c
    
    #https://blog.csdn.net/wei389083222/article/details/78721074/
    #https://blog.csdn.net/weixin_34368949/article/details/85991563
    #验证只能用post方法
    #虽然流密钥的格式像是get类型,但是必须使用POST获取参数。
    from flask import Flask, request, Response
    app = Flask(__name__)
    
    #传入url格式为: xx.xx.xx.xx:10078/user/auth?usr=xxx&passWord=xxx
    @app.route('/user/auth',methods=['POST'])
    def auth():
        usr = request.form['username']#从url后获取的数据
        password = request.form['password']
        print(user,'	',password)
        #此处可改为从数据库获取数据
        auth_user='abc'
        auth_passWord='123'
        if auth_user == user and auth_passWord ==password:
            return Response(response='success',status=200)#返回200状态码
        else:
            return Response(status=500)#返回500状态码
            #Flask.abort(404)
        return password
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=10078,debug=True)

    auth.py代码(使用数据库验证):

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    
    #https://www.jianshu.com/p/0d14ae8f081c
    
    #https://blog.csdn.net/wei389083222/article/details/78721074/
    #https://blog.csdn.net/weixin_34368949/article/details/85991563
    #验证只能用post方法
    #虽然流密钥的格式像是get类型,但是必须使用POST获取参数。
    import pymysql
    from flask import Flask, request, Response
    app = Flask(__name__)
    
    #传入url格式为: xx.xx.xx.xx:10078/user/auth?usr=xxx&passWord=xxx
    @app.route('/user/auth',methods=['POST'])
    def auth():
        # 打开数据库连接
        db = pymysql.connect("ip地址","用户名","密码","数据库名称" )
    
        # 使用 cursor() 方法创建一个游标对象 cursor
        cursor = db.cursor()
        
        username = request.form['username']#从url后获取的数据
        password = request.form['password']
        print(username, '	', password)
    
        # SQL查询语句
        sql = "select * from user where user_name = '%s' and user_password = '%s' " % (username, password)
    
        # 使用 execute()  方法执行 SQL 查询 
        ret = cursor.execute(sql)
        
        if ret:
            return Response(response='success',status=200)#返回200状态码
        else:
            return Response(status=500)#返回500状态码
            #Flask.abort(404)
        return password
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=10078,debug=True)

    运行auth.py之前,需要先安装flask和pymysql

    命令1:sudo pip install flask

    命令2:sudo pip install pymysql

    运行auth.py命令:python3 auth.py

     

    通过OBS推流到nginx-rtmp流媒体服务器进行推流测试

    推送不加user和pass的裸流:rtmp://ip地址:1935/hls/test01(推流失败)

    推送加user和pass的视频流:rtmp://ip地址:1935/hls/test01?username=abc&password=123(推流成功)

    2 配置播放权限

    配置nginx-rtmp流媒体服务器的conf/nginx.conf文件;

     

    rtmp {
         server {
             listen 1935;  #监听的端口
     
             chunk_size 4000;
     
             application hls {  #rtmp推流请求路径  
                 live on;
                 hls on;
                 hls_path /home/kaifang/nginx/hls;
                 hls_fragment 5s;
                 on_play http://localhost:10078/user/auth;
                 # notify_method get;
                 # on_publish http://localhost:81/on_publish.php;
         }
     }

    把auth.py放到任意目录下面,运行:

    auth.py代码(使用固定用户名密码):

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    #https://www.jianshu.com/p/0d14ae8f081c
    
    #https://blog.csdn.net/wei389083222/article/details/78721074/
    #https://blog.csdn.net/weixin_34368949/article/details/85991563
    #验证只能用post方法
    #虽然流密钥的格式像是get类型,但是必须使用POST获取参数。
    from flask import Flask, request, Response
    app = Flask(__name__)
    
    #传入url格式为: xx.xx.xx.xx:10078/user/auth?usr=xxx&passWord=xxx
    @app.route('/user/auth',methods=['POST'])
    def auth():
        usr = request.form['username']#从url后获取的数据
        password = request.form['password']
        print(user,'	',password)
        #此处可改为从数据库获取数据
        auth_user='abc'
        auth_passWord='123'
        if auth_user == user and auth_passWord ==password:
            return Response(response='success',status=200)#返回200状态码
        else:
            return Response(status=500)#返回500状态码
            #Flask.abort(404)
        return password
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=10078,debug=True)

    auth.py代码(使用数据库验证):

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    
    #https://www.jianshu.com/p/0d14ae8f081c
    
    #https://blog.csdn.net/wei389083222/article/details/78721074/
    #https://blog.csdn.net/weixin_34368949/article/details/85991563
    #验证只能用post方法
    #虽然流密钥的格式像是get类型,但是必须使用POST获取参数。
    import pymysql
    from flask import Flask, request, Response
    app = Flask(__name__)
    
    #传入url格式为: xx.xx.xx.xx:10078/user/auth?usr=xxx&passWord=xxx
    @app.route('/user/auth',methods=['POST'])
    def auth():
        # 打开数据库连接
        db = pymysql.connect("ip地址","用户名","密码","数据库名称" )
    
        # 使用 cursor() 方法创建一个游标对象 cursor
        cursor = db.cursor()
        
        username = request.form['username']#从url后获取的数据
        password = request.form['password']
        print(username, '	', password)
    
        # SQL查询语句
        sql = "select * from user where user_name = '%s' and user_password = '%s' " % (username, password)
    
        # 使用 execute()  方法执行 SQL 查询 
        ret = cursor.execute(sql)
        
        if ret:
            return Response(response='success',status=200)#返回200状态码
        else:
            return Response(status=500)#返回500状态码
            #Flask.abort(404)
        return password
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=10078,debug=True)

    运行auth.py之前,需要先安装flask和pymysql

    命令1:sudo pip install flask

    命令2:sudo pip install pymysql

    运行auth.py命令:python3 auth.py

     

    通过OBS推流到nginx-rtmp流媒体服务器进行播放测试

    播放不加user和pass的裸流:rtmp://ip地址:1935/hls/test01(播放失败)

    播放加user和pass的视频流:rtmp://ip地址:1935/hls/test01?username=abc&password=123(播放成功)

  • 相关阅读:
    如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
    Quartz.NET开源作业调度框架系列(五):AdoJobStore保存job到数据库
    Quartz.NET开源作业调度框架系列(四):Plugin Job
    Quartz.NET开源作业调度框架系列(三):IJobExecutionContext 参数传递
    Quartz.NET开源作业调度框架系列(二):CronTrigger
    Quartz.NET开源作业调度框架系列(一):快速入门step by step
    如何在Visual Studio中开发自己的代码生成器插件
    C#如何定制Excel界面并实现与数据库交互
    Ajax+PHP+MySQL 登陆示例
    Tomcat性能优化(二) ExpiresFilter设置浏览器缓存
  • 原文地址:https://www.cnblogs.com/zkfopen/p/11764127.html
Copyright © 2011-2022 走看看