搭建一个简单的直播服务(livego)
平时偶尔会把动画片下载下来,在 B 站上直播(拒绝做正版受害者)
但是近两年 B 站总是掐我的直播,因为版权问题或者不够和谐的问题… 直播间甚至被封过好几次
我还是挺珍惜自己的 6 级号的,但是也确实想以这种最直接的方式给朋友安利动画
从直播技术的角度看,B 站也好,斗鱼也好,本质都是本地推流,服务器处理流,客户端通过服务器链接接收流并播放
那么也许我可以自己搭建一个直播间
经过一番谷歌和 ChatGPT,最后找到了 livego 这个项目
livego 的优点很明显,就是简单,非常简单,熟悉一下文档之后,一行命令就可以跑起来
关于直播服务器
在印象里,直播一向都是很吃性能的一件事,他要捕捉画面,把画面转换成数据流,实时发送给服务端
但是以上这些都是客户端做的事情,实际上服务端对于性能的压力并不大,我测试过 1 核 2G 的服务器足够运行 livego 了
直播者 (OBS & 推流链接) -> 服务器 (livego) -> 用户 (播放链接 & 播放器)
推流比特率和分辨率
选择视频分辨率和相应的比特率。例如:
- 720p (HD): 大约 2.5 Mbps
- 1080p (Full HD): 大约 5 Mbps
- 4K (Ultra HD): 大约 15-25 Mbps
比特率越高,视频质量越好,但所需带宽也越高。
带宽
带宽涉及到本地推流带宽和服务器带宽
本地推流,本地上行带宽
我家网络很菜,上行带宽是 5Mbps,也就是说,我在使用 obs 推流的时候,码率不能超过 5Mbps,否则直播会出现断断续续的情况。保险起见,我在 obs 设置的码率是 4000Kbps,勉强可以让 1920*1080 分辨率不那么失真
直播服务器带宽
服务器需要接收到推流,并且把流分发给客户端。
所以,用户数量越大,所需要的带宽就越大,简要的计算方式如下
总带宽需求 = 单用户带宽需求 × 同时观看人数
以我个人的直播来讲,如果有 10 个人看,也就是需要 50Mbps 的带宽
服务器选择
总结下来,我的需求是:
直播观看用户不多,但是也需要不小的带宽
直播次数不多,所以直播流量不大,可能一个月只有几个 G
CPU 和内存要求不高
那么哪里有这样的服务器呢…. 高带宽,低流量,低性能,这种配置也太奇怪了
首先排除轻量应用服务器,限定死带宽的服务器一定不行。
经过一番努力,我终于找到了合适的,很便宜,并且满足需求的!
阿里云 99 块钱一年的服务器
虽然这个的固定带宽是 3M,但是可以通过升降配置把它改成按流量计费的
改成按流量计费之后,甚至还退了 49 块钱!
也就是,50 块钱拿下了一个 2 核 2G 大带宽的服务器
大概费用:每有一个人看,每小时大概 1 块钱流量费。我感觉很能接受
部署 livego 和使用
使用 docker 部署
首先安装 docker,使用官方脚本安装即可
1 | curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
安装好之后,从 docker 启动,并且给容器添加一个 name,方便容器挂掉之后重启
1 | docker run --name livego-server -p 1935:1935 -p 7001:7001 -p 7002:7002 -p 8090:8090 -d gwuhaolin/livego |
在安全组放行端口,上面端口的用处,可以看这张图片的备注列
使用 livego
创建房间,像文档里一样,访问地址:
http://ip 地址:8090/control/get?room=movie
页面会出现一个 json,里面包含了一个 key
推流
使用 rmtp 协议进行推流
obs 相关设置
播放
播放支持多种协议,也就是对应上面的端口
- RTMP: rtmp://ip:1935/live/movie
- FLV: http://ip:7001/live/movie.flv
- HLS: http://ip:7002/live/movie.m3u8
安卓可以使用KMSPlayer播放
windows 可以使用potplayer
macos 可以使用IINA
也可以自己使用 flv.js 构建一个网页播放器