Flussonic Media Server documentation

Live streaming

Flussonic Media Server can retransmit streaming video with repackaging it on the fly to multiple output formats. This means you can ingest an MPEG-TS stream and deliver it simultaneously to thousands of recepients in, for example, DASH or HLS, and publish it in RTMP on YouTube.

Flussonic Media Server works with three types of streams:

  • static — permanently kept broadcasting.
  • ondemand — requested by users (on demand).
  • live — user-published streams. See Publishing for details.


Static streams Anchor Anchor x2

Static streams are launched upon server start, and Flussonic monitors them continuously.

If for some reason (transcoder went off, antenna broke down) the data source disconnects, Flussonic Media Server will keep trying то reconnect until success or shutdown.

Usually, an IPTV channel or IP camera are declared as a static stream.

Flussonic Media Server supports many types of data sources, which must be pointed at with URLs.

Example of a configuration of /etc/flussonic/flussonic.conf file:

stream ort {
  url tshttp://;
stream ipcam {
  url rtsp://;

In this config:

  • ort and ipcam are names of stream that must be used when requesting Flussonic Media Server.
  • tshttp:// and rtsp:// are the data source's URL.

Important. The name of a stream may contain only Latin characters, digits, periods (.), minus (-), and underscore (_) characters. If the name contains anything else, correct work of the DVR and broadcasting in general cannot be guaranteed.

To add a stream via the web interface, go to the Media tab:


Click add next to Streams:


Then enter the name of the stream and the data source's URL. Click create and Flussonic adds the stream to the list. By default, created streams are static.

To change the stream's type to on demand, click static next to the stream name.

The stream is added.

Now you can go to the stream settings page, where you can check the ingest status:


On-demand streams Anchor Anchor x2

If a stream is not needed all the time but only upon user's request, it is possible to tell Flussonic Media Server to turn it off when it is not being used and turn back on on demand.

To specify this kind of stream, simply change stream to ondemand:

ondemand ipcam {
  url rtsp://;

Important. If the protocol used for communication between the data source and the repeater is RTMP, RTSP or HTTP MPEG-TS, getting HDS or HLS from the repeater will not be possible due to the fact that these protocols only work with 10-30 seconds long buffering. The player will not start playback until this buffer is ready, so the user who appears first will just have to stand and wait until then. The only kind of data source that doesn't have this problem is another Flussonic server with HLS protocol. Flussonic Media Server uses its own extensions that allow for immediate playback on iPhone.

It is possible to specify the stream's lifetime after a client has disconnected:

ondemand ipcam {
  url rtsp://;
  retry_limit 10;
  client_timeout 20;

The config line above has the following meaning: make no more than 10 attempts to reconnect with a data source if the connection is lost; when the last client leaves, run the stream idly for no longer than 20 seconds.

Stream playback Anchor Anchor x2

How to playback streams, learn in Video playback.

Multi-bitrate streams Anchor Anchor x2

To merge two independent sources of the same content to create a multi-bitrate stream, use the option mbr=1.

Learn more in the section about multi-bitrate streams from two sources.

Stream screenshots in JPEG Anchor Anchor x2

Flussonic Media Server can make JPEG screenshots of streaming video. To use this, turn on the thumbnails option in the stream settings.

stream ort {
  url udp://;

You can specify an URL where Flussonic Media Server can get screenshots to reduce CPU usage for thumbnails. Many cameras have a special URL with screenshots:

stream cam0 {
  url rtsp://;

You can find the screenshot URL in the documentation for you camera model.

The stream's latest screenshot is available at http://flussonic:8080/ort/preview.jpg

MJPEG screenshot stream is available at http://flussonic:8080/ort/preview.mjpeg

See also:

Substituting a stream with a file Anchor Anchor x2

If for some reason the stream is inaccessible, Flussonic provides the option of substituting it with a video file.

stream rtr {
  url tshttp://;
  backup vod/backup.mp4;

You need to specify the path to the backup file relative to the VOD-location, for example vod/backup.mp4, but you can't specify an absolute path.

Note that if the original stream has no audio (for example, a stream from an IP camera), the stand-in file should have no audio as well.

Wildcards Anchor Anchor x2

Sometimes the names of streams on a remote server are not known in advance. Use a special stream type (rewrite):

rewrite nsk/* {
  url rtsp://nsk-origin:554/%s;

rewrite ams/* {
  url hls://ams-origin:8080/%s/index.m3u8;

Here, the rewrite directive is combined with an asterisk (*) at the end of a stream name. This mean that the substring that precedes the asterisk will replace "%s" in the URL.

Recording video streams (DVR) Anchor Anchor x2

Flussonic Media Server has an excellent stream recording system.

The stream archiver can record video, provide access to a particular video interval, export parts of the archive as MP4 files, clean up old archive files, and maintain ample free space on the storage disk.

To turn on the archiver, specify the dvr option in a stream settings:

stream foxlive {
  url tshttp://trancoder-5:9000/;
  dvr /storage 90% 5d;

For details, see archive management.

Time zone adjustment (Timeshift) Anchor Anchor x2

Flussonic Media Server can play the archive record of a stream with a fixed delay.

Note that Flussonic Media Server maintains the delay painstakingly, so if for some reason the archive has lacunae, end users will be getting no video for the duration of the gap.

The timeshift feature uses a separate data source protocol:

stream ort {
  url tshttp://trancoder-5:9000/;
  dvr /storage 90% 5d;

stream ort-4h {
  url timeshift://ort/14400;

The delay is specified in seconds.

Stream delivery over UDP multicast Anchor Anchor x2

Flussonic Media Server is able to rebroadcast a stream from a data source over local network.

Flussonic Media Server does its best to serve UDP as evenly in time as possible in order to avoid sharp network load increases.

stream ort {
  url tshttp://trancoder-5:9000/;

Stream settings for IP surveillance cameras Anchor Anchor x2

It is possible to tell Flussonic Media Server to request a stream from camera via UDP only. This might be necessary when working with cameras that have issues with TCP.

stream cam1 {
  url rtsp://;
  rtp udp;

Important! Of the desktop browsers, H265 is now supported by only Microsoft Edge (version 16 and higher) and Safari (version 11 and higher). Of mobile browsers — by Safari and Chrome for iOS, (version 11.0 and higher). Read more in the article «Playing H265».

If there is no need to get audio from a camera (for instance, G.726 audio), you can configure Flussonic Media Server to ingest only one track. The number of the track must be specified in the stream settings:

stream cam1 {
  url rtsp://;
  tracks 1;

In order to transcode a G.711a or G.711u audio coming from the camera into AAC, the other protocol must be specified:

stream cam1 {
  url rtsp2://;

Turning on audio-only HLS Anchor Anchor x2

When validating apps in AppStore, Apple may require the stream to have an audio-only version. If this command is added to the config:

stream cam1 {
  url rtsp://;

and the stream has both video and audio, Flussonic Media Server will generate a multi-bitrate variant playlist of two streams: one standard, the other audio-only.

Capturing stream from another Flussonic Media Server Anchor Anchor x2

The details of transferring video between Flussonic Media Server servers are discussed in the Flussonic video stream clusterization article.

DRM in live Anchor Anchor x2

The details are discussed in the Apple DRM article.

Stream or group settings Anchor Anchor x2

These settings are for use in the directives stream, ondemand, rewrite, and live. We call them options.


auth http://backend/; Turning on authorization for a stream. See more in the authorization section.


domains host1.ru *.host1.ru; Specifying the domains, within which playing this video is allowed. This does not work for those clients that do not pass the value of Referer. To work correcty in the WEB the flussonic domain must present in the list (the domain of the embed.


allowed_countries RU US CN; The list of two-character codes of countries where the access is allowed (for code reference see the MaxMind database).


url tshttp://transcoder:port/; URL of the data source. It is possible to list several URLs for trying the first available data source.

Important: If a UDP source is used, the configuration file must contain this particular UDP address only once. If multiple streams use the same UDP address, chances are it will not work.


urls source1 source2; A list of data source URLs. More info about switching sources.


url_prefix prefix

for instance

url_prefix http://my.domain.address.com:8080
When using HLS protocol, the addresses of individual segments and playlists within the variant playlist will start with the specified prefix. This option may be used not only as part of an individual stream's settings but also in the global portion of the config file. If the option is specified globally, it will be applied to all streams on the server.


dvr /storage 1d 50% schedule=8:00-16:00;

dvr @my_raid 1d 50% schedule=8:00-16:00;

Turning on archiving feature. The first command tells Flussonic Media Server to store the archive in the /storage/streamname directory. The second command tells it to store the archive in the disk array @my_raid. Flussonic will clean up that directory either once a day or when the disk gets 50% full. Instead of days, hours can be specified: 20h. Parameter `schedule` allows you to set a schedule on the DVR in the form of intervals. The time is specified in UTC in hours and optionally with minutes, the interval can overlap midnight: 22-1:30. A schedule can contain multiple intervals, separated by a comma: 8:00-16:00,22-1:30.


dvr_offline /storage 1d 50%; With this option specified, the stream will not turn on archiving on start. It will have to be turned on explicitly via API. This option used in place of dvr option.


udp multicast_loop;

This causes Flussonic Media Server to send the stream via MPEG-TS over UDP. To set MULTICAST_TTL parameter on UDP socket use following syntax: udp;. To set constant bitrate (CBR) use following syntax: udp;, where 2000 is bitrate in kbit/sec.


thumbnails; Turns on the generation of stream preview JPEG thumbnails).


retry_limit 10; This sets the number of times Flussonic Media Server will try to connect to the data sources before closing a non-static stream.


clients_timeout 10; This sets the time period (in seconds), for which Flussonic Media Server will keep serving a non-static stream after the client's last request.


source_timeout 10; Specifies the period of time, in seconds, for which Flussonic Media Server waits for new frames to come from the data source. When this time passes, Flussonic attempts to reconnect to the data source. Default source_timeout is 60 seconds.


frames_timeout 3; Specifies the period of time, in seconds, for which Flussonic Media Server waits for new frames to come from the data source before it generates the event frames_timed_out. This period of time must be smaller than in source_timeout. The event frames_timed_out informs you that the source might soon be lost. If frames come again from this source, before source_timeout has passed, Flussonic issues the frames_restored event.


password secret; The password that will be passed via query string (http or rtmp) for publication in a stream or group.


push rtmp://destination-server/name; This option tells Flussonic to publish the stream to another server.


backup vod/blank.mp4; Setting this option for the stream will launch the specified file vod/blank.mp4 while the video from the data source is unavailable.

url publish://

url publish://; Specifying this option for the stream allows to publish video into it. Meaningless for a group of streams.


on_publish http://host/publish.php;

on_publish /etc/flussonic/publish.lua;
Causes publishing to this stream or stream group to call a script or send HTTP request with such parameters as the stream name, publisher's IP, etc. In response it is possible to refuse publication or allow: the HTTP backend must return 200 OK or 403 Forbidden; the .lua script must return {true, {}} or {false, {}.


max_sessions 1000; Sets the limit on the quantity of sessions for the stream.


rtp udp; Turns on obligatory use of UDP for working with RTSP cameras.


add_audio_only; Adds to the HLS playlist a link to an audio-only stream. This is needed to validate the app in Apple devices.

prepush off

prepush off; Turns off the quick-start prepush feature. Might be useful for keeping real-time streaming.


prepush 10; Enables a buffer of specified duration, in seconds. If the client's connection to the server is interrupted or slowed down, it plays video from the buffer, which allows the player to start faster, but with a lag.


max_bitrate 1000; Sets the bitrate limit for the stream being published.


Version 4.6.15 and above.

logo path=flu/embed-logo.png height=100 width=100 left=0 top=0; Add logo at playback. This logo will not be displayed on mobile devices and in the DVR player. To add logo to video use transcoder.
path (required) — path relative to wwwroot directory.
height, width — logo image size in px. If ony only one of these parameters is present then the other is scaled proportionally. Omit these parameters to display logo in the original size.
left, top, right, bottom — logo image location specified by offset in px. For example, right bottom corner: right=0, bottom=0. Don't use left and right, top and bottom parameters together.


mpegts_pids pmt=4095 sdt=0x12 v1=211 v2=212 a0=220 t0=16#fb; This parameter sets PIDs values for outgoing MPEG-TS stream. It is possible to set PID for PMT, STD and tracks. Tracks numbered starting from one: a1=123 sets PID for the first audio track. It os possible set base index for the tracks of certain type using the 0 (zero) index. Example: `t0=100` sets PID=101 for the first track, 102 for the second, and so on. Numbers can be given in decimal form (by default) or in hexadecimal with 0x prefix.


segments 5; Specifies the number of segments in the HLS and HDS playlists.


segment_duration 4; Specifies the duration of a segment for HLS and HDS streams in seconds. For some incoming streams Flussonic will not apply the specified segment duration. All depends on a stream's GOPs in seconds. A segment duration must be divisible by GOP because GOP cannot be cut into smaller parts. For example, for a stream with 4-second GOPs, possible segment duration is 4 seconds, 8 seconds, 12 seconds, and so on. Otherwise, Flussonic will create segments equal to each GOP in a stream.


segment_count 4; Number of segments for buffering.


group sport; Used only on a source server to define the names of TV channel groups where a stream is included. Learn more


disabled; Stop stream.