用到的工具: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. MS SQL查询所有表行数,获取所有数据库名,表名,字段名

    1.获取所有数据库名 --SELECT Name FROM Master..SysDatabases ORDER BY Name -- 2.获取所有表名: --SELECT Name NAMEtemp ...

  2. js 如何让两个等长的数组产生键值对关系

    问题的准确描述:js 将两个长度一样的一维数组 合成一个一维数组,A为键值,B为key值 js 将两个长度一样的一维数组 合成一个一维数组,A为键值,B为key值 如 var arr1=['a','b ...

  3. 月光大盗(moon thief)

    欢迎大家玩月光大盗! welcome to play moon thief!developer email:zhangdeke@126.com

  4. Vue项目过程中遇到的小问题

    1.给router-link添加点击事件 <router-link to="" @click.native=""></router-link& ...

  5. 【C/C++开发】C++队列缓存的实现

    C++队列缓存的实现 为什么使用队列缓存 c++的队列缓存主要用于解决大数据量并发时的数据存储问题,可以将并发时的数据缓存到队列中,当数据量变小时再匀速写入硬盘中. 引用queue队列 在头文件中引用 ...

  6. 南柯33的Python学习笔记第(一)部分

    Python基础 1.Python简介 1.1 Python是什么编程语言 从编程语言的几个方向来说 编译型和解释型 什么是编译型?什么是解释型? 编译型:就是把源代码一下全部都编译成二进制文件(优点 ...

  7. mui 打包发布ios 测试

    1.首先在Hbuilder新建一个app项目,把你的代码放进来 2.在manifest.json里设置你想要的一切,图标,应用名,描述,入口页面等等等,然后再配置好你程序里需要用到的模块权限,按需配置 ...

  8. Android 卸载应用程序

    最近工作中接触Android应用实现卸载自身的逻辑,踩了一些坑之后整理下来.使用的方法是Intent.ACTION_DELETE,这里没有什么好说的. MainActivity.java : pack ...

  9. Python操作Redis(转)

    原文1:https://cloud.tencent.com/developer/article/1151834 原文2:https://www.cnblogs.com/zhaohuhu/p/91406 ...

  10. 怎样在网页中嵌入JS代码

    有四种方法: 方法1: 在<script>标签内直接写代码 <body> <button id="btn">click</button&g ...