Streaming in five minutes
Xtream is one static binary. There is no runtime to install, no database to provision and no cluster to configure. If you can SSH into a Linux box, you can run it.
Requirements
- A Linux server — amd64 or arm64, with systemd. A 1 vCPU / 1 GB instance comfortably handles one publisher and 50+ viewers.
- Root access — The installer writes a binary, a config directory and a systemd unit.
- OBS Studio 30 or newer — WHIP output is built in from version 30. Earlier versions won't work.
- A licence key — Xtream refuses to install or start without one.
8282 in your firewall. If you enable the embedded TURN server, open UDP 3478 too.Install
Run this on the server, replacing the key with your own. You'll find it on your license keys page.
curl -fsSL https://stream.dxform.ph/install.sh | sudo sh -s -- --key=XT-XXXX-XXXX-XXXX-XXXXThe installer:
- Validates your key against the licence service.
- Downloads the build matching your architecture and verifies its SHA-256.
- Installs to
/usr/local/bin/xtreamand creates a locked-downxtreamsystem user. - Writes
/etc/xtream/xtream.envwith generated dashboard and TURN credentials. - Activates the machine and stores the signed licence file.
- Registers and starts a systemd service.
Configure OBS
In OBS, open Settings → Stream and choose WHIP as the service.
| Service | WHIP |
| Server | http://YOUR_SERVER_IP:8282/whip/live |
| Bearer Token | leave empty |
Then under Settings → Output (Advanced mode), these settings matter for latency:
| Encoder | x264, or a hardware encoder with B-frames disabled |
| Rate Control | CBR |
| Keyframe Interval | 1 second |
| Profile | baseline |
| Tune | zerolatency |
| Audio Encoder | Opus |
live in the server URL is the stream key. Any value works — use different ones to run several streams from a single server.
Watch the stream
Open the player in a browser. It shows a waiting state until OBS connects, then starts playing on its own — no button to press.
| Player | http://YOUR_SERVER_IP:8282/?stream=live |
| Operations dashboard | http://YOUR_SERVER_IP:8282/dashboard.html |
Dashboard credentials were generated during install. Find them in /etc/xtream/xtream.env.
Configuration
Everything lives in /etc/xtream/xtream.env. Restart the service after editing it.
| PORT | HTTP port. Default 8282. |
| HOST | Bind address. Default 0.0.0.0. |
| STUN_URL | STUN server for NAT traversal. |
| TURN_ENABLED | Set true if viewers sit behind restrictive NATs. |
| TURN_PUBLIC_IP | Required when TURN is enabled — your server's public IP. |
| DASHBOARD_USER / DASHBOARD_PASS | Credentials for the operations dashboard. |
sudo systemctl restart xtreamHow licensing works
Xtream activates against our licence service at install and on every start. Once running it checks in every 15 minutes.
- One key, one machine. The key binds to a fingerprint derived from your machine ID and network interface.
- Outages don't stop your stream. Each activation returns a signed 24-hour entitlement token. If our service is unreachable, your server keeps running for a full day on that token.
- Moving hardware is self-serve. Release the key from your dashboard, then install on the new machine. Once every 30 days per key.
- Uninstalling frees the seat. Running the installer with
--uninstallreleases the key automatically.
xtream license statusOperations
journalctl -u xtream -fsudo systemctl restart xtreamxtream license statusxtream license deactivatecurl -fsSL https://stream.dxform.ph/install.sh | sudo sh -s -- --key=YOUR_KEYsudo sh install.sh --uninstallTroubleshooting
The service won't start
Almost always the licence. Run xtream license status and check journalctl -u xtream -n 40. If the key is bound to an old machine, release it from your Servers page.
OBS connects but the player stays blank
Check the stream key matches on both sides, and set your OBS keyframe interval to 1 second. The operations dashboard shows whether packets are arriving.
Viewers on corporate networks can't connect
Their firewall is blocking UDP. Enable the embedded TURN server: set TURN_ENABLED=true and TURN_PUBLIC_IP in your env file, open UDP 3478, and restart.
Latency is higher than expected
Disable B-frames in your encoder, use CBR, and set tune to zerolatency. B-frames alone can add several hundred milliseconds.
“This key is already activated on another machine”
Expected if you reinstalled without uninstalling first. Release the key from your Servers page, then run the installer again.
Still stuck?
Email us with the output of xtream license status and the last 40 lines of journalctl -u xtream, and we'll work it out with you.