用到的工具: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. c#操作json数据使用newtonsoft.json

    开源项目提供的一个读取示例 using System; using System.Collections.Generic; using System.IO; using System.Linq; us ...

  2. iOS-NSString值为Unicode格式(字符串编码转换成中文编码)

    + (NSString *)replaceUnicode:(NSString *)unicodeStr  {             NSString *tempStr1 = [unicodeStrs ...

  3. WebGL学习之HDR与Bloom

    原文地址:WebGL学习之HDR与Bloom 什么是HDR HDR (High Dynamic Range,高动态范围),在摄影领域,指的是可以提供更多的动态范围和图像细节的一种技术手段.简单讲就是将 ...

  4. 慕课零基础学java语言翁恺老师——第二周编程题

    1.时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果 ...

  5. 【数据库开发】在Windows上以服务方式运行 MSOPenTech/Redis

    在Windows上以服务方式运行 MSOPenTech/Redis ServiceStack.Redis 使用教程里提到Redis最好还是部署到Linux下去,Windows只是用来做开发环境,现在这 ...

  6. Bandicam录制三大神器之一

    链接: http://pan.baidu.com/s/1bnDIUOv 密码: etge

  7. mysql常用操作及常见问题

    常用操作 mysql备份: --整库备份 docker exec 容器ID mysqldump -uroot -p密码 --databases 库名 > 库名.sql --仅导出表和数据 mys ...

  8. Word 删除脚注尾注前边的编号

    1. 前言 一般我们插入尾注都是有编号的,怎么插入无编号的尾注? 2. 步骤 进入引用选项卡,然后注意不要点插入脚注,而要点脚注最右下方的小方框,出现脚注和尾注的对话框,点符号(Y)...,选第一个格 ...

  9. windows下编译libevent(2.1.8)及使用

    一:获取libevent github地址:https://github.com/libevent/libevent/releases 下载2.1.8稳定版 二:编译libevent 我是用的visu ...

  10. ajax与jsonp中的几个封装函数

    首先是ajax里的get 在页面上添加几个标签用作测试 <body> <input type="text" id="user"> < ...