ETTIX STREAM

ETTIX STREAM is a live streaming origin server: it accepts H.264 video and AAC audio pushed to it over RTMP, or pulled from a remote SRT server in caller mode, and republishes that same media as HLS with MPEG-TS segments served from memory. It does not transcode and does not use FFmpeg or GStreamer — it repackages the frames it was given, unchanged, which is why it is fast and why the codecs it accepts are a short list. Around that core it records to multiple independent DVR destinations, supports timeshift and MP4 export, encrypts both delivery and recordings, authorizes publishers and viewers, and ships as a single static binary with this documentation, a web administration interface, a REST API and a command-line tool built into it.

These pages are served out of the running binary, so they describe the version that served them and cannot drift out of step with it. They contain no data from this installation: nothing here tells you what your streams are doing. For that, follow the Administration link in the bar above.

Where to start

If you have not run ETTIX STREAM before, read Getting started from the top. It takes an installed server through its first working stream: setting a stream key, pointing an encoder at the RTMP listener, and playing the result back. Everything else in this documentation assumes you have done that once, because most of the settings on the other pages only make sense once you have seen a stream go live and can tell a configuration mistake from a network one.

If the server is already installed and running and you are here because something is wrong, go straight to Troubleshooting.

At a glance

These are the defaults. Every one of them can be changed in the configuration file, and the third column names the setting that changes it so that you can tell a default from a local decision when you read someone else's configuration.

What Default Setting
RTMP ingest — where encoders publish :1935 (all interfaces) rtmp.listen
HLS playback — where viewers and players connect :8080 (all interfaces) http.listen
Administration — the web interface and REST API 127.0.0.1:8081, loopback only http.admin_listen
SRT ingest no inbound port; the server dials out to the remote SRT listener per stream, source.srt
Configuration file /etc/ettix-stream/config.json --config, or $ETTIX_STREAM_CONFIG
State directory — installation identity, licence lease, encryption master key /var/lib/ettix-stream server.data_dir
Logs standard error, which under systemd is the journal log.level, log.format
HTTP-01 certificate challenge, when ACME is enabled :80 http.tls.acme.http_01_listen

A packaged installation runs under systemd as the unit ettix-stream, so the two commands worth committing to memory are these.

systemctl status ettix-stream
journalctl -u ettix-stream -f

A stream published to the default RTMP listener with the default application name is played back from the default HLS listener at the matching URL. With a stream configured as channel1, that pair looks like this.

rtmp://HOST:1935/live/channel1?key=YOUR_STREAM_KEY
http://HOST:8080/hls/channel1/index.m3u8

The administration listener binds to loopback because it is the privileged surface: it can stop a live broadcast, rewrite the configuration — including the credentials publishers must present — and delete recordings. The server refuses to start if you move it to a public address without both acknowledging that in http.admin_allow_remote and configuring a credential in http.admin_auth. The intended way to reach it from your own machine is an SSH port forward to the loopback address, not a hole in the firewall; see Security.

The state directory holds the encryption master key. If DVR encryption at rest is in use, that key is the only thing that can read those recordings, and there is no recovery path by design — losing the directory means losing the recordings permanently. Back the key up with ettix-stream keys export --out PATH before you need it, and keep the backup somewhere other than this machine.

What this documentation covers

Each page is written to be read on its own once you have been through Getting started, so it is reasonable to jump straight to the one that matches the job in front of you.

Page What is on it
Getting started From an installed server to a first stream playing back: the starter configuration, the stream key, the encoder settings and the playback URL.
Configuration The configuration file: how it is structured, how to validate a change before it goes live, and how to apply one without dropping the streams that are already running.
Streaming Ingest and delivery: RTMP push, SRT pull with failover between sources, which codecs are accepted, and how segment duration and playlist length trade latency against resilience.
DVR Recording to one or more destinations, redundant copies, retention, timeshift back into the live window, MP4 export, and checking or repairing a destination after an unclean shutdown.
Security Who may publish and who may watch: publisher credentials, viewer authorization, HLS AES-128 and SAMPLE-AES, encrypted recordings at rest, administration credentials and TLS certificates.
Monitoring Knowing the server is healthy: the status and system endpoints, the event log and its live stream, disk capacity, the /health and /ready probes for a load balancer, and what is reported to Ettix.com.
Troubleshooting Symptoms and their usual causes: a publisher that is rejected, a playlist that never becomes ready, playback that stalls, a recording that will not write, and a licence that has lapsed.

What this server is doing right now

Nothing on these pages is specific to this installation. The Administration link at the end of the navigation bar leaves the documentation and opens the live administration interface on this same listener, which is where the answers about this particular server are: the dashboard, the configured streams and their current state, DVR destinations and their disk usage, system load, certificates, the licence, telemetry, the recent event log and the configuration editor.

Everything the interface shows is also available from the REST API on the same address under /api/v1/, and from the ettix-stream command on the server itself — status and streams list both accept --json. Use whichever suits the task; they read the same data.

This documentation describes the server. It is not a reference for the REST API's request and response bodies, for the on-disk DVR format, or for the player SDK, each of which has its own document in the source repository — API.md, DVR_FORMAT.md and sdk/player/README.md. Playback has not been verified on Apple or Android devices, and no compatibility with them is claimed; where that matters to you, test it yourself before you rely on it.