互联网的搬运工 分类搜索 官网    VIP电影   留言板   免责声明    我要投稿   后花园

网站首页 技术 正文

基于Python的国外开源直播系统Open Streaming Platform安装教程

小冰 2020-03-20 技术 732 ℃ 0 评论

演示截图:基于Python的国外开源直播系统Open Streaming Platform安装教程 技术 第1张

概述:

Open Streaming Platform开放流媒体平台(简称OSP)是一个开源的RTMP流媒体软件前端,用于Arut's NGINX RTMP Module

OSP设计的目的是提供一个自建直播服务,类似于Twitch.tv、Ustream.tv和Youtube Live

特性:

来自输入源的RTMP流,如开源推流软件(OBS)。

每个用户有多个频道,允许单个用户同时广播多个流,而不需要多个帐户。

视频流录制和点播回放。

基于Python的国外开源直播系统Open Streaming Platform安装教程 技术 第2张

每个频道视频的实时聊天

基于Python的国外开源直播系统Open Streaming Platform安装教程 技术 第3张

  • 手动上传外部的MP4视频

  • 频道所有者控制实时聊天的开关(禁止/开启)

  • Admin管理员控制是否自适应串流

  • 只允许您想要的访问群体访问受保护的直播。

  • 直播频道-不开播时继续聊天和闲逛

  • Webhooks-通过完全可定制的HTTP请求将OSP连接到其他服务,该请求将传递信息

  • 轻松地将直播流或视频直接嵌入到另一个网页中

  • 通过Facebook或Twitter快速分享频道或视频

  • 能够将用户界面定制为适合您个人外观的主题

基于Python的国外开源直播系统Open Streaming Platform安装教程 技术 第4张

计划功能:

即将推出一个中心服务,将连接到开放直播平台,显示所有选择参与并连接到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字符串。

  • 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”升级到最新版本

基于Python的国外开源直播系统Open Streaming Platform安装教程 技术 第5张

你也可以执行以下命令快捷运行,而不用手动选择选项

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

Tags:

< 温馨提示 >
本站资源如有密码均为:70ol.com
学到东西应该懂得感恩作者 无脑喷子永封IP段+删帐号所有评论
本站资源软件和源码 文章大部分为网上收集,如侵犯您的权利,请告知管理员,我们会及时删除,并向您赔礼道歉.

站长QQ:  官方QQ群:558413792

猜你喜欢

本文暂时没有评论,来添加一个吧(●'◡'●)


欢迎 发表评论:

请填写验证码
搜索
最近发表
网站分类
友情链接
标签列表
文章归档
最新留言
站点信息
  • 文章总数:334
  • 页面总数:1
  • 分类总数:14
  • 标签总数:17
  • 评论总数:3
  • 浏览总数:230972