Server and clients
Mutara is a server with light clients. The node does the radio linking work. The clients carry voice and controls.
The model #
A different model puts the full radio link on one device. The protocol, the codecs and the audio run on the phone or computer of one user. Mutara divides the work between a node and its clients.
Text version of figure 1
- The clients are a web browser at home, the iPhone, iPad or Android app, and the phone of a club member.
- Each client sends and receives Opus voice and the status of the node, over HTTPS and a WebSocket.
- The node runs on a Raspberry Pi, a home server or a cloud server.
- The node does the links, the codecs, the timers, the station ID and the announcements.
- The node connects to a radio with USB, and to the AllStarLink network with IAX2 on UDP port 4569.
What the node does #
- It registers with AllStarLink, finds other nodes and keeps the links, also the permanent links.
- It changes the audio between the codecs: μ-law for AllStar and IAX2, Opus for clients. Clients who hear the same audio share one Opus encode. The node lowers the work of its encoders when its CPU is busy.
- It keys the radio and reads its carrier.
- It runs the timers, the station ID, the courtesy tone, the announcements, the schedule and the weather alerts.
- It keeps the settings, the accounts, the logs, the recorded clips and the chat.
The node runs all the time, as a systemd service. When a client disconnects, the node continues.
What a client does #
- The browser loads the dashboard from the node. It needs no installation. It receives 48 kHz Opus with in-band error correction (FEC), and decodes it with WebCodecs. Over plain HTTP, or if WebCodecs is not available, the node sends 8 kHz μ-law.
- The Android app and the iPhone and iPad app connect to the dashboard address with a dashboard account and use Opus. They can also connect as an IAX2 user, with μ-law, to Mutara or to other AllStarLink nodes.
- IAX2 apps, such as DVSwitch Mobile and iaxRpt, sign in as IAX2 users.
The node limits the open connections of each user: at most 8 audio connections and 32 event connections for each signed-in user, or for each address of a visitor who is not signed in. A client that goes over a limit gets WebSocket close code 1013 with a reason, which it should show.
A client does no link protocol and no codec work for the network. The browser opens the microphone only while you talk, use open mic or check the mic level. It closes the microphone 2 seconds after that.
What the model gives you #
- Shared access
- Many people use one node and one radio. Accounts go in groups, and each node of the install says what each group may do on it: see, listen, talk, talk on the local radio, link, send DTMF, chat, play and save clips, and manage the node.
- The node stays on
- Links, permanent links, scheduled commands, the hourly time and the weather alerts continue when a phone sleeps or loses its signal.
- Light on the phone
- The dashboard is a web page. Each app sends and receives one Opus stream. The apps try again after 2, 4 and 8 seconds, up to every 30 seconds, when the network drops.
- One place to maintain
- You set up the node in one place. Releases have an ed25519 signature. The logs, the Health page and the diagnostics file are on the node.
- Your own infrastructure
- The node runs on your hardware or your cloud server. It needs no account with the Mutara project. It asks the Mutara website for new releases;
update.check: falseturns this off. - RF node or hub
- With a USB radio interface, the node is an RF node. With no radio, it is an internet hub.
- Nodes and modules
- One install runs several modules: AllStarLink nodes, YSF modules, DMR modules and M17 modules. They link to each other inside the process. The scan plays the active module on one stream, with a priority for each module.
Limits of the model #
- You need a computer that runs all the time, and a router that forwards UDP port 4569 to it.
- To use the node away from home, the dashboard must be available from the internet with HTTPS. Use a certificate, a reverse proxy or a VPN.
- The node must be on line for a client to work.
Roadmap #
Done: YSF, DMR and M17 modules through a transcoder server. Later: P25 modules through the same server, and desktop apps.