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.
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.
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.
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. |
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.