Skip to content

Streams and mounts ​

A mount is one stream. It has a URL path, a password for the encoder that feeds it, and (optionally) its own listener limit and access rules. You can run many mounts on one server.

Add more streams ​

Each [[mounts]] block adds a stream:

toml
[[mounts]]
path = "/main.mp3"
secret_file = "secrets/main-source"

[[mounts]]
path = "/talk.mp3"
secret_file = "secrets/talk-source"
listener_limit = 100

Listeners play http://your-server:8000/main.mp3 and http://your-server:8000/talk.mp3. You can have up to 64 mounts.

Use a different password per mount

Give each stream its own secret file. Then a leaked password only lets someone take over that one stream.

Path rules ​

  • Start with /, with no trailing /. Nested paths such as /stations/jazz are fine.
  • Letters, digits and / . _ - ~ only. Paths are case-sensitive.
  • /api, /admin, /internal, /health, /metrics and /hls are reserved.

One source per mount ​

Only one encoder can broadcast to a mount at a time. A second encoder is refused with 409, so a forgotten test encoder can never silently replace your real show. When the encoder disconnects, its listeners are disconnected too, and players reconnect when the next session starts.

If you want a live DJ takes over from the playlist workflow, do the switching in Liquidsoap and send Quikcast a single stream. See How it fits with Icecast and Liquidsoap.

Limit listeners ​

By default every mount can have up to 10,000 listeners, within the server-wide limit. Cap one mount with listener_limit:

toml
[[mounts]]
path = "/small.mp3"
secret_file = "secrets/small-source"
listener_limit = 25   # 0 means no per-mount cap

Server-wide and default limits live under [limits]; see Capacity and limits.

Let encoders create streams on demand ​

Sometimes you do not know the stream names ahead of time, for example when each presenter gets their own mount. Turn on dynamic mounts and give them a shared credential:

toml
[sources]
allow_dynamic_mounts = true
username = "source"
secret_file = "secrets/dynamic-source"

[sources.defaults]
name = "Community Radio"
genre = "Various"

Now an encoder that authenticates with that password can broadcast to any free path, for instance /dance. The mount exists while the source is connected and disappears once its last listener leaves. Nothing is written to your config. Mounts you list under [[mounts]] always take precedence.

[sources.defaults] provides the station name, description, genre and website for any source that does not send its own.

Station name and genre ​

For listed mounts, your encoder (BUTT, Liquidsoap) sends the name, genre and song title. Quikcast passes them to players that ask for them. You do not configure these per mount in the config file.

Supported formats ​

FormatContent type the encoder sendsNotes
MP3audio/mpegWorks everywhere.
AAC (ADTS)audio/aac, audio/aacpAAC-LC.
Ogg Vorbis, Opus, Ogg FLACaudio/ogg, application/oggTitles travel inside the stream.
FLACaudio/flacNative FLAC, for lossless streams.

Quikcast does not convert between formats. Each listener receives exactly what the encoder sent, so choose a format your audience's players support.

Documentation for Quikcast.