LOLS IRL说的是标准的、兼容BELABOX的srtla,所以你自己的接收端,表现和我们托管的中继完全一样。这里讲该运行什么、哪些端口要紧,以及会让移动网络链路永远连不到你那台机器的那个错误。
你不用托管任何东西:免费的LOLS Cloud中继就是为了让聚合开箱即用,你也可以自托管自己的接收端,不依赖任何人。人们选择自己托管,理由都很充分:你想让直播落在你自己控制的基础设施上,你想要一台离你很近、而我们在那附近没有中继的机器,你不想操心额度,或者你就是喜欢自己跑自己的东西。应用里没有任何东西绑定我们的服务器,所以切换只是改个主机名,别的都不用动。
手机(wifi + 移动网络)
|
| srtla,UDP,每个网络一个socket
v
srtla_rec 监听一个公网UDP端口,把链路重新拼起来
|
| 普通SRT,UDP,在localhost上
v
媒体服务器 MediaMTX或同类软件
|
+--> OBS,或者转推到Twitch / Kick / YouTube
两个部分,各管一件事。srtla_rec来自BELABOX项目,是懂聚合的那一块:你手机打开的每条链路都会作为同一组的一员向它注册,它再把这一组还原成一路普通的SRT流。然后它把这路流转发给一个SRT监听端,由媒体服务器接手。常用的是MediaMTX,可以把流交给OBS、转推或录制,但只要接受SRT的都行。
接收端必须能从你手机推流用到的每一个网络访问到,实际上就是要有公网地址。一台小VPS就够了:这是转发数据包,不是转码,所以带宽和一颗普通CPU比核心数重要得多。把它放在离你直播的地方近的位置,理由和选最近的中继一样:距离就是追不回来的延迟,而且每次重传都要再付一遍。
家里局域网内的接收端,比如192.168.1.50,只有你的Wi-Fi能访问到,别处都不行。你的移动网络链路路由不到私有地址,所以它注册不上,你没有聚合,只是多绕了几步在走Wi-Fi,统计里只会显示一条链路,而不是两条。
要么托管在有公网地址的机器上,要么在路由器上把UDP端口转发到局域网里的那台机器,再让应用指向路由器的公网地址。动态DNS域名能省得你每次地址变了都重新输入。
| 端口 | 用途 |
|---|---|
| UDP,你的srtla端口,从互联网入站 | 手机唯一会碰的端口。惯例是5000。每条聚合的链路都从自己的源地址和端口过来,所以不需要为每条链路单独开放或配置什么。 |
| UDP,你的SRT监听端,本地 | srtla_rec转发还原后那路流的地方。MediaMTX默认在8890上监听SRT。除非你还想让普通SRT客户端也往这里推,否则不需要暴露到互联网。 |
| 你的媒体服务器对外提供什么就是什么 | RTMP、RTSP、HLS或WebRTC,输出给OBS或观众,完全由你决定,不在聚合的链路上。 |
防火墙、云安全组和路由器转发规则,很多时候默认是TCP。把srtla注册发到一条只放行TCP的规则上,会悄无声息地消失,哪里都不报错,看起来和接收端挂了一模一样。某条链路注册不上的话,先看规则上的协议,再看别的。
srtla_rec会把SRT的Stream id原样传过去,所以应用的Stream id栏里该填什么,取决于它后面的服务器要什么。MediaMTX是publish形式,开了认证的话就是路径,后面可以接凭据:
publish:mypath
publish:mypath:username:password
端口对互联网开放的话,要打开认证。公网地址上没有认证的推流入口,迟早会被不是你的人找到。
srtla_rec监听的UDP端口。srtla_rec会为每条链路记录一次连接注册,都在同一个组下。两条链路应该给你同一组里的两次注册。如果你始终只看到一次,就是第二个网络连不到这台主机:私有地址、只放行TCP的防火墙规则,或者手机上开着VPN。卡在某一步,或者想找人帮忙看看一个不肯接受第二条链路的接收端?到Discord问,或者发邮件到support@lols.gg。带上你所在的区域、统计叠加层显示了什么、接收端记录了什么,通常来回两条消息就能解决。