CiegoLink SRT Stream Manager · Manual Open app →
Broadcast Hub · User manual

SRT Stream Manager.
The manual.

UDP and multicast in, SRT out – monitored around the clock. Everything you need to install, operate and maintain the CiegoLink Stream container.

24/7 monitoringDockerSRT listener & callerStatus API
01 — Overview

What it does

CiegoLink Stream receives a TV signal as UDP or multicast (MPEG-TS) and forwards it as SRT to a cable network, a partner or a playout. Every stream is monitored continuously – separately for input and output.

InputDoes data arrive?

Bitrate in Mbit/s, detected within seconds when the source stops.

OutputIs a receiver connected?

Bitrate, packets/s, round-trip time, lost and retransmitted packets, receiver IP.

AlarmsAlways with the cause

Input lost, no receiver or destination unreachable – in the UI and by e-mail.

24/7Self-healing

Streams restart automatically. The web app can be restarted or updated without interrupting any stream.

02 — Setup

Installation

You need a Linux server (Ubuntu 22.04 / 24.04 recommended) with internet access for the first build.

  1. Copy and unpack the package on the server.
    cd ~
    unzip ciegolink-stream.zip
    cd ciegolink-stream
    chmod +x run.sh host-setup.sh
  2. Prepare the server – once per server. Installs Docker if missing, keeps containers running during Docker updates, enlarges UDP buffers and limits log sizes.
    sudo bash host-setup.sh
  3. Set token and port in docker-compose.yml. Check first that the port is free: sudo ss -tulpn | grep 8090 (no output = free).
    ADMIN_TOKEN: "choose-a-long-secret"
    PORT: "8090"
  4. Build and start. Wait for Uvicorn running on http://0.0.0.0:8090, then press Ctrl+C.
    docker compose up -d --build
    docker compose logs -f
  5. Open the firewall if one is active.
    sudo ufw allow 8090/tcp
    sudo ufw allow 9000:9100/udp   # SRT ports you plan to use
Host network: the container uses the server's network directly. No port mapping is needed and multicast works.
03 — Access

First login

  1. Open http://<server-ip>:8090 in a browser.
  2. Click Admin (top right) and enter the token from docker-compose.yml.
  3. The admin buttons appear: New stream, Settings, Log out.

Without logging in, anybody who can reach the page sees the stream status (read-only). Passphrases, stream IDs and receiver IPs are never shown publicly.

04 — Streams

Creating a stream

Click New stream. The dialog has two columns: the essentials on the left, options on the right.

General

FieldDescription
NameDisplay name, e.g. Channel 1
SRT modeListener – the receiver connects to this server. Caller – this server connects to the receiver.
Cable networke.g. Sunrise, Swisscom, Digital Cable Group – suggestions appear while typing
RoleMain or Backup

Input · UDP / multicast

FieldDescription
Input IPNetwork card that receives the signal. Default uses the value from Settings.
Multicast addressOnly for multicast, e.g. 239.1.1.1. Leave empty for unicast.
PortUDP port of the incoming signal

Output · SRT

FieldDescription
Output IPListener: interface the receiver connects to (Default = all interfaces)
Destination hostCaller: address of the receiver
Local interfaceCaller: network card used for the outgoing connection
PortSRT port (empty = same as the input port)

SRT options

FieldDescription
Stream IDOptional SRT stream ID (letters and digits)
LatencySRT latency in ms, e.g. 2000 for internet links. Empty = default.
EncryptionNone, Generate (random passphrase) or Custom (10–79 characters). The receiver needs the same passphrase.
Constant bitrateSmooths the output bitrate
Start after savingStarts the stream immediately
Unique ports: a unicast input port and a listener output port can only be used once – duplicates are refused. Multicast inputs may be shared by several streams.

Receiver in listener mode: the receiver connects as caller to srt://<server-ip>:<port> with the same latency, passphrase and stream ID.

05 — Monitoring

Reading the stream list

Every stream is one row. Input and output each have their own coloured dot: green = OK, red = no data or not running, orange = waiting for receiver / connecting, grey = unknown or stopped.

ColumnShows
StatusOverall state – see below
NameName, Main/Backup, AES if encrypted, cable network, mode, latency, uptime
Input UDPPort, address, current bitrate or No data
Output SRTPort, receiver or destination, bitrate · packets/s · RTT, lost / retransmitted packets
ChartLast 10 minutes: input (teal line), output (light dashed line), red marks = lost or retransmitted packets. Hover for details.

Status values

StatusMeaningWhat to do
LiveInput receives data and a receiver is connected–
StartingStream starting, input not yet determinedWait a few seconds
No inputNo UDP data arrivesCheck source / encoder, routing, multicast group, input interface
No outputInput OK, but no receiver connected (listener) or destination unreachable (caller)Check receiver, firewall, port, passphrase
UnstableRestarted 3+ times within 10 minutesOpen the stream log
DownProcess not running, restarting automaticallyOpen the stream log
StoppedStopped by an operatorStart it again

The red line under a faulty stream explains the cause, e.g. Input lost – no UDP data on 239.1.1.9 @ 10.0.0.5:5004. Filter with All / Live / Faulty / Stopped or search by name, port, IP, cable network or role.

06 — Operation

Controlling streams

ButtonAction
RestartRestarts the stream – the receiver reconnects automatically
StopStops the stream (asks for confirmation)
StartStarts a stopped stream
DeleteDeletes a stopped stream
EditChanges settings – a running stream restarts with the new values
LogLast 100 log lines of the stream; older lines are removed automatically
07 — Alarms

Alarms

Open the Alarms tab. The red number on the tab shows how many streams are currently faulty.

  • Critical input lost, no output, stream down, peer unreachable
  • Warning receiver disconnected, process restarted, peer reports a fault
  • Recovered the stream is OK again

Use the filter buttons and the search field (stream name or message). 20 alarms are shown per page; up to 1000 are kept.

No false alarms for short dropouts: an alarm is raised only if a fault lasts longer than the Alarm delay (default 10 seconds).
08 — Configuration

Settings

Monitoring

SettingDescription
Check intervalHow often peers are checked and the status file is written (minutes)
Alarm delayHow long a fault must last before an alarm / e-mail (seconds). If input is missing for 60 s or more, the stream restarts once to re-join the source. 0 disables this restart.
Peer instancesOther CiegoLink Stream servers to watch, e.g. http://10.0.0.2:8090

Default interfaces

Input and output IP used by all streams set to Default. Running streams use new values after their next restart.

Admin token

Enter the current token and twice the new token (min. 8 characters), then Change token. You stay logged in.

Maintenance

Restart app restarts only the web interface and the monitoring. Streams keep running without interruption.

Alarm mail (SMTP)

FieldExample
SMTP host / portmail.example.com / 587 (STARTTLS) or 465 (SSL)
User / passwordMailbox login
From / ToSender address / one or more recipients, comma-separated
Exclude keywordsAlarms containing these words are not mailed

Send test mail saves the settings and sends a test message. Click Save to apply.

09 — Integration

Status API

These addresses work without login and can be used by dashboards, partners or monitoring tools:

AddressContent
/api/status.jsonAll streams with state, cause, bitrates, packets, RTT and 10-minute history
/api/alarmsAlarms – filter with ?level=critical&q=channel&limit=50
/api/health200 = all OK, 503 = fault – ideal for Uptime Kuma or similar
curl http://<server>:8090/api/health
curl "http://<server>:8090/api/alarms?level=critical&limit=20"

The full technical API (creating streams, settings, admin endpoints) is documented in README.md and interactively at /api/docs.

10 — Redundancy

Main & backup

For real 24/7 availability run two servers – ideally at two locations.

  1. Install CiegoLink Stream on both servers.
  2. Create the same stream on both: role Main on server A, Backup on server B.
  3. In Settings → Peer instances, enter server B on server A and server A on server B.
  4. Configure the receiver (cable network) with both SRT sources.

If one server fails, the other reports Peer unreachable and sends an e-mail.

11 — Maintenance

Maintenance

Update the web interface – no interruption

Replace the files in app/ and web/, then Settings → Restart app. The running version is shown at the bottom of the page (e.g. v1.1.0 · engine 3.45-4798).

Update the container – short interruption

Only needed when the Dockerfile changes. All streams stop for a few seconds – use a maintenance window.

cd ~/ciegolink-stream
docker compose up -d --build

Backup & restore

Everything (streams, settings, alarms, token) is in the data/ folder. To restore, unpack it into the project folder and run docker compose up -d.

tar czf ciegolink-backup-$(date +%F).tgz data/

Useful commands

docker compose ps                 # status – should be "Up (healthy)"
docker compose logs -f            # application log
docker compose restart            # restart container (interrupts streams briefly)
docker stats ciegolink-stream     # CPU / memory

Removing

docker compose down               # remove containers, data is kept
docker compose down --rmi all     # also remove the image
sudo rm -rf ./data                # delete all streams and settings
Careful: deleting data/ removes all streams, settings and alarms permanently. Make a backup first.
12 — Help

Troubleshooting

ProblemSolution
Page does not loaddocker compose ps – container running? Port free? Firewall open? Correct IP (LAN / VPN)?
Container keeps restartingLog shows address already in use: change PORT in docker-compose.yml, then docker compose up -d
No inputIs the source sending? sudo tcpdump -i any -n udp port 5000 -c 5. For multicast check the input interface.
No output (listener)Receiver must call srt://<server-ip>:<port>; UDP port open; same passphrase, stream ID and latency
No output (caller)Destination reachable? Port open on the receiver side?
Lost / retransmitted packetsIncrease latency (e.g. 2000–4000 ms for internet links), check bandwidth
Token forgottenrm data/.admin_token && docker compose restart – the token from docker-compose.yml applies again
host-setup.sh not foundRun it with sudo bash host-setup.sh