April 2, 2020

SRT FEC (forward error correction) support in Nimble Streamer

Softvelum is an active adopter of SRT technology and Nimble Streamer has extended support for it.

One of the features introduced in latest SRT library versions is the ability to set custom packet filters for SRT transmission. The first introduced built-in filter is Forward Error Correction (FEC).

Before using feature, please read carefully the SRT Packet Filtering & FEC feature documentation in SRT library github repo.

1. Disclaimer

We assume you are already familiar with SRT setup and usage, and you've successfully used SRT in other scenarios and use cases.

Before proceeding further, set up a test streaming scenario and make sure it works without any filters.

FEC filter is still under development and we've added it per requests from our customers.
Here is what you need to consider before using it:
  • Use FEC filter feature on your own risk.
  • It may crash the server, so if you face any issues, check Nimble Streamer logs to analyse the problem.
  • Read Known issues section below in case of issues.
  • Try using it with test servers and test streams first, and then move to production only when you make sure it works as expected.

2. Upgrade

In order to use this filter, you must upgrade Nimble Streamer and make sure you have the latest SRT library package.

  1. Nimble Streamer version must be at least 3.6.5-6, use this procedure to upgrade.
  2. SRT library package must be at least 1.4.1, use this page to get upgrade instruction.

Once you upgrade and re-start Nimble Streamer instance, you may proceed to further setup.

3. Setup details

According to information from SRT developers team, the FEC filter must be set on both sender and receiver sides and at least one side should define a configuration for it. In our example we'll define configuration parameter on sender.

As was mentioned, we assume you've set up your SRT streaming scenario. Let's modify it to set up sender part.

3.1 Sender

Go to "UDP streaming" tab on "Live streams setting" page and open your SRT setting. Scroll down to parameters list and add new "filter" parameter with a value which you find appropriate, as shown on a screenshot below.

We use "fec,cols:10,rows:5" there just as example, but you can use any other value which you find appropriate for your case, please refer to FEC documentation to learn more.

As you see we use latency and maxbw parameters as described in this article, we highly recommend always using them for your cases as well.

3.2 Receiver

Now on a receiver side, you need to define "filter" parameter with "fec" value. Notice that you don't need to set more details because you've defined them earlier on sender side.

In case of Nimble Streamer setup, go to "Live streams settings" page, "MPEGTS In" tab and add incoming stream. Then enter "filter" parameter with "fec" value as shown below.

This was an example of FEC usage in Nimble Streamer.

4. Known issues

In case of any issues please analyse Nimble Streamer logs to get more details for further analysis.

As this feature is under development, it has a number of issues. We've faced one of the issues during testing.

When FEC is enabled and lots of packets are dropped, it does not recover:
If a large drop is simulated on the line, SRT gets it's self into a state where it's no longer transmitting packets:
The following message is displayed:
16:40:22.279871!W:SRT.c: FEC: LARGE DROP detected! Resetting all groups. Base: %1583134490 -> %1583139490(shift by 5000).
It's still not fixed as of April 3rd, 2020:

So if you find this error in your Nimble Streamer logs, just disable FEC filter for now.

This is also the advise for any other issues related to FEC: if you face any uncertainly, just remove FEC filter and use SRT without it because we won't be able to help you.

You can look for existing issues and solutions in SRT issues on github. You can post your questions there in case of concerns with FEC filter.

Related documentation

SRT support in Softvelum products, SRT in Nimble Streamer,