15 unstable releases (3 breaking)

new 0.6.10 Nov 23, 2024
0.6.9 Nov 12, 2024
0.6.7 Oct 29, 2024
0.6.0 Aug 16, 2024
0.3.0 Mar 22, 2024

#175 in Network programming

Download history 2/week @ 2024-08-02 195/week @ 2024-08-16 2/week @ 2024-08-23 1/week @ 2024-08-30 17/week @ 2024-09-13 16/week @ 2024-09-20 183/week @ 2024-09-27 34/week @ 2024-10-04 176/week @ 2024-10-11 221/week @ 2024-10-18 545/week @ 2024-10-25 157/week @ 2024-11-01 167/week @ 2024-11-08 19/week @ 2024-11-15

897 downloads per month

MIT/Apache

135KB
3.5K SLoC

moq-relay

moq-relay is a server that forwards subscriptions from publishers to subscribers, caching and deduplicating along the way. It's designed to be run in a datacenter, relaying media across multiple hops to deduplicate and improve QoS.

Required arguments:

  • --bind <ADDR>: Listen on this address, default: [::]:4443
  • --tls-cert <CERT>: Use the certificate file at this path
  • --tls-key <KEY> Use the private key at this path

This listens for WebTransport connections on UDP https://localhost:4443 by default. You need a client to connect to that address, to both publish and consume media.

Clustering

In order to scale MoQ, you will eventually need to run multiple moq-relay instances potentially in different regions. This is called clustering, where the goal is that a user connects to the closest relay and they magically form a mesh behind the scenes.

moq-relay uses a simple clustering scheme using MoqTransfork itself. This is both dog-fooding and a surprisingly ueeful way to distribute live metadata at scale.

We currently use a single "root" node that is used to discover members of the cluster and what broadcasts they offer. This is a normal moq-relay instance, potentially serving public traffic, unaware of the fact that it's in charge of other relays.

The other moq-relay instances accept internet traffic and consult the root for routing. They can then advertise their internal ip/hostname to other instances when publishing a broadcast.

Cluster arguments:

  • --cluster-root <HOST>: The hostname/ip of the root node. If missing, this node is a root.
  • --cluster-node <HOST>: The hostname/ip of this instance. There needs to be a corresponding valid TLS certificate, potentially self-signed. If missing, published broadcasts will only be available on this specific relay.

Authentication

There is currently no authentication. All broadcasts are public and discoverable.

However, track names are not public. An application could make them unguessable in order to implement private broadcasts.

If security/privacy is a concern, you should encrypt all application payloads anyway (ex. via MLS). moq-relay will only use the limited header information surfaced in the MoqTransfork layer.

Dependencies

~29–42MB
~763K SLoC