用到的工具: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,'\t',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, '\t', 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,'\t',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, '\t', 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(播放成功)

Nginx系列1.2:nginx-rtmp流媒体服务器添加权限认证(推流权限和播放权限)的更多相关文章

  1. javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  2. Nginx系列0:Nginx学习历程

    Nginx学习历程 一.初识Nginx 1.Nginx适用于哪些场景 (1)静态资源服务 通过本地文件系统提供服务 (2)反向代理服务 Nginx的强大性能 缓存 负载均衡 (3)API服务 Open ...

  3. 北广传媒RTMP流媒体服务器漏洞

    北广传媒移动电视(http://www.bj-mobiletv.com/)的RTMP流媒体服务器有漏洞 该漏洞可以上我们通过他们的服务器向互联网直播视频 使用任意可以发布RTMP流媒体的客户端(例如: ...

  4. librtmp将本地FLV文件发布到RTMP流媒体服务器

    没有用到ffmpeg库 可以将本地FLV文件发布到RTMP流媒体服务器 使用librtmp发布RTMP流可以使用两种API:RTMP_SendPacket()和RTMP_Write(). 使用RTMP ...

  5. RTSP安防摄像机(海康大华宇视等)如何推送到RTMP流媒体服务器进行直播

    方案介绍 目前互联网直播的CDN和标准RTMP流媒体服务器通常只能接收RTMP格式的音视频推流.目前市场上有一些自带RTMP推流的摄像机和编码器,可以直接在其rtmp推流配置里面配置推送到RTMP流媒 ...

  6. EasyDSS RTMP流媒体服务器是怎样炼成的:Easy而且更加互联网!

    开发EasyDSS的初衷 自从12年开始做EasyDarwin的时候,当时眼光一直都仅仅局限在安防监控视频这一块,对RTMP没有太大的重视,对于后起之秀HLS更是没有太多关注,然而经历了15直播火热的 ...

  7. EasyDSS RTMP流媒体服务器web前端:vue组件之间的传值,父组件向子组件传值

    之前接触最多的都是EasyNVR,主要针对的都是前端的一些问题.也有接触到一些easydss流媒体服务器. 前端方面的,EasyDSS流媒体服务器与EasyNVR有着根本的不同.EasyNVR使用的是 ...

  8. 编译EasyDSS rtmp流媒体服务器遇到stray '_239' inprogram,stray '_187' inprogram,stray '_191' inprogram的解决办法

    使用用户提供的交叉编译工具链编译easydss时遇到一个编译错误 stray '\239' inprogram stray '\187' inprogram stray '\191' inprogra ...

  9. EasyDSS RTMP流媒体服务器的HTTP接口query url的C++实现方法

    EasyDSS支持HTTP GET接口访问,我们需要获取url的各种参数信息 比如http://ip:port/action?a=1&b=2&c=3 我们需要知道对应的a.b.c的值 ...

随机推荐

  1. Spring Aop(十五)——Aop原理之Advised接口

    转发地址:https://www.iteye.com/blog/elim-2398726 Spring Aop原理之Advised接口 通过之前我们介绍的ProxyFactory我们知道,Spring ...

  2. 使用Apache,压力测试redisson的一般高并发

    安装 Linux linux直接yum -y install httpd-tools,然后ab -V测试 Windows 1查看80端口有没有被占用,netstat -ano | findstr &q ...

  3. luogu1972:HH的项链

    题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越来越长. ...

  4. CDH6.2的fair-scheduler.xml

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><alloc ...

  5. sql server代理服务无法启动(SQL Agent):OpenSQLServerInstanceRegKey:GetRegKeyAccessMask failed (reason: 2).

    问题:从windows自带的事件查看器中查看到报错信息如下 OpenSQLServerInstanceRegKey:GetRegKeyAccessMask failed (reason: 2). (注 ...

  6. 【C++札记】构造函数与析构函数

    构造函数(constructor) 1.构造函数是种特殊的类成员函数,遵循如下规则: a.函数名与类名必须相同. b.没有返回值 例如: class Obj { ... public: Obj() { ...

  7. WUSTOJ 1232: 矩阵乘法(C)

    1232: 矩阵乘法 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld Description 小明明正在学习线性代数,老师布置 ...

  8. 解决使用绝对定位absolute后,margin:0 auto居中方法失效(转)

    https://blog.csdn.net/qq_40678503/article/details/82780680

  9. C#强制回收垃圾

    [DllImport("psapi.dll")] private static extern int EmptyWorkingSet(int hProcess); public v ...

  10. MarkDown 语法大全查询

    目录 1. 斜体和粗体 2. 分级标题 3. 超链接 3.1. 行内式 3.2. 参考式 3.3. 自动链接 4. 锚点 5. 列表 5.1. 无序列表 5.2. 有序列表 5.3. 定义型列表 5. ...