June 21, 2019

Efficient usage of SRT latency and maxbw parameters

We continue educating streaming people on SRT protocol usage. It's a streaming protocol which adapts to the network conditions, helps compensate for jitter and other fluctuations with error recovery mechanism to minimize the packet loss. This leads to the lost packets re-transmission, which increases the bandwidth usage between sender and receiver.

We'll take a look at "latency" parameter which is tightly related to the re-transmission process in general.

The "latency" parameter specifies the delay which is used if the packet reached the destination quickly (and therefore it's way ahead of "time to play"). But when the packet was lost, this gives it an extra time to recover the packet before its "time to play" comes. Original packet delivery takes some round-trip time (RTT), so it will take another RTT to send the correction. And if some issues happen again on its way to receiver, the sender will re-transmit it again and again until it's correctly delivered, spending time during this process.

So too small value of "latency" may cause the denial of re-transmission. Let's suppose you have some RTT from sender to receiver equal 200ms, and your "latency" is set to 300ms. Obviously, the receiver won't be able to get any re-transmission in case of first transmission because the latency "window" will close.

The SRT community recommends setting "latency" as follows:

  • Your default value should be 4 times the RTT of the link. E.g. if you have 200ms RTT, the "latency" parameters should not be less than 800ms.
  • If you'd like to make low latency optimization on good quality networks, this value shouldn't be set less than 2.5 times the RTT.
  • Under any conditions you should never set it lower than default 120ms.
The "latency" value can be set on any side of transmission:
  • sender;
  • receiver;
  • both sides.
The effective latency will be the maximum value of both sides, so if you don't set it on sender (so it'll have default 120ms) and 800ms on receiver, the active value would be 800ms.

We've previously shown how you can control the maximum bandwidth available for transmission over SRT using "maxbw" parameter. As you can see, you need to be aware not only about the bandwidth on your sender, but also latency settings.

So we highly encourage you setting both "latency" and "maxbw" parameters during SRT setup. Otherwise you will face one of these issues:
  • When you set "maxbw" to cover all network problems, the latency can be too low to tolerate the losses.
  • When you set proper "latency" without "maxbw", it will cause exhaustion of bandwidth.

Both configuration options are available for SRT setup in Nimble Streamer. Please refer to SRT setup article to get familiar with the general setup process. Once you complete all required steps, use custom parameter fields to define appropriate entries as shown below.



The "maxbw" is defined in bytes per second, NOT bits per second. So if you'd like to set maximum bandwidth to 2Mbps, you'll have to specify 250000 as your designated value. This is an SRT-specific approach to value definition. The "latency" is defined in milliseconds.

Larix Broadcaster mobile app allows streaming via SRT with defined "maxbw" and "latency" as well.


If you have any questions regarding SRT setup and usage, please feel free to contact our helpdesk so we could advise.

Related documentation


Nimble Streamer SRT feature set, SRT setup in Nimble StreamerHaivision blog: Reliable Low Latency Delivery with SRT+SLDP

June 13, 2019

SCTE-53 markers in Nimble Advertizer

Nimble Advertizer is a server-side ads insertion framework for Nimble Streamer. Its business logic may be defined by both a dynamic handler and a pre-defined config, you can find full tech specification here.

Ads insertion time points within a live stream can be set in 3 ways:
  1. Specify the exact moment of time in GMT.
  2. Time spots relative to the beginning of the viewing session.
  3. According to SCTE-35 markers from the original stream.
The SCTE-35 markers are part of original streams delivered via MPEG-TS and HLS streams which Nimble Streamer is able to accept for input.

Here's a brief summary of how Nimble Streamer handles the markers for ads insertion:

  1. You create a handler app which will tell Nimble how to operate ads. This may also be plain JSON file with static pre-defined setting. Advertizer spec described handler in more details.
  2. Nimble Streamer processes incoming MPEG-TS and HLS streams with SCTE-35 markers to get the original content.
  3. Nimble Advertizer calls your handler app or static config and gets response with ads scenarios.
  4. Advertizer gets files with ads content to process them via Nimble Streamer according to ads scenarios logic defined by handler response.
  5. If the handler response defines that current stream needs to insert ads according to SCTE-35 markers (by using "time-sync":"scte35" field), Nimble inserts the ads into original media right at the time points specified in SCTE-35 marker.
  6. End user connects to Nimble and watches media stream containing original content mixed with advertisements.

You can find example of handler response with marker-based insertion as well as other samples in Advertizer github repo.

You can read all information regarding Advertizer usage on its website.

If you find any issues with SCTE-35 ads insertion, please file us a support ticket so we could help you.

Related documentation


Nimble AdvertizerNimble Streamer live streaming scenarios,



June 11, 2019

Streaming from Larix Broadcaster to YouTube Live

YouTube Live became extremely popular lately and many users of Larix Broadcaster for Android and iOS and Larix Screencaster for Android also started publishing live video there. We get questions about correct setup of Larix products so this brief instruction explains this process.

To proceed with YouTube Live you need to get familiar with service setup using this support page. When you set up YouTube Live transmission, you get these settings:

Primary Server URL: rtmp://a.rtmp.youtube.com/live2
Stream Name: username.1234-5678-abcd-efgh
Larix uses single line for target URL setup so just need to use URL+Key as your connection URL, like this one:
rtmp://a.rtmp.youtube.com/live2/username.1234-5678-abcd-efgh

From Larix UI perspective the setup is performed with the following steps. We assume you've installed Larix using links from this web page.

Open the app and click on gear icon to see the main menu. Go to Connections then click on New connection menu.



It will open a new connection dialog. Enter any descriptive name for a new connection and then insert your connection URL.


Once you save changes, a new connection will appear in connections list. To use this new connection for further streaming, just click on its respective checkbox.


Once you get on the main video preview screen, you can tap on big red circle to start streaming.

This setup is applicable to Larix Broadcaster for both Android and iOS, as well as to Larix Screencaster for Android.

Visit our documentation reference page for more setup information.

If you have questions regarding Larix Broadcaster or other mobile products, please contact us via our helpdesk.

Related documentation


Softvelum mobile solutionsLarix documentation reference pagePublish from Nimble Streamer to YouTube Live,


Streaming from Larix Broadcaster to Facebook Live

Facebook Live became extremely popular lately and many users of Larix Broadcaster for Android and iOS and Larix Screencaster for Android also started publishing live to Facebook. We get questions about correct setup of Larix products so this brief instruction explains this process.

When you set up Facebook Live transmission on Facebook setup page, you get these settings:

URL: rtmps://live-api-s.facebook.com:443/rtmp/
Key: 1310310017654321?s_bl=0&s_sw=0&s_vt=api-s&a=Abw47R4F21234567
Larix uses single line for target URL setup so just need to use URL+Key as your connection URL, like this one:
rtmps://live-api-s.facebook.com:443/rtmp/1310310017654321?s_bl=0&s_sw=0&s_vt=api-s&a=Abw47R4F21234567

Notice rtmps:// prefix and port 443 - Facebook now requires to use RTMP over SSL for live streaming. Our products have full support for it.

From Larix UI perspective the setup is performed with the following steps. We assume you've installed Larix using links from this web page.

Open the app and click on gear icon to see the main menu. Go to Connections then click on New connection menu.



It will open a new connection dialog. Enter any descriptive name for a new connection and then insert your connection URL.


Once you save changes, a new connection will appear in connections list. To use this new connection for further streaming, just click on its respective checkbox.


Once you get on the main video preview screen, you can tap on big red circle to start streaming.

This setup is applicable to Larix Broadcaster for both Android and iOS, as well as to Larix Screencaster for Android.

Visit our documentation reference page for more Larix setup information.

If you have questions regarding Larix Broadcaster or other mobile products, please contact us via our helpdesk.

Related documentation


Softvelum mobile solutionsLarix documentation reference pagePublish from Nimble Streamer to Facebook Live,

June 3, 2019

SRT sender max bandwidth

SRT is a streaming protocol which adapts to the network conditions, helps compensate for jitter, bandwidth fluctuations and has error recovery mechanism to minimize the packet loss.

These excellent features lead to the lost packets re-transmission, which increases the bandwidth between sender and receiver. This is why if the network conditions are bad enough, the re-sent packets may consume all available throughput.

As you cannot control the network environment completely, you should set up the maximum bandwidth available for transmission over SRT for every SRT sender. Even if your network is fine now, it's a good practice to prevent any fluctuations in the future.

This maximum bandwidth limitation is set up using "maxbw" parameter for SRT streaming.
It needs to be set on sender side.

We recommend having maxbw value twice as much as your stream bandwidth, e.g. if you send 1Mbps, your maxbw should be 2Mbps.

We also strongly encourage you to set both "maxbw" and "latency" parameters for streaming via SRT. Please read this article to learn more about this parameter.

Proper configuration option is also available for SRT setup in Nimble Streamer. First, please refer to SRT setup article to get familiar with the general setup process. Once you complete all required steps, use custom parameter fields to define appropriate entry as shown on the figure below.



Please notice that maxbw is defined in bytes per second, NOT bits per second. So if you'd like to set maximum bandwidth to 1 Mbps, you'll have to specify 125000 as your designated value. This is an SRT-specific approach to value definition.


If you have any questions regarding SRT setup and usage, please feel free to contact our helpdesk so we could advise.

Related documentation


Nimble Streamer SRT feature setHaivision blog: Reliable Low Latency Delivery with SRT+SLDP

SRT packet loss is fixed

Softvelum team is an active participant of SRT community and we follow up with all updates as well as contribute to the code base.

Recently the SRT library was updated with a commit which fixes packet loss for the case when SRT Sender is working in Listen mode.

This fix is on the master branch already, and it's on its way to the next SRT package release. Nimble Streamer team made changes to SRT Nimble Streamer package so our customers could make proper update and fix the problem for their streaming scenarios.

So if you use SRT Sender in Listen mode, we highly recommend you to upgrade SRT package.
This will fix the aforementioned problem and will improve your streaming experience.

If you have any questions, please feel free to contact our helpdesk so we could advise.

Related documentation


Nimble Streamer SRT feature set, SRT streaming setup,

May 20, 2019

Support for HEVC over RTMP in Softvelum products

RTMP protocol is widely used for origin delivery, e.g. delivery from encoders to edge servers or delivery between origins and edges. The content codecs defined by the spec are H.264 and VP6.

However the recent increase of H.265/HEVC usage inspired third parties for making changes in RTMP so it could carry this new codec. E.g. ffmpeg has forks with proper support.




Thus Softvelum team has added HEVC support for RTMP into our products:

  • Nimble Streamer supports HEVC via RTMP/RTMPS when it's published into Nimble or pulled by it, in order to transmux into HLS, MPEG-DASH and RTSP;
  • Larix Broadcaster allows publishing via RTMP/RTMPS from mobile devices with Android and iOS.

So if you need to use RTMP instead of RTSPSRT or MPEG-TS for HEVC, you can try this new approach.

Please notice that RTMP support for HEVC is a non-standard experimental feature. In order to use it properly, both sender and receiver sides need to support it.

In case of any questions or issues please contact our helpdesk.


Related documentation


Nimble Streamer, Nimble Streamer supported codecsRTMP support in Nimble Streamer

April 10, 2019

SCTE-35 markers passthrough

Nimble Streamer covers wide variety of live streaming scenarios for numerous use cases. Some of them are related to advertising solutions which involve the usage of SCTE-35 markers which need to be delivered through Nimble Streamer without interruption and alternation.

Following the requests from our clients we added support for passing through the SCTE-35 markers  from incoming MPEG-TS and HLS streams into output MPEG-TS and HLS delivery. So if your original stream has some markers in it, they will be passed through into the outgoing stream.

To enable this feature you need to add the following parameter into Nimble Streamer config file:
scte35_processing_enabled = true
You can read this page to find out how exactly you can make changes to Nimble Streamer config.

If you find any issues with SCTE-35 passthrough, please file us a support ticket so we could help you.

Nimble Advertizer


Nimble Advertizer, our server-side ads insertion framework, has full support for ads insertion with SCTE-35 markers. Take a look at its tech spec and demo page.

Related documentation


Nimble Streamer live streaming scenarios, Nimble Streamer configuration file, Nimble Advertizer,

March 31, 2019

2019 Q1 summary

The first quarter of year 2019 brought a new product and several interesting updates by Softvelum team.


Qosifire live streaming quality monitoring service

Qosifire is a web service for monitoring live streams' availability and quality.
This is our approach to quality monitoring for a variety of streaming companies which need simple, powerful and reliable solution.

Qosifire has 3 basic components:

  • Agent software is installed on customer server to check streams;
  • Our web service console collects data from agents;
  • Free mobile apps notify users' devices about alerts and show stats.

At the moment Qosifire supports Icecast audio streaming quality monitoring. We are working on HLS quality monitoring for video and audio - stay tuned for our updates.
As for pricing, Qosifire is a SaaS with simple and affordable cost structure.


Now let's get back to the flagship product - Nimble Streamer.

For those of our customers who are working with VOD, take a look at video discussion between Jan Ozer of Streaming Learning Center and Yury Udovichenko of Softvelum, called Dynamic packetizing: pros/cons/recipes about pros and cons of dynamic packetizing of live, VOD and DVR content. Your video comments are welcomed!

As for live streaming, you may remember that in 2017 Adobe announced they would stop Flash technology support by the end of 2020. For all live streaming companies this means the decline of RTMP end-user "last mile" streaming.
We've released an article called Get ready for Flash farewell and RTMP decline which describes the timeline for that decline and describe the alternative which our team created to solve that problem - the SLDP low latency live streaming technology. Read this article and let us know of your thoughts on this.

Meanwhile our customers keep using RTMP for "first mile" delivery of live streams, as well as for streams' transfer between origin and edge nodes of their delivery infrastructure. Using that protocol, people care about security of their delivery over public network, so we kept receiving requests for adding RTMPS (RTMP over SSL) support in our products. So we did it.

RTMPS in now supported in Nimble Streamer in all delivery modes like publish, reception and playback.
In addition, RTMPS and RTSPS are now supported in Larix Broadcaster application and mobile SDK for Android and iOS.
Moreover, RTMPS is supported in SLDP Player to allow not just secure publishing but also secure playback in case it's needed too.

Those of our live streamers who use Nimble DVR for recording and playback, might find a new API for DVR export to MP4 very convenient.

Speaking of convenience, take a look at server tags in WMSPanel. We made that for those who has big number of servers and would like to access them easier through the panel.


Last but now least, take a look at The State of Streaming Protocols for Q1 2019 with RTMP declining and HLS going up.


We'll keep you updated on our latest features and improvements. Stay tuned for more updates and follow us at Facebook and Twitter to get latest news and updates of our products and services.

The State of Streaming Protocols - 2019 Q1

Softvelum team continues analyzing the state of streaming protocols. It's based on stats from WMSPanel reporting service which handles data from Wowza Streaming Engine and Nimble Streamer servers - there were 3800+ servers on average this quarter. WMSPanel collected data about more than 14 billion views. Total view time for our server products is nearly nearly 1.7 billion hours this quarter, or 18+ million view hours per day.

Let's take a look at the chart and numbers of this quarter.

You can see HLS share has increased to 74% with RTMP going down to 12%. It's early to say for sure but this might be one of the first signs of shifting from RTMP due to its future decline. We'll see the progress through the year.

The State of Streaming Protocols - Q1 2019 

You may compare that to the picture of 2018 streaming protocols landscape: