一、业务场景
最近公司的直播业务中,接入了多个第三方的直播服务(网易云信和腾讯云),公司使用OBS
进行推流,需要同时推流到两个平台,但是一个OBS
自身只能推流到一个地址,从而需要有新的解决方案。
根据该业务场景调研了网上大家常用的三种方案:
1.多个OBS:
一台电脑使用多个OBS
推送,但是由于OBS
需要利用CPU进行转码,开启两个OBS
会占据CPU大量资源,从而可能出现转码过载,导致直播掉帧
2. 利用第三方流媒体服务
利用第三方流媒体服务,将OBS
推送到第三方服务器,第三方服务器再推送到配置到多个平台信息信息,但是此问题需要依赖第三方推流服务,第三方服务器是否稳定会直接影响直播效果
3. 搭建本地nginx服务器
搭建本地Nginx
服务器,利用OBS
将视频流推送到本地Nginx
服务器,再利用Nginx
服务器进行转发到各平台
当然,应该还有其他的解决方案,但是自己对视频流这一块简直就是小白,公司对实现的进度要求也比较紧急,所以在有限时间内发现的三种方案中,选择了Nginx
的方案实践(选择原因:相对来说对目前对推流过程变化较小,同时成本也较低),并成功实现了推流到多个平台的需求。
二、实现方案(MacOS下)
由于电脑是MacOS
,所以基于MacOS
的Nginx
分流方案,具体实现方案分为以下三步:
1. 安装brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
复制代码
统一对系统插件包管理
2. 安装nginx
brew tap denji/nginx
brew install nginx-full --with-rtmp-module
brew info nginx-full
复制代码
注意,这里两个操作:
第一,使用了brew tap denji/nginx
,因为需要安装包含rtmp
模块的nginx
,直接安装会发生安装错误,所以这里需要使用
第二,安装时一定要安装rtmp
模块,用于配置rtmp
配置
3. nginx配置文件追加配置
安装Nginx后配置文件地址:/usr/local/etc/nginx/nginx.conf
,配置文件中追加rtmp
配置
rtmp {
server {
listen 1935;
chunk_size 10240;
application live {
live on;
record off;
push rtmp://p4275c5f7.live.126.net/live/377faa0e54d84db49de0239805f858e8?wsSecret=d25c205a7ab8620ec2078fa11301c4a2&wsTime=1563965458;
push rtmp://pushschool.icourt.cc/live/619fb940aac711e98ab27cd30aeb1494?txSecret=5e58356cd2fcc3384b258637a3d8fc90&txTime=5D3C74FF;
}
}
}
复制代码
其中,push
是需要推送的平台直播地址。
4. 其他
由于因为推流地址会经常发生变化,操作人员是不熟悉技术的同事,所以在Nginx
配配置文件夹中,增加了conf
文件夹,使用include
的方式,引用Nginx
配置文件,直接修改配置文件后,执行nginx -s reload
重新加载配置文件即可
rtmp {
server {
listen 1935;
chunk_size 10240;
application live {
live on;
record off;
include ./conf/push.conf
}
}
}
复制代码
三、总结
总的来说对于开发人员操作流程很简单,然而对于非开发人员来说,配置Nginx
服务器的方案也存在了一些技术壁垒,所以会考虑在之后提供一份shell
脚本直接进行安装,后期可能整合Nginx
,提供提供可操作界面的软件,希望自己能完成这个立下的flag