自托管SRTLA接收端

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或观众,完全由你决定,不在聚合的链路上。

UDP不是TCP

防火墙、云安全组和路由器转发规则,很多时候默认是TCP。把srtla注册发到一条只放行TCP的规则上,会悄无声息地消失,哪里都不报错,看起来和接收端挂了一模一样。某条链路注册不上的话,先看规则上的协议,再看别的。

Stream id

srtla_rec会把SRT的Stream id原样传过去,所以应用的Stream id栏里该填什么,取决于它后面的服务器要什么。MediaMTX是publish形式,开了认证的话就是路径,后面可以接凭据:

publish:mypath
publish:mypath:username:password

端口对互联网开放的话,要打开认证。公网地址上没有认证的推流入口,迟早会被不是你的人找到。

把应用指向它

  1. 在LOLS IRL里:Streams → + → SRTLA。
  2. Host:你的公网主机名。Port:srtla_rec监听的UDP端口。
  3. Stream id:你的媒体服务器要的publish字符串。
  4. Latency:先用2000 ms。开播后,应用会显示它测到的往返时间并建议一个数值,对于离得近的机器,通常会比默认值低。
  5. 保存,启用,开播,展开统计叠加层。每条链路一行。有两行就是两个网络都注册上了。

确认它真的能用

值得提前知道的事

卡在某一步,或者想找人帮忙看看一个不肯接受第二条链路的接收端?到Discord问,或者发邮件到support@lols.gg。带上你所在的区域、统计叠加层显示了什么、接收端记录了什么,通常来回两条消息就能解决。

相关:五分钟上手聚合讲应用这一侧以及怎么读指示,不想自己托管的话看使用免费中继,还有全部指南。