网站首页 技术 正文
演示截图:
概述:
Open Streaming Platform开放流媒体平台(简称OSP)是一个开源的RTMP流媒体软件前端,用于Arut's NGINX RTMP Module。
OSP设计的目的是提供一个自建直播服务,类似于Twitch.tv、Ustream.tv和Youtube Live
特性:
来自输入源的RTMP流,如开源推流软件(OBS)。
每个用户有多个频道,允许单个用户同时广播多个流,而不需要多个帐户。
视频流录制和点播回放。
每个频道视频的实时聊天
手动上传外部的MP4视频
频道所有者控制实时聊天的开关(禁止/开启)
Admin管理员控制是否自适应串流
只允许您想要的访问群体访问受保护的直播。
直播频道-不开播时继续聊天和闲逛
Webhooks-通过完全可定制的HTTP请求将OSP连接到其他服务,该请求将传递信息
轻松地将直播流或视频直接嵌入到另一个网页中
通过Facebook或Twitter快速分享频道或视频
能够将用户界面定制为适合您个人外观的主题
计划功能:
即将推出一个中心服务,将连接到开放直播平台,显示所有选择参与并连接到OSP服务器的视频、直播和创建者。
技术栈:
开源直播系统OSP依赖以下开源项目或技术:
[Python 3]
[Gunicorn]-Python WSGI HTTP Server,充当Flask的反向代理
[Flask]——基于Werkzeug&Jinja 2的Python微框架
[Flask SQL-Alchemy]-为OSP提供数据库
[Flask Security]-处理用户帐户、登录和注册
[Flask Uploads]-管理用户上传,比如图片
[Flask-RestPlus]-OSP API的处理和文档
[Flask-Markdown]-在Jinja2模板中显示Markdown
[Easy-MDE]-文本区域Markdown交互
[Bootstrap]-用于构建自适应、移动端优先的网页
[Bootstrap-Toggle]-用于构建滑动开关
[NGINX]-开源、高性能的HTTP服务器和反向代理服务
[NGINX-RTMP-Module]-用于RTMP/HLS/MPEG-DASH直播的NGINX模块
[Socket.io]-客户端和服务器之间的实时通信引擎
[Flask Socket.io]-基于Flask的Socket.io交互
[Video.js]-处理HLS视频流和MP4文件的HTML5视频播放
[Font Awesome]-界面图标等
[Animista]-优秀的CSS动画生成器
[List.js]-处理列表分类和分页
OSP本身是开源的,在Gitlab上有一个公共存储库。
Git分支:
OSP的Git分支在以下配置中设置
master - 最新版本分支
release/(Version) - 官方以前发布的版本
development - OSP vNext最新的每晚更新版本
feature/(Name) - 正在与开发分支进行合并的特性
安装:
安装环境要求
Ubuntu 18.04或更高版本, Debian 10或更高版本
Python 3.7或更高版本
MySQL 5.7.7或更高版本, 或者 MariaDB > 10.1, 如果不用SQLite
SMTP Mail Server用Email确认和订阅
FFMPEG 3或更高版本
标准安装:
OSP已经在Ubuntu 18.04和最近发行的Debian版本上测试通过了,安装脚本在其他OS发行版本上可能不能正常运行。
Clone一下Gitlab项目
git clone https://gitlab.com/Deamos/flask-nginx-rtmp-manager.git
运行安装脚本
cd flask-nginx-rtmp-manager/setup sudo bash setup-osp.sh
安装文件将会安装在如下目录:
视频文件、视频流文件和用户头像: /var/www
OSP文件: /opt/osp
重命名配置文件
cd /opt/osp/conf sudo mv config.py.dist config.py
编辑配置文件的默认值
vi config.py
更改以下默认值
dbLocation - 默认情况下 OSP使用的是SQLite,如果你想用MySQL可以更改这个值
secretKey - Flask密钥,请更改
passwordSalt - Flask Security有这个值给用户的Passwords加盐,请更改
重启OSP服务
sudo systemctl restart osp
打浏览器配置OSP
http://[服务器IP]/
Docker安装:
OSP已经提供了允许在容器中运行的Docker文件。为了让OSP的NginX、Gunicorn、 Flask和 Docker work正常运行, 前端必须开放 80 或 443端口,并且OBS的 RTSP或者其他推流软件必须开放1935端口。
很容易在Docker中实现反向代理(如Traefik)。但是1935端口不会被代理,必须映射到主机上的同一端口。
需要外部Redis服务器来处理内部gunicorn工作实例之间的异步通信。
环境变量
DB_URL: 设置数据库使用的SQLAlchemy URL字符串。
默认:
"sqlite:///db/database.db"
FLASK_SECRET: Flask密钥
格式:
"CHANGEME"
FLASK_SALT: Flask用户加盐字符串
格式:
"CHANGEME"
OSP_ALLOWREGISTRATION: 设置OSP是否允许用户创建帐号
默认:
True
OSP_REQUIREVERIFICATION: 设置OSP新用户是否需要确认邮箱
默认:
True
REDIS_HOST: 设置Redis服务器的IP/Hostname (必填)
REDIS_PORT: 设置Redis服务器的端口
默认:
6379
REDIS_PASSWORD: 设置Redis服务器的密码,如果有必要
建议挂载点
/var/www - 图片存储、推流以及视频存储
/opt/osp/db/ - SQLite数据库位置(如果使用)
/usr/local/nginx/conf - 包含nginx配置文件,这些文件可以根据您的需要进行修改(没有Traefik的HTTPS)
手动安装:
1: Clone项目
cd /opt git clone https://gitlab.com/Deamos/flask-nginx-rtmp-manager.git /opt/osp
2: 安装Python 3,如果没有安装的话
sudo apt-get install python3 python3-pip
3: 安装NGINX和NGINX-RTMP依赖
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
4: 安装Redis以及配置
sudo apt-get install redis -y sudo sed -i 's/appendfsync everysec/appendfsync no/' /etc/redis/redis.conf sudo systemctl restart redis
5: 安装Python依赖
pip3 install -r /opt/osp/setup/requirements.txt
6: 安装Gunicorn以及uWSGI插件
apt-get install gunicorn3 uwsgi-plugin-python
7: 下载编译NGINX和NGINX-RTMP
在Debian和>= Ubuntu 18.10 上进行编译,Nginx可能需要添加 --with-cc-opt="-Wimplicit-fallthrough=0" 到 ./configure
cd /tmp wget "http://nginx.org/download/nginx-1.17.3.tar.gz" wget "https://github.com/arut/nginx-rtmp-module/archive/v1.2.1.zip" wget "http://www.zlib.net/zlib-1.2.11.tar.gz" wget "https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz" tar xvfz nginx-1.17.3.tar.gz unzip v1.2.1.zip tar xvfz zlib-1.2.11.tar.gz sudo tar xvfz master.tar.gz cd nginx-1.17.3 ./configure --with-http_ssl_module --with-http_v2_module --with-http_auth_request_module --add-module=../nginx-rtmp-module-1.2.1 --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42 --with-zlib=../zlib-1.2.11 make make install
8: 复制NGINX conf文件到配置目录
cp /opt/osp/setup/nginx/*.conf /usr/local/nginx/conf/
9: 复制Gunicorn和NGINX SystemD文件
cp /opt/osp/setup/nginx/nginx-osp.service /lib/systemd/system/nginx-osp.service cp /opt/osp/setup/gunicorn/[email protected] /lib/systemd/system/[email protected] cp /opt/osp/setup/gunicorn/osp.target /lib/systemd/system/osp.target
10: 重新加载SystemD
systemctl daemon-reload systemctl enable nginx-osp.service systemctl enable osp.target
11: 创建必要的OSP目录,设置目录所有者和权限
mkdir /var/www mkdir /var/www/live mkdir /var/www/videos mkdir /var/www/live-rec mkdir /var/www/images mkdir /var/www/live-adapt mkdir /var/stream-thumb chown -R www-data:www-data /var/www chown -R www-data:www-data /opt/osp chown -R www-data:www-data /opt/osp/.git
12:安装FFMPEG4
add-apt-repository ppa:jonathonf/ffmpeg-4 -y apt-get update apt-get install ffmpeg -y
13: 复制默认配置文件,以及修改
cp /opt/osp/conf/config.py.dist /opt/osp/conf/config.py
14: 安装Log Rotation
sudo apt-get install logrotate cp /opt/osp/setup/logrotate/* /etc/logrotate.d/
14: 启动 NGINX 和 OSP
systemctl start nginx-osp.service systemctl start osp.target
15: 用浏览器打开网站,运行安装程序
http://<ip或域名>/
数据库
默认情况下,OSP使用SQLite作为其数据库。但是,对于生产强烈建议设置MySQL作为OSP的数据库。由于密钥大小的限制,建议使用MySQL 5.7.7或更高版本。随着时间的推移,运行默认的SQLite配置将导致系统变慢。
如果需要从SQLite迁移到MySQL,可以对数据库进行备份,将配置文件更改为MySQL,然后再恢复备份。
在将OSP配置为使用MySQL时,必须更改/opt/OSP/conf/config.py文件中的数据库使用路径,使用如下格式(不带括号):
dbLocation='mysql+pymysql://<dbUser>:<dbPassword>@<dbIP>:3306/<dbName>?charset=utf8mb4'
使用
在推流前,必须先创建一个频道,获取一个推流码
OBS推流地址:
rtmp://[serverip]/stream
建议:
默认情况下,OSP使用HTTP而不是HTTPS。建议在生产使用之前获取TLS证书并将NGINX配置为使用HTTPS。
NGINX Conf文件位于/usr/local/nginx/Conf/
如果您计划使用Lets Encrypt,请使用Cert-Only方法进行验证,因为NGINX是从源代码配置的,可能会导致Certbot自动进程出现问题。
API
OSP的API可以在以下端点访问:
http://[serverIP/FQDN]/apiv1/
API的使用要求推流者创建一个API密钥。
API正在使用Swagger-UI进行自我文档化。
若要使用经过身份验证的端点,请确保将'X-API-KEY':'<Your API KEY>'添加到请求头。
升级
标准升级
备份你的数据库文件:
cp /opt/osp/db/database.db /opt/osp/db/database.bak
执行一个Git Pull
cd /opt/osp sudo git pull
运行依赖检查
sudo pip3 install -r /opt/osp/setup/requirements.txt
重新设置回OSP的所有者为www-data
sudo chown -R www-data:www-data /opt/osp
一般情况下,建议更新最新的Nginx .conf文件来适应RTMP引擎的新特性,复制完成后你可以做出必要修改来适应你的运行环境(如TLS/SSL配置、RTMP引擎个性化)
注意先备份nginx.conf
cp /opt/osp/setup/nginx/nginx.conf /usr/local/nginx/conf cp /opt/osp/setup/nginx/osp-*.conf /usr/local/nginx/conf/ sudo systemctl restart nginx-osp
运行数据库升级脚本,来保证数据结构是最新的
sudo python3 manage.py db init **运行一次即可** sudo bash dbUpgrade.sh
从Beta3 升级到 Beta4版本
OSP已经添加了多线程来处理负载均衡,运行beta3tobeta4.sh脚本升级到新的架构。
cd /opt/osp/setup/other sudo bash beta3tobeta4.sh
Beta 5b以及之后
运行已经集成的一键升级脚本:
cd /opt/osp sudo bash ./osp-config.sh
然后选择“Upgrade to Latest Build”升级到最新版本
你也可以执行以下命令快捷运行,而不用手动选择选项
sudo bash ./osp-config upgrade
注意:升级之前备份nginx配置文件/usr/local/nginx/conf/nginx.conf,因为升级可能会覆盖此文件
有时候会出现奇怪的问题,试试
重启OSP
sudo systemctl restart osp.target
重启nginx
sudo systemctl restart nginx-osp
数据库升级
sudo rm -rf /opt/osp/migrations mysql -uroot -p use 数据库名; drop table alembic_version; exit; sudo python3 manage.py db init sudo python3 manage.py db migrate sudo python3 manage.py db upgrade
猜你喜欢
你 发表评论:
欢迎- 49℃Win10远程桌面连接提示身份验证错误,要求的函数不受支持,由于CredSSP加密Oracle修正的解决方案
- 47℃Centos yum 错误提示:Cannot retrieve repository metadata (repomd.xml) for repository: epel.
- 42℃AutoCAD 2021右键不显示菜单
- 41℃怎么判断QQ靓号是否买断,怎么判断QQ本身是靓号还是点靓的
- 41℃WHMCS 8安装完成后的安全设置
- 38℃如何调整AutoCAD背景颜色,默认黑色
- 38℃WellCMS 配置CDN访问教程
- 37℃Centos 7.2 错误提示make: *** No rule to make target `build', needed by `default'. Stop.
- 搜索
- 最近发表
-
- WHMCS v8.1.0 原版下载及开心版授权安装
- Centos yum 错误提示:Cannot retrieve repository metadata (repomd.xml) for repository: epel.
- WHMCS 8安装完成后的安全设置
- 怎么判断QQ靓号是否买断,怎么判断QQ本身是靓号还是点靓的
- 如何调整AutoCAD背景颜色,默认黑色
- Win10远程桌面连接提示身份验证错误,要求的函数不受支持,由于CredSSP加密Oracle修正的解决方案
- AutoCAD 2021右键不显示菜单
- Centos 7.2 错误提示make: *** No rule to make target `build', needed by `default'. Stop.
- Tengine安装./configure: error: C compiler cc is not found
- WellCMS 配置CDN访问教程
- 标签列表
- 文章归档
-
- 2021年1月 (1)
- 2020年12月 (24)
- 2020年11月 (10)
- 2020年10月 (6)
- 2020年9月 (16)
- 2020年8月 (26)
- 2020年7月 (3)
- 2020年6月 (2)
- 2020年5月 (4)
- 2020年4月 (10)
- 2020年3月 (32)
- 2020年2月 (14)
- 2020年1月 (13)
- 2019年11月 (5)
- 2019年10月 (2)
- 2019年9月 (4)
- 2019年8月 (5)
- 2019年7月 (2)
- 2019年6月 (8)
- 2019年5月 (3)
- 2019年4月 (6)
- 2019年3月 (12)
- 2019年2月 (6)
- 2019年1月 (15)
- 2018年12月 (20)
- 2018年11月 (14)
- 2018年10月 (21)
- 2018年9月 (32)
- 2018年8月 (11)
- 2018年7月 (5)
- 2018年6月 (1)
- 2018年5月 (4)
- 2018年4月 (3)
- 2018年3月 (7)
- 2018年2月 (1)
- 2018年1月 (3)
- 2017年12月 (1)
- 2017年11月 (1)
- 2017年10月 (1)
- 2017年9月 (1)
- 2017年8月 (2)
- 2017年7月 (3)
- 2017年6月 (2)
- 2017年5月 (1)
- 2017年4月 (1)
- 2017年2月 (2)
- 2017年1月 (1)
- 2016年12月 (1)
- 2016年5月 (1)
- 2016年4月 (1)
- 2016年3月 (1)
- 2015年5月 (1)
- 2014年12月 (1)
- 2012年11月 (1)
- 2011年7月 (1)
- 2010年10月 (1)
- 最新留言
- 站点信息
-
- 文章总数:376
- 页面总数:1
- 分类总数:14
- 标签总数:19
- 评论总数:6
- 浏览总数:266480
本文暂时没有评论,来添加一个吧(●'◡'●)