最近有“直播”的需求,需要使用OBS进行推流,但不方便在公共平台上进行直播。因此我决定自建服务器来进行推流与转换。
虽然可以选择腾讯云/阿里云的商业推流服务,但因为没钱所以我决定使用自建。
最开始我选择的是使用monibuca项目,但因为它是go写的,我对go一窍不通,尝试搭建后发现有内存溢出的问题,并且我对外服务的人数并不算多,因此在monibuca项目完全稳定之前我就用nginx来进行推流吧。nginx真的是神器
我的需求是OBS录屏 - RTMP推流 - 转换成HLS - WEB(博客)播放
下面这张图能很完美的体现我的需求:
前置需求
1.国内高带宽服务器,最低上传带宽需求10Mbs,如果没钱买vps的话,家宽也是不错的选择。国外的GIA的服务器或许可以,但我目前没有空余的GIA服务器,因此还是用的家宽。
2.nginx对cpu和内存需求较低,实测2h2g完全足够,甚至1h1g也足够。
3.能自行搜寻解决问题的能力。因为我这个仅供我自己备忘,因此不会写保姆级教程,只会写我实现的经过以及发现的问题、对应的解决方法。
关于什么是直播服务器建议看monibuca大佬的OSC源创会
部署
安装环境
我习惯使用appnode,并且appnode的nginx内带有rtmp模组,因此我就不编译安装了。
安装appnode(安装nginx) - 创建纯静态运行环境 - 软件管家 - nginx - 扩展管理 - 搜索rtmp - 勾选后立即安装
编辑配置
由于appnode的网站管理无法管理rtmp组件,因此需要单独配置nginx的配置文件。
配置前nginx应该是安装了rtmp模组,并且正常启动。
网站管理 - 组件管理 - nginx(设置) - 扩展管理 - 启用RTMP(默认安装了没启用) - 全局源文
全局源文即为nginx.conf,以下内容即使你是编译安装的也可以参考使用。
rtmp {
server {
listen 1935;#rtmp 端口 1935为nginx 默认端口
application live {
live on;#直播开启
hls on;#hls 开启
hls_path /tmp/hls/;#hls 的m3u8索引文件存储 这个地方需要给到nginx的目录操作权限
hls_fragment 5s;#hls 每片长度为5秒
#边播边存配置,如无需求最好别开,免得你忘了删
recorder rec{
record all; #存储所有,包括视频及音频
record_unique on; #是否添加时间戳到录制文件。否则的话同样的文件在每一次新的录制发生时将被重写。默认为 off。
record_path /home/live/record/; #录制文件存储地址配置 这个地方需要给到nginx的目录操作权限
record_suffix -%Y-%m-%d-%H_%M_%S.flv; #录制存储文件名字配置
}
}
}
}
添加到http之前,如下所示:
我将临时文件放在tmp目录内,录制文件放在home目录内,你可以根据自己情况修改
hls
nginx支持生成m3u8文件,进而进行播放,因此不需要使用ffmpeg进行转换
我的直播临时目录为/tmp/hls/
,因此你可以创建网站,然后将/tmp/hls/
软链接到网站目录内,我软链接的文件夹为hls。
ln -s /tmp/hls /data/live/sites/hls/www/hls
最好网站是以目录形式,即删掉: index index.html index.htm index.php;
为了后文,我假设我创建的网站为:hls.eve.pub
,是否使用https无所谓。
使用
rtmp推流
obs使用自动配置向导,其中推流服务选择自定义:
服务器:rtmp://192.168.16.17:1935/live/
串流密钥:12345
解释如下:
rtmp - 使用rtmp协议,不要像我最开始接触的时候填成了http
192.168.16.17 - 服务器ip地址
1935 - 1935为rtmp默认端口,可以省略不填
live - 为上文nginx配置中的application xxx 的内容,为流名称
12345 - 可以看作是“房间”,为流密钥
vlc拉流
vlc支持rtmp协议的拉流,路径:
打开媒体 - 打开网络
填入:
rtmp://192.168.16.17/live/12345
其实就是:服务器+串流密钥。
m3u8地址
上文创建的网站:hls.cve.pub
软链接的文件夹为:hls
串流密钥为:12345
则m3u8文件直链为:http(s)://hls.cve.pub/hls/12345.m3u8
测试
我懒得再搭一个网站了,就在这测试吧。
Monibuca快速起步
搭建基于nginx的rtmp直播服务器
Nginx与Nginx-rtmp-module搭建RTMP视频直播和点播服务器
arut/nginx-rtmp-module
Ubuntu下Nginx rtmp直播 hls http m3u8 及 直播录制
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/113.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。