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,'\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流媒体服务器添加权限认证(推流权限和播放权限)的更多相关文章
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
- Nginx系列0:Nginx学习历程
Nginx学习历程 一.初识Nginx 1.Nginx适用于哪些场景 (1)静态资源服务 通过本地文件系统提供服务 (2)反向代理服务 Nginx的强大性能 缓存 负载均衡 (3)API服务 Open ...
- 北广传媒RTMP流媒体服务器漏洞
北广传媒移动电视(http://www.bj-mobiletv.com/)的RTMP流媒体服务器有漏洞 该漏洞可以上我们通过他们的服务器向互联网直播视频 使用任意可以发布RTMP流媒体的客户端(例如: ...
- librtmp将本地FLV文件发布到RTMP流媒体服务器
没有用到ffmpeg库 可以将本地FLV文件发布到RTMP流媒体服务器 使用librtmp发布RTMP流可以使用两种API:RTMP_SendPacket()和RTMP_Write(). 使用RTMP ...
- RTSP安防摄像机(海康大华宇视等)如何推送到RTMP流媒体服务器进行直播
方案介绍 目前互联网直播的CDN和标准RTMP流媒体服务器通常只能接收RTMP格式的音视频推流.目前市场上有一些自带RTMP推流的摄像机和编码器,可以直接在其rtmp推流配置里面配置推送到RTMP流媒 ...
- EasyDSS RTMP流媒体服务器是怎样炼成的:Easy而且更加互联网!
开发EasyDSS的初衷 自从12年开始做EasyDarwin的时候,当时眼光一直都仅仅局限在安防监控视频这一块,对RTMP没有太大的重视,对于后起之秀HLS更是没有太多关注,然而经历了15直播火热的 ...
- EasyDSS RTMP流媒体服务器web前端:vue组件之间的传值,父组件向子组件传值
之前接触最多的都是EasyNVR,主要针对的都是前端的一些问题.也有接触到一些easydss流媒体服务器. 前端方面的,EasyDSS流媒体服务器与EasyNVR有着根本的不同.EasyNVR使用的是 ...
- 编译EasyDSS rtmp流媒体服务器遇到stray '_239' inprogram,stray '_187' inprogram,stray '_191' inprogram的解决办法
使用用户提供的交叉编译工具链编译easydss时遇到一个编译错误 stray '\239' inprogram stray '\187' inprogram stray '\191' inprogra ...
- EasyDSS RTMP流媒体服务器的HTTP接口query url的C++实现方法
EasyDSS支持HTTP GET接口访问,我们需要获取url的各种参数信息 比如http://ip:port/action?a=1&b=2&c=3 我们需要知道对应的a.b.c的值 ...
随机推荐
- iOS-ASI异步下载图片
异步下载图片 异步下载图片ASIHTTPRequest *requestX = [ASIHTTPRequest requestWithURL:url]; self.re ...
- WordPress的摘要显示方式
WordPress的后台有摘要显示的栏目,如果没有显示,需要设置一下,如图 在列表页现实的内容的时候,一般是有摘要的显示摘要,没有摘要的截取文章的前一部分文字.代码如下 <?php if(has ...
- Struts2中action接收中文参数为乱码解决方法
老实说,中文乱码问题是每个程序员会经常遇到的问题,而且也是一个很头疼的问题.网上很多关于解决中文乱码的帖子,看几个之后你会发现大都是一样的.但是我们照着做,却还是无法解决乱码问题.我也是看了好多帖子, ...
- Redis HashMap 使用
散列类型相当于Java中的HashMap,他的值是一个字典,保存很多key,value对,每对key,value的值个键都是字符串类型,换句话说,散列类型不能嵌套其他数据类型.一个散列类型键最多可以包 ...
- openstack环境-解决windows虚机重启后比当前时间晚8小时问题
背景: 生产环境下,发现windows虚机每次重启,时间都会倒退到虚机的格林威治时间(+8小时才是北京时间),也就是比当前时间晚8小时.测试发现,windows虚机所用的镜像,缺少了一个os_type ...
- 解决maven打包时,会编译特定文件导致文件不可用
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resou ...
- 携程Apollo统一配置中心的搭建和使用
原文链接:https://blog.csdn.net/luhong327/article/details/81453001 一.Apollo配置中心介绍 1.What is Apollo 1.1 Ap ...
- GitLab基本使用
一.引言 在微服务架构中,由于我们对系统的划分粒度足够小,服务会很多,而且也存在经常迭代的情况.如果还按照以前的部署方式显得非常吃力和复杂,并且很容易出现错误.而随着容器技术的发展,这个时候持续集成( ...
- hdoj2594(kmp算法next数组的应用)
题目链接:https://vjudge.net/problem/HDU-2594 题意:给定两个字符串s1.s2,求s1的前缀和s2的后缀的最长公共部分. 思路: 将s1和s2连接后求nex数组即可, ...
- WUSTOJ 1274: 喂,这里是帅帅的LCM(Java)
1274: 喂,这里是帅帅的LCM 题目 在一组数中,找出个数为奇数的数.更多内容点击标题. 分析 其实这种题并不难,做过一次之后,绝对不会错第二次.通过读题可以发现,我们要找的那个数在这一堆 ...