Self-hosting an SRTLA receiver

LOLS IRL speaks standard BELABOX compatible srtla, so your own receiver behaves exactly as our hosted relays do. Here is what to run, which ports matter, and the one mistake that stops a cellular link ever reaching your box.

You do not have to host anything: the free LOLS Cloud relays exist so that bonding works out of the box, or you can self-host your own receiver and depend on nobody. People choose to host for good reasons. You want the stream to land on infrastructure you control, you want a machine physically close to you that we do not have a relay near, you want no allowance to think about, or you simply prefer running your own things. Nothing in the app is tied to our servers, so switching is a hostname change and nothing else.

What you are building

phone (wifi + cellular)
   |
   |  srtla, UDP, one socket per network
   v
srtla_rec          listens on a public UDP port, reassembles the links
   |
   |  plain SRT, UDP, on localhost
   v
media server       MediaMTX or equivalent
   |
   +--> OBS, or a restream on to Twitch / Kick / YouTube

Two pieces, and each has one job. srtla_rec, from the BELABOX project, is the part that understands bonding: every link your phone opens registers with it as part of one group, and it turns that group back into a single ordinary SRT stream. It then forwards that stream to an SRT listener, which is where a media server takes over. MediaMTX is the usual choice and can hand the stream to OBS, republish it, or record it, but anything that accepts SRT will do.

Where to run it

The receiver has to be reachable from every network your phone streams over, which in practice means a public address. A small VPS is plenty: this is packet forwarding, not transcoding, so megabits and a modest CPU matter far more than cores. Put it geographically near where you stream, for the same reason you pick the nearest relay: distance is delay you cannot get back, and it is paid again on every retransmission.

The mistake that catches almost everyone

A receiver on your home LAN, at something like 192.168.1.50, is reachable from your Wi-Fi and from nothing else. Your cellular link cannot route to a private address, so it never registers and you are not bonded, you are streaming over Wi-Fi with extra steps, and the stats will show you one link instead of two.

Either host on a machine with a public address, or forward the UDP port on your router to the box on your LAN and point the app at your router's public address. A dynamic DNS name saves you re-typing it every time your address changes.

Ports

PortWhat for
UDP, your srtla port, inbound from the internetThe only port the phone touches. 5000 is the convention. Each bonded link arrives from its own source address and port, so there is nothing per link to open or configure.
UDP, your SRT listener, localWhere srtla_rec forwards the reassembled stream. MediaMTX listens for SRT on 8890 by default. This does not need to be exposed to the internet unless you also want plain SRT clients to publish to it.
Whatever your media server servesRTMP, RTSP, HLS or WebRTC out to OBS or to a viewer, entirely up to you and not part of the bonding path.

UDP is not TCP

Firewalls, cloud security groups and router forwarding rules very often default to TCP. An srtla registration sent at a TCP only rule disappears with no error anywhere, which looks identical to the receiver being down. If a link will not register, check the protocol on the rule before you check anything else.

Stream ids

srtla_rec passes the SRT stream id straight through, so what goes in the app's Stream id field is whatever the server behind it expects. With MediaMTX that is the publish form, a path and optionally credentials when authentication is on:

publish:mypath
publish:mypath:username:password

Turn authentication on if the port is open to the internet. An unauthenticated publish endpoint on a public address will eventually be found by somebody who is not you.

Pointing the app at it

  1. In LOLS IRL: Streams+SRTLA.
  2. Host: your public hostname. Port: the UDP port srtla_rec is listening on.
  3. Stream id: the publish string your media server expects.
  4. Latency: 2000 ms to start. Once you are live the app shows the round trip it is measuring and suggests a figure, which on a nearby box will usually be lower than the default.
  5. Save, enable it, go live, and expand the stats overlay. One row per link. Two rows means both networks registered.

Checking it actually works

Notes worth having in advance

Stuck on a step, or want a second pair of eyes on a receiver that will not accept the second link? Ask in Discord or email support@lols.gg. Bring the region you are in, what the stats overlay shows and what the receiver logged, and it is usually a two message conversation.

Related: bonding in five minutes for the app side and how to read the indicators, using the free relays if you would rather not host, and all the guides.