December 29, 2021

2021 summary: Nimble Streamer, WMSPanel, mobile SDK and more

Holiday greetings from Softvelum!

The year of 2021 has passed by and it's time to overview what our team has accomplished and what you might find interesting for your business.

But first, we're glad to recall that Softvelum became the finalist of 2021 Streaming Media European Readers' Choice Awards in Hardware/software Server category with our Nimble Streamer media server. Thanks to everyone who voted for us!

We've made a number of big and small adjustments, you might have seen them in our announcements in social media.
Here are the most notable updates.

WMSPanel: improved billing, cloud backup and more

WMSPanel cloud-based service was adjusted this year to make sure our customers can control their streaming infrastructure more conveniently and safely.

Improvements in billing mechanics of WMSPanel now allow combining billing for WMSPanel, Transcoder and Addenda licenses into single charges. The ability to receive up-front payments was updated per users' feedback to make it even more flexible. We've also supported PayPro Global - the second gateway so you could have an alternative destination for making payments.

Nimble Cloud Backup is another significant WMSPanel feature we introduced this year.
You can save streaming configs of your Nimble Streamer instances into our distributed cloud database to improve redundancy. Then if you need to get back to some version of their cloud backup, you can restore it within WMSPanel account as a new server instance. Learn more about Cloud Backups and try it in action.

Cloud technology users are always concerned with security. Take a look at our latest Secure your account in 3 easy steps article showing how you can use users management, two-factor authentication and cloud server backup to make sure WMSPanel is safe from multiple directions.
Speaking of security, one of the most frequent questions these days was:
Do we use log4j?
The answer is no, we do not. None of our products use it so there's no need to worry.

Nimble Streamer

Nimble was in focus of our team: we were improving existing and adding new features.

Server playlist was introduced for Nimble Streamer.
You can create live streams by composing VOD files into playlists to produce single live stream. The playlist is a JSON file with a simple grammar which allows setting streaming scenarios of various complexity.
We'll soon release live streams support for playlist insertion in addition to VOD.

Nimble Streamer Advertizer has been significantly improved per our customers' feedback.
  • VOD server-side ads insertion is working. At the moment, HLS output with MPEG-TS and fMP4 containers is supported. Take a look at VOD SSAI overview article and also read 
  • Per-session ads can be inserted using your own session handler. It allows making per-session ads insertion for each individual user by using customer-side session handler. You can also get per-session statistics to accumulate ads insertion metrics for advertisers' confidence.
  • Local ad files and local config can be used. Watch Add pre-roll ads easily video tutorial showing that case.

Live Transcoder has a few updates including these:
  • Conditional transcoding allows enabling pipelines based on incoming stream's resolution. You can set a condition based on height and/or width thus avoid unnecessary waste of your server resources. This is especially useful for creating ABR live streams.
  • NETINT hardware encoder can now be supported via custom FFmpeg build, please read this post describing this approach.
A small but important feature for those who may concern: KLV metadata is now supported in Nimble Streamer.

Templates and configs for Zabbix monitoring of Nimble Streamer and SRT streams are now available along with a tutorial video about it. System administrators can now add their media server to their Zabbix to keep tracking live streaming parameters of Nimble instances as well as SRT-specific stats.

SLDP protocol is being actively used by our customers to provide low latency playback. Recently we've made a simple mosaic videowall demo page which allows playing 4 streams simultaneously. You can make your own mosaic using reference simplified version on our github.

Last but not least, Nimble Streamer is now available on ARM64 platform. Take a look at this tab on installation page to see instructions for Raspbian and Ubuntu 20.04 for ARM64.

Larix Broadcaster and Larix Player

Our mobile products - Larix Broadcaster and Larix Player - were actively used through the year by multiple users.

We released SDK for Android and SDK for iOS pages with architecture overview of Larix Broadcaster to make it easier to understand for beginners. They also refer to apps' sample code available on github.

Larix Broadcaster now supports Talkback feature set, which is the ability to get an audio return feed. So while you generate a stream, you may get audio stream via SRT, RTMP, SLDP or Icecast. This is a great feature for those creators who need to get a word from their studios while streaming live. Watch a third-party on Talkback and Vmix video tutorial on that.

Image overlays were implemented in Larix Broadcaster for both platforms. Take a look at our video tutorial showing overlays in Larix for iOS as an example of setup.

We've also introduced stand-by mode in Larix Broadcaster. When the stream hasn't been started, just long tap on Start, this will start stream in pause mode, image and sound will disappear while the stream is running. Meanwhile you may wait for a talent to appear or re-set the scene.

React Native: notice that we're currently working on React Native version of our streaming SDK. Contact us if you'd like to get early access for it.

For those of our users who use our apps on a daily basis we compiled our Best practices for Larix Broadcaster production deployment guide describing what might be useful in various scenarios.

Take look at docs reference page for more articles and videos about our mobile products. Also, our roadmap page contains our future plans on Larix product family development.

YouTube channel updates and our social media

This year we also posted a number of videos on our YouTube channel. Here are some most notable videos:
In addition, we got more videos about mobile products as well.

We also keep track of interesting third-party videos about using our products. Please check Reviews playlist with full list.

Another social media activity that we've made was the move of our github repositories.
We've made Softvelum github account which you can follow up to track our open source activities.

Last but now least, you can follow us any way you like for future updates via TwitterTelegramFacebookRedditYouTube and LinkedIn.

That's all for now.

Our team wishes you a Happy New Year and we'll see you in 2022!

December 23, 2021

Deliver SRT to multicast UDP MPEG-TS

We have released a new video tutorial about delivery of SRT across servers and transforming the content into multicast UDP MPEG-TS

It shows how to deliver live stream is the following scenario:

  1. Get two programs from MPEGTS UDP stream.
  2. Deliver it via SRT from AWS Nimble server to bare metal instance across the internet.
  3. Generate multicast UDP MPEG-TS on the second server for both programs.

Follow our YouTube channel to get more videos.

December 9, 2021

Improvements in billing mechanics of WMSPanel

Our team has recently made a few updates and improvements for the billing of our customers which will make it easier to handle. Please check what might be useful for you.

Combined billing for WMSPanel, Transcoder and Addenda

Previously, if customers wanted to add licenses for Transcoder or Addenda, they needed to create separate subscriptions for each type of license.

Our team has improved license subscription mechanics. For all new customers of Transcoder and Addenda who haven't had active licenses, WMSPanel subscription now allows to add Transcoder and Addenda licenses costs to panel's services.

Once you create new licenses, you will need to pay initial license fees proportional to the number of licenses and the number of days left until the next billing period of WMSPanel. At the nearest billing date you'll be charged with your usual WMSPanel cost options (servers, slices, stats) plus full monthly cost of all active licenses. If you cancel a license between billing dates, its cost will not be charged at the next payment date.

This way our customers will have a single payment every month instead multiple payments.

If you have separate legacy subscriptions for panel and licenses and you want to combine them into one, let us know about it so we could help you to transition.

PayPro Global payment gateway

Many of our customers already use it but we'd like to remind about this once again.

WMSPanel can be paid via the second payment gateway, PayPro Global. It allows a payer to control payment method, handle subscription email and billing addresses without the need for contacting support, and also view original invoices first-hand.

Up-front payments

Another option that we'd like to remind about is up-front payment.

We may accept a payment up-front, usually it's equal the price of 12 months of service with current amount of servers and options. The charged amount is put on your account credit. Every month a cost of your monthly services is withdrawn from your credit. If your monthly cost changes, then the cost of withdrawal is updated accordingly. The respective notifications about price change and credit charges are sent to the user. All charges also appear in "Payments and Invoices" tab of settings menu.

Transcoder and Addenda licenses will also be covered by account credit, just like it's done for regular subscriptions. When you create a license, we'll charge the license initial payments from your account credit.

Our team can enable up-front payment by request to our helpdesk.

If you have any further improvements which you'd like to have, tell us about that.

December 2, 2021

Local configuration and ad files support in Nimble Advertizer

Nimble Advertizer has become more flexible with the recent update.

Local config file

Instead of requiring a JSON config to be available via HTTP/HTTPS URL, you can now store the config in a local file. So besides handler app and static config available from a remote source, you can simply put your JSON config on a local hard drive where Nimble Streamer is installed. Nimble config will contain "file://" scheme location in "advertising_url" parameter.

Local ads content

Previously we required your ads to be available via URL. Now you can also put them locally on a Nimble-powered server and refer to them via "file://" scheme.

Video tutorial

Check this video showing both features in action:

You can read full Advertizer tech spec for detailed description and example of usage.

Let us know if you have any further questions.

November 28, 2021

NETINT encoder support in Nimble Streamer Transcoder via custom FFmpeg build

Live Transcoder for Nimble Streamer supports a number of encoding libraries off-the-shelf which cover most used technologies. Besides native integration with SDK and specific libraries, Live Transcoder uses some FFmpeg libraries for certain tasks. This way, Nimble allows using external libraries to extend its capabilities by re-building them with FFmpeg as necessary.

NETINT provides its hardware encoders API via FFmpeg-based libraries. This means you can make a custom FFmpeg build for Nimble Streamer and thus give it the access to NETINT encoding. Once you do that you'll be able to add it into your transcoder scenarios.

Let's see how you can accomplish that.

We assume you already have Live Transcoder installed and registered. In not, please check Transcoder installation instruction and watch introductory video tutorial from our playlist.
Before proceeding further, make sure you've upgraded your Nimble Streamer instance to the latest version.

First, you need to follow QuickStartGuideT408_T432_FW2_5.pdf documentation file:
  1. install necessary tools
  2. build libxcoder library
  3. check out FFmpeg 4.3.1
  4. apply Netint patch FFmpeg-n4.3.1_t4xx_patch
Second, the instruction says you need to run "bash", but instead of that you need to run this command:
bash --shared --custom_flags "--build-suffix=-nimble --disable-ffmpeg"
This will build shared libraries with Nimble suffix.

Third step is to run these commands from a regular instruction:
make install
sudo ldconfig
Finally, restart Nimble Streamer using a command for your OS as described here.

After that Nimble will be able to use the new libraries.

The encoder settings in transcoder scenario will need to use the following parameters:
  • Encoder must be set to FFmpeg
  • Codec must be set to "h264_ni_enc". Notice that recent hardware version uses "h264_ni_logan_enc" codec.
  • Custom parameter xcoder-params will allow to control the encoder behavior
An example is shown here:

Once you save settings in your scenario, your Nimble Streamer instance will use NETINT encoder.

If you have any questions about custom FFmpeg builds and their integration with NETINT please contact our helpdesk.

Follow us in social media to get updates about our new features and products: YouTubeTwitterFacebookLinkedInRedditTelegram

Related documentation

November 23, 2021

Recording NDI as HLS DVR

We've released a short video tutorial showing a combined NDI and DVR use case.

  1. Nimble Streamer takes NDI input
  2. NDI is transcoded into HLS output
  3. HLS stream is recorded and played with Nimble DVR

Check the video below and feel free to visit NDI and DVR digest pages of Nimble Streamer.

November 22, 2021

Converting NDI into DRM-protected MPEG-DASH

We've released a new video tutorial showing a combined NDI+DRM use case.

  1. Nimble Streamer takes NDI input
  2. NDI is transcoded into MPEG-DASH output
  3. DASH stream is encoded with Widevine using EZDRM
  4. The playback is checked with THEOPlayer

Check the video below and feel free to visit NDI and DRM digest pages of Nimble Streamer.

October 27, 2021

Web UI for Server Playlist of Nimble Streamer

In our previous Playlist article, we have described a very basic playlist to run a set of files as the only live stream which is easy to write manually.

As playlists grow, more JSON tokens are needed and it's easy to stumble in numerous JSON brackets while adding just a couple of files forgotten to add earlier. Things can be a real mess if you add more than one stream and dozens of files. We have a better idea: you don’t have to edit the JSON files manually but use our server Playlist generator page instead.

Essentially, you need to fill the name of the application and stream to define a name of a live stream to output for your files, specify a full path to file located on Nimble Streamer or even multiple files at once, and receive a faultless playlist for Nimble. Then you either download it as a file or copy it to the clipboard to transfer. More details can be found below are in this article.

You should also watch this video demonstrating the entire process:


We assume that Nimble Streamer is already installed on your server. Just to remind you, the Transcoder package and license are needed for running playlists. Please subscribe and install the Transcoder package first as described in our installation manual.

All the video files must have the same video and audio codecs and resolution. When the file is switched and the next file's parameters are different the most of the video players will react to it with glitches or interruptions in the playback. You may try SLDP output alternatively, as it is more loyal to codec changes, but still, we strongly recommend preparing files for the playlist as the first step.

We also consider you have read the full server playlist technical specification for complete understanding of all the features and requirements of this feature set.

Quick actions on the page

Let’s have a quick tour on Playlist generator page. Initially, it looks like below:

First, specify an application and stream which Nimble Streamer will use for generating a live feed.

If you've already defined an application in the WMSPanel and marked HTTP output protocols they will be used as the output protocols of your playlist, e.g. LL-HLS or SLDP, or any other. Otherwise, protocol settings on "General" tab will be used. We already explained how to get NDI output from a playlist, by the way.

Defining a stream is equivalent to adding a Task in a server playlists’ grammar. More Tasks can be added meaning you can have multiple named feeds via one playlist.

Next, a content Block is required and the first one is created initially. You can name a Block for easier navigation, or as a reminder, but this is not mandatory.

The second required action is adding files you want to playback.  The files must be located at the Nimble Streamer server and must be accessible by Nimble. Please check the permissions if Nimble is not running as root.

Fill the full file path and its name in the corresponding field. To add one more file, click "Add source file", a new input line will appear. For your convenience, we have "Add multiple files" button, to quick input of list of files.

One tip for having a quick list of files in a directory is to use "ls -d -1 "$PWD/"*.mp4" command in terminal and paste its output into "Add multiple files" popup.

After clicking "Add sources", all the positions will be filled with provided file paths.

Also, the download or copying to the clipboard is available to get a playlist. Choose the one that suits you the best. Preview is also possible by clicking on "Show playlist" button.

You may notice that the IDs of blocks are changing randomly. This is done on purpose. If you change or add a file in a block, but do not change the ID, it is considered no changes were made in a Block. Now if changes are made and the playlist is overwritten with a new one, Nimble will re-read within sync interval and apply its changes. Note, no Nimble restart is required for this.


For each Block, the "Loop block" check box is available, making Block to repeat endlessly. Block is also having a "Start time" property, for specifying the exact starting time in GMT (not your server’s time zone).

Every added file has a dropdown menu to add advanced options. Starting time (Offset) and duration can be specified in seconds. If a file has several tracks in it, you can define which one needs to be played.

Final thoughts

Server-side playlists can be used for different applications such as simulation of a live feed, airing a pre-recorded stream at a specific time, as a backup program to show at air failures, or even as 24x7 radio made from your MP3 collection.

We believe Server-side playlists will be a handy tool for our colleagues in the industry.

Related documentation

Nimble Streamer Server Playlist, Playlist GeneratorGenerate NDI stream from local files

September 29, 2021

Q3 news: server playlists, conditional transcoding and more from RCA finalist

Softvelum team was continuously improving products set during Q3, here's what we've got for you this quarter.

We are excited to be the finalist of 2021 Streaming Media European Readers' Choice Awards in Hardware/software Server category with our Nimble Streamer software media server. Huge thanks to all of our customers and partners who voted for us!

Nimble Streamer was improved with a few new features:

  1. Server playlist was introduced lately for Nimble Streamer. With that feature you can create live streams by composing VOD files into playlists to produce single live stream. The playlist is a JSON file with a simple grammar which allows setting streaming scenarios of various complexity. You can read full tech spec to get familiar with the feature and take a look at an example of generating NDI stream from local files. We'll keep adding more example of this feature usage.
  2. Conditional transcoding was added into Live Transcoder to enable transcoding pipelines based on incoming stream's resolution. You can set a condition based on height and/or width thus avoid unnecessary waste of your server resources. This is especially useful for creating ABR live streams.
  3. Nimble Streamer is now available on ARM64 platform. Take a look at this tab on installation page to see instructions for Raspbian and Ubuntu 20.04 for ARM64.

SLDP HTML5 Player SDK now has "self-serve": you can subscribe for it, define a list of domains to map and generate your own SDK package within less than a minute.

Our mobile team keeps improving our mobile products:

  1. Larix Broadcaster and respective SDKs were updated this quarter, take a look at a list of mobile SDK releases.
  2. We see Larix being actively used in large scale deployments so we made Best practices for Larix Broadcaster production deployment article to share the experience of our team and our customers. Feel free to use it and share with fellow live streamers out there. Russian version is also available per request of our users. Feel free to translate this material to other languages (this proper link to our original).
  3. Speaking of docs, Callaba Cloud released a video about setting up SRT stream via Larix Broadcaster to Vmix and Larix Talkback, that's an awesome use case.

That's all for now. Follow us via social networks to get our updates as they appear.

September 23, 2021

Conditional transcoding for ABR

Nimble Streamer Live Transcoder allows building transcoding pipelines of various complexity however it used to provide only straight-forward scenarios regardless of incoming stream parameters.

With conditional transcoding you can implement more complex scenarios based on the resolution of incoming stream. You may define the following conditions for decoder element:

  • width of the original stream;
  • height of the original stream;
  • comparison operators <, <=, =, >= or >;
If the defined condition is not met, the decoding will not start and its respective pipeline will not start.

The most popular use cases of such conditioning are:
  • situational up-scaling: if you have a scenario to transcode 4K input to 1080p and your input stream from your source happen to go down to 720p, this will prevent wasting your resources to create unnecessary high resolution.
  • set maximum output resolution, so whatever is published by your streamers, you produce a ladder limited from above.
All use cases fit perfectly with live ABR feature set of Nimble Streamer. It allows defining ABR streams with any number of streams and the output will provide any streams that are available at any given moment. So if some stream is not generated due to conditional transcoder, the output adaptive stream will still be available for playback with lower resolutions.

Here's how you can set up conditional transcoding.

We assume you're already familiar with Live Transcoder, you already have an active Transcoder license and you have it installed and registered

We'll create a scenario which allows down-scaling any incoming stream to 720p if the input video has larger frame size, then do the same for 480p resolution and create 360p regardless of the input. The audio will be passed through for all inputs.

Create a new scenario and drag and drop a new Video source element there.
Then Click on Filter settings to see fields with conditions:

As you can see from the screenshot, this decoder will be initiated if the height of original stream is greater. Then we put Scale filter and Video output element to downscale video to 720p into respective pipeline as shown below.

As a result, you'll get 720p only if the source stream is greater than 720p. If the original stream is 720p then you'll be able to use it in our ABR output as is, we'll show it below.

Now let's add 480p transcoding pipeline.

This Video source has condition of height>480. You'll get 480p only if the source stream is greater than 480p. This will cover extreme cases when the source drops the resolution for some reason.

The remaining 360 pipeline can be implemented without any conditions as we assume the resolution should not drop below 480p in vast majority of cases. Full transcoding scenario will look like this.

Now, having these conditional pipelines, you can proceed with creating output ABR stream.
  1. Go to Nimble Streamer top menu and click on Live Streams.
  2. On the next streams page you need to find your current transcoding server and click on the number in ABR column.
  3. You'll be brought to ABR streams page, there you need to click on Add ABR setting.
  4. You'll see a dialog which you need to fill as shown below.

Here you see an original stream as well as all 4 down-scaled sub-streams. If any of the sub-streams becomes un-available available, Nimble will still generate the correct playlist with active streams so your player will be able to choose between available resolutions.

You can find more details about setup and ABR streams' usage in this ABR setup article.

Overall, conditional transcoding can serve many purposes so feel free to experiment with it as much as you need. Let us know of your use cases which utilize this feature.

Follow us in social media to get updates about our new features and products: YouTubeTwitterFacebookLinkedInRedditTelegram

Related documentation

September 9, 2021

Nimble Streamer is Readers' Choice Awards 2021 finalist

Softvelum team is excited to be among the finalists of 2021 Streaming Media European Readers' Choice Awards in Hardware/software Server category with our Nimble Streamer media server.

We've been the finalist in 2016 Reader's Choice Awards as Best Innovation, and now we're here again as the best server, that's very exciting.

Huge thanks to all of our customers and partners who voted for us!

August 30, 2021

Generate NDI stream from local files via Server Playlist

We want to tell you about Server Playlist feature, which lets you create live streams from the video or audio files on your storage. This feature gives vigorous possibilities to your live streaming setup: from simply running a video in a loop as a backup stream to arranging a precise schedule for programs to run at a specific time. Multiplied by Nimble’s and Live Transcoder processing power, you can have any desired live stream egress ranging from re-publishing for any major streaming provider via RTMP or have a precise NDI stream to your equipment. Any supported output protocol can be used, including cutting edge SLDP, SRT and RIST.

As you finish reading this tutorial, you will be able to stream files from a hard disk drive as NDI streams and learn the basics of playlist editing for Nimble Streamer.

For our use case, we will just describe a couple of files in a playlist and loop them endlessly to a live stream, next we set up the Transcoder to make NDI output.

Step 1: Check Prerequisites

First, make sure you have the latest version of Nimble Streamer. You can install it using this instruction or upgrade it.

Second, make also sure that the Transcoder package is installed as described on Transcoder installation page.

Third, you need to have an active Live Transcoder license with respective subscription. Check the license at your account Settings menu under Transcoder licenses tab.

Also, we assume that all your video files are encoded with H.264 and have the same resolution and stereo AAC audio stream, so no additional encoding will be discussed.

Step 2: Make Nimble to know your playlists

Conception starts with a Playlist that uses a JSON syntax to describe files for making a live stream. JSON is powerful yet clear and various online tools can be used to validate it against errors.

To make Nimble know the playlist is engaged in work, specify a location of your playlist by adding the server_playlist_sync_url option to nimble.conf. Location can be either a local path on a hard disk drive with Nimble or HTTP(s) URL. 

Add the next string to /etc/nimble/nimble.conf file:


and restart Nimble to apply changes. We will fill basic_playlist.json a moment later.

The playlist will be reloaded every 10 seconds, so you can make dynamic changes via some custom scripting and these changes will be accepted by Nimble. If you want any other update time interval, you may set it via the server_playlist_sync_interval option in nimble.conf or via the playlist itself.

Step 3: Write a playlist and get your live stream

The playlist’s grammar is based on key sections: Tasks, Blocks and Streams - which can have their own properties, e.g. Start time or Duration.

Now, copy this text to basic_playlist.json file using your preferred console editor:

  "Tasks": [
      "Stream": "live/from_playlist",
      "Blocks": [
           "Streams" : [
            {"Type": "vod", "Source": "/var/nimble/mp4/bbb_1080p_h264_aac.mp4"},
            {"Type": "vod", "Source": "/var/nimble/mp4/TOS-1080p_aac.mp4"}

A few seconds later you will notice stream live/from_playlist appearing at Live Streams / Outgoing Live streams of your server.

This very basic example perfectly illustrates the mandatory fields and values of a playlist. It contains one Tasks, one Block, and two Stream sections.

Tasks object represents an array of alive streams, which must have a name set by a Stream field as application/name. Tasks also hold an array of Blocks that can be started at different times. It is achieved via Start property, but we are not discussing it for now in this tutorial. Each block must have a unique Id and a number of times to run. These repetitions are set by MaxIterations and each block runs only once by default. Setting MaxIterations to 0 means the infinite loop of a block.

Next comes the Streams array of objects which holds the full path and name of a file to play within the previously defined live stream. Source property is used for this. At the moment, Type property needs to be “vod” in case of files.

No more additional properties are needed for our simplified case but more details can be found at feature technical spec if needed.

Step 4: Turn Live Stream into NDI stream

Now, you see a live/from_playlist stream, so it can be processed via Transcoder to have NDI output.
Create a new Transcoder scenario and use live/from_playlist as Audio and Video Input.

As for Video and Audio output, click NDI radio button and name it from_playlist:

Click Save button and switch to a console to check available NDI streams with the nimble_ndi tool or any other NDI-supported software.

You did a great job by easily transforming your video files to an NDI stream using the Nimble Server Playlist feature and Live Transcoder.

Also take a look at Server playlist support for live steams input article in case you'd like to mix live with VOD in your playlist.

We will continue to show more elegant scenarios and more complex playlists’ grammar in our later articles. Please feel free to share this article with anyone who may be interested in Nimble Streamer’s ability to playback files as a live stream.

Also check our short video about Recording NDI as HLS DVR for further playback with Nimble Streamer.

Related documentation

August 8, 2021

Best practices for Larix Broadcaster production deployment

Larix Broadcaster is a universal mobile tool which is used in a variety of cases from a single event to complex multi-device production. Large-scale deployments show that you may successfully use modern mobile devices for live content remote contribution.

For example, as per Sports Video Group News, Larix was used in 2020 virtual drafts of NFL and MLB. They've released two articles regarding NFL Draft, with Larix Broadcaster mentioned as part of streaming setup: "NFL Draft 2020 ..." and "NFL Draft Reflections ...". The MLB Draft is covered in their respective MLB Draft 2020 article.
In this article we'll overview the best practices and recommendations for Larix Broadcaster deployments and mobile live streaming in general, based on our customers' experience.

Testing is crucial

First and most important advice we can give is: test as much as you can prior to your live event. This relates to hardware capabilities, software features, network and environment features.

This is especially important before making decisions about buying a significant amount of hardware, e.g. when you purchase a fleet of devices for your crew. In general it's good to have identical devices for all members of the team, so we highly recommend doing testing before such purchase.

So start with getting your hands on at least one device and try running your streaming scenarios on it. 

First, check the straight-forward scenario with some default settings (720p@30fps, H.264, default bitrate etc.) then move to those settings which you'd like to use in production if they differ. Short tests need to be combined with long runs.

Then try to push the limit. If your event is planned for 1 hour then run a 2-hours test, just to try the robustness of your device and your streaming setup. If your designated device has any energy-related or temperature problems, you'll see them at this point.

As part of our testing routine before major public releases, we run an hour-long test with periodic changing scenes, doing rotation, camera flip etc to imitate intensive work. Then we also do a work-day-long test with more static-scene streaming to make sure Larix won't cause troubles or overheat on the long run. We call all that the "endurance test".

Android vs iPhone

iPhone is the best option for live streaming so far. We run our tests on a range of devices from iPhone 6s to iPhone 11 Pro, and they all provide Larix with 1080p@60fps encoding. Starting from iPhone XR, latest models even provide 4K@60fps. Of course, you can surely use HEVC for all these modes. The image quality is also excellent, as you would expect.

What about Android? Most of the manufacturers provide only standard to minimum capabilities for third-party apps. We can confirm only one device which supports all the features of Android platform, that is Google Pixel 5. You can be sure Larix will pick up 1080p@60fps, concurrent cameras, 4K@30fps and all the latest platform features.

Android platform encourages the existence of what we call a "zoo of devices". This means a wide variance of shapes, sizes and features, however when it comes to encoding, a vendor will probably follow basic requirements like 1080p@30fps but most other image-related features won't be available for third-party apps. So you won't see 60fps, concurrent cameras or sometimes even 4K in Larix Broadcaster. Unlike iPhone, most Android devices do not provide exact frame rate of 25fps.

Read more about FPS support on Android and iOS in Q12 of our FAQ. It's a bit tricky on mobile devices in general.

If you prefer using Android and you don't need fancy image features, then most mid- to high-tier Android devices should work fine for you. But you need to run proper testing as described above. We use several devices by Samsung, Xiaomi and other brands and they work well in our tests. So far Pixel 5 is the best among them.

One more notice about Android: Larix Broadcaster can be used in background mode which will allow turning off the screen, thus saving energy and making the device less warm.

If you prefer an iPhone then basically any affordable model will do the job.

Audio, additional gear and tricks

Many of our customers use external audio equipment to obtain better sound for their live streams. We like good sound so besides "standard" features like sample rate or channel count, we allow selecting audio source as well as stream in "audio-only" mode when Larix streams only audio part of content. We also plan to extend this with gain control later on.

We also see our customers using external microphones and external sound cards successfully, for example we test Larix with iRig HD2 and it works great. Some sound cards require different audio sample rates, i.e. strictly 48000Hz or 44100Hz. So if you experience issues please check that setting, and also switch audio sources as some devices are capricious about that.

Besides audio, additional streaming gear may include lightning kits and tripods, these are things that you need to pick up according to your case.

Take a look at The Ultimate Guide To DJ Livestreaming by Phil Morse who gives a good overview of audio hardware, other gear and best practices.

Notice that Larix Broadcaster provides image framing features like rule-of-thirds and safe margins. We recommend you to watch Video Camera and Webcam Framing for Live and VOD tutorial by Jan Ozer to get some creative ideas.

And of course don't forget about the power source. Your phone battery may be excellent but high-quality streaming will eat it very quickly. So either get some good power bank or just plug your phone into a charger. Notice that you'd like to reduce power consumption and have less heating. you can disable live rotation and image overlays, this simplifies the post-processing.

Streaming protocols

Today we have two general options when choosing a live streaming protocol: SRT and RTMP.

If you use popular public services like YouTube Live, Facebook Live or Twitch, you have no choice but to use RTMP. It's an old and well-implemented technology available in any service and live decoder. It does the job properly for a large number of use cases, especially when you stream in a controlled reliable network environment. Larix Broadcaster has solid RTMP support and it's tested with all major RTMP-powered solutions.

If you build your own streaming network or if you can choose a provider with SRT input, you should definitely consider SRT. This is especially important if your crew members stream in mobile networks. SRT was designed for operating in unreliable networks so even if your network has significant packet loss, this will be properly handled by re-sending the lost packets. This advantage comes with a downside: you need to set a latency parameter which defines a time buffer used for compensating the glitches, so keep in mind that you'll have that delay in your production input. We recommend using latency parameters as 4*RTT with your streaming destination, please read this article for more details.

Larix Broadcaster has full support for SRT publishing in Caller, Pull and Rendezvous modes and SRT is being properly tested with all major SRT solutions and tools. Most modern hardware decoders can process SRT (e.g. Haivision is the inventor of SRT and their devices have full support). There are also a lot of software solutions like our Nimble Streamer or Wowza Streaming Engine capable of SRT streaming, so if you decide to try something different from default live streaming services, you'll have plenty of options.

Larix also supports RTSP and RIST output even though those protocols are not used as widely as RTMP or SRT.

So work with your server-side team or your streaming service provider to see which option you may use.


Remote contribution often means that a talent needs to be in contact with the studio. Larix Broadcaster supports Talkback, that is IFB audio return feed which you may get on your mobile device using several protocols. You can use any software or hardware solution to generate a live stream with voice instructions from the studio and use earpiece on a mobile device to hear it.

Take a look at our video setup instruction and watch mobile reporter use case demonstration with SRTMiniServer which supports talkback generation.

Larix Grove

If you operate a fleet of devices for live content contribution you need a way to provide your crew with connections' details. Every contributor will have separate connection URL and you'll need to explain each of them how to make the setup.

You may use Larix Grove format to create specially formed links and their QR codes to propagate your settings. On iPhone the QR code can be captured by the system camera app. On Android you may use any QR code reader for that. Once the code is recognized, the settings are imported into Larix Broadcaster and the stream can be started right after that.

The format is simple so you can either use our online wizard or make your own URL generator for that.

Test any further changes

So you've run your tests prior to your live event and Larix Broadcaster works perfectly, like you would expect. 

Now, freeze the settings and don't change anything until the event is over. No software updates, no settings change - just run the event with previously tested devices.

If you really need to make changes to either your mobile app or to server-side part between further events, then start your testing from the beginning to make sure that nothing is broken.

You can never over-test, the more you test the better.

We hope these recommendations are useful for you. If you have your own experience which might be useful for other streamers out there, please don't hesitate to send us a message about it. We appreciate all feedback from our customers.

Follow us in social media to get updates about our new features and products: YouTubeTwitterFacebookLinkedInRedditTelegram

July 28, 2021

Streaming Media European Readers' Choice Awards 2021

Update: we've become the Finalist in hardware/Software server category, thank you all who voted for us!

The Streaming Media European Readers' Choice Awards of 2021 has finished voting, thank you for your participation.

Our company was represented in five categories with various server and mobile products:

Softvelum team greatly appreciates all the votes that we got from our customers and partners, your support helps us promote our products and move forward our innovations!

July 15, 2021

Playout - server playlists - in Nimble Streamer

Server playlists feature set of Nimble Streamer allows creating live streams by composing VOD files and live input streams into single playlists.

Basic workflow looks like this:

  1. Prepare files for further live streaming.
  2. Create JSON playlist which contains description of generated output live streams and their respective files' playback scenarios.
  3. Create Live Transcoder scenarios to re-align output if needed.
  4. Configure Nimble Streamer to use the designated JSON playlist.
  5. Nimble instance generates output live steams according to playlist.
  6. You can update the playlist any moment, it will be picked up by Nimble within playlist sync interval.

The playlist is a JSON file with a simple grammar which allows setting streaming scenarios of various complexity.

Notice that server playlist feature set requires Live Transcoder to operate so you'll need to subscribe for a license and install/register Transcoder on your server.

For more details, read Server playlists page on Nimble Streamer website.

June 30, 2021

Q2 2021 news: Advertizer, KLV, Zabbix, Larix overlays

Let's see what Softvelum team has to show from Q2 of 2021.

Before moving to our features and updates, check Video Delivery Landscape of 2021 created and maintained by Divitel, we are excited to see Softvelum there.

Also take a look at our latest Secure your account in 3 easy steps article showing how you can use users management, two-factor authentication and cloud server backup to make sure WMSPanel is secured from multiple directions.

Nimble Streamer

A number of updates about our software media server were released.

  • Nimble Advertizer is now able to serve per-session ads using your own session handler. It allows making per-session ads insertion for each individual user by using customer-side session handler. You can also now get per-session statistics to accumulate ads insertion metrics for advertisers' confidence. Read this article to learn more.
  • Nimble DVR now has SCTE-35 support. Just enable "Keep SCTE-35 markers" option to allow recording SCTE-35 markers from incoming stream into DVR. Once HLS DVR is played, those markers are streamed along with the content.
  • Speaking of DVR, check our new DVR setup tutorial video on Softvelum YouTube channel.
  • KLV metadata is now supported in Nimble Streamer, read this article for more details.
  • SRT: we've updated libsrt to the latest 1.4.3 version for Nimble Streamer SRT package. You can now use custom parameters local_ip  and local_port in Push mode. Read our main SRT setup article to see other details.
  • Also check ATEM Mini streams RTMP to Raspberry Pi with Nimble Streamer to make SRT output - an interesting video from our user shows Nimble in action for SRT streaming.
  • Larix Grove URL and QR code can be generated in Nimble Streamer / Live streams settings under Global, Applications and Interfaces tabs to make RTMP and RTSP ingest, and also under and MPEGTS In tab for SRT and RIST. This way you can easily test your Nimble Streamer publishing settings with Larix Broadcaster even easier.
  • Zabbix: last but not least, we've released templates and configs for Zabbix monitoring of Nimble Streamer and SRT streams. System administrators can now add their media server to their Zabbix to keep tracking live streaming parameters of Nimble instances as well as SRT-specific stats.
  • We've also added peak daily connections as part of daily stats in WMSPanel.
  • WMSPanel now shows NVidia GPU stats and average RAM cache in each server details.

Mobile products

This week we'll release SDK updates for our mobile products - Larix Broadcaster and Larix Player.

We'll release related mobile SDKs' updates within a few days.

That's all for now. Follow us via social networks to get our updates as they appear: Twitter, Facebook, Telegram, LinkedIn, YouTube and Reddit.

June 7, 2021

Zabbix monitoring of Nimble Streamer, SRT streams and NVidia GPU

A continuous monitoring is needed if you want to ensure the correct functioning of any server. Getting basic metrics such as RAM, CPU or bandwidth usage helps rapidly responding to performance issues.

We’d like to show a way for our customers to add Nimble Streamer server-specific metrics as well as SRT streams statistics to an open-source Zabbix monitoring system. This will allow you to keep extended metrics in your monitoring system, which sometimes are not even available in WMSPanel, like RAM cache status for certain periods of time.

SRT metrics will also be helpful not only for stream health checks but also for analysis of how this new protocol works for your environment.

TLDR: You can find Zabbix templates and agent configs for Nimble Streamer general and SRT monitoring in this GitHub repo.

1. Monitoring features and metrics

We provide two Zabbix templates:

  1. General server metrics
  2. SRT metrics

Each template is based on certain calls of Nimble Streamer native API which we'll describe in later sections.

Take a look at this quick demo video showing all steps and brief capabilities overview

1.1 General metrics

The first TemplateNimbleServer.yaml in our github collects Nimble Streamer server statistics, which are obtained via /manage/server_status method of Nimble Streamer native API. This template includes some graphs for the RAMCache and FileCache monitoring.

You can find a detailed description of each parameter on server_status API method page.

1.2. SRT metrics

The second TemplateNimbleSRT.yaml on our github is made for monitoring the SRT streams statistics using /manage/srt_sender_stats and /manage/srt_receiver_stats API methods respectively. It uses Low Level Zabbix’s Discovery (LLD) to dynamically discover incoming and outgoing SRT streams metrics. For each connection (either sender or receiver) an Application with detailed statistics is created. Brief description is available if you move a mouse over [?] icon.

Please note, that the Nimble native API doesn’t send full scope of session metrics from SRT lib, but you can find full list at SRT library docs page as a reference.

Nimble Streamer returns the following list of values by API call that are also used in the Nimble SRT template:

  • SRT Receiver/Sender Window Flow
  • SRT Receiver/Sender Window Flight
  • SRT Receiver/Sender Window Congestion
  • SRT Receiver/Sender Total Packets Received 
  • SRT Receiver/Sender Total Packets Lost
  • SRT Receiver/Sender Total Packets Dropped 
  • SRT Receiver/Sender Total Bytes Received
  • SRT Receiver/Sender Status 
  • SRT Receiver/Sender Session Time
  • SRT Receiver/Sender RTT
  • SRT Receiver/Sender Retry Count
  • SRT Receiver/Sender Rate
  • SRT Receiver/Sender Packets Belated
  • SRT Receiver/Sender NAKs Sent 
  • SRT Receiver/Sender Estimated mbpsMaxBandwidth
  • SRT Receiver/Sender Estimated mbpsBandwidth
  • SRT Receiver/Sender bytesLost
  • SRT Receiver/Sender bytesDropped 

At the moment we don't have any SRT-specific Graphs or Triggers or Screens with the data we gather using these templates, but we'll probably add some improvements in future versions. We also have some plans on extending Nimble API capabilities to show more metrics and protocols, let us know if you're interested.

1.3 NVidia GPU monitoring

If you have NVidia GPU you can gather its metrics in Zabbix via Nimble’s Native API /manage/server_status method. We provide a Zabbix NVidia template and related config that relies on it to gather statistics. For temperature monitoring, the nvidia-smi utility is used, so make sure you can run it successfully from the console. Nimble Server NVidia template is actually the same, but with the addition of NVidia GPU discovery rules. To install it, follow the same steps and prerequisites as for Nimble Server Template.

Here are examples of stats.

1.4 Pre-requisites

The templates that we provide are made using Zabbix version 5.2.6, but the latest version of Zabbix should work fine too.

Notice that we used Ubuntu Linux 20.04 for Nimble Streamer server instance and setup details are provided for that OS. There should not be any issues with any Linux distro if you change package manager commands and repo names.

We didn’t check the provided templates with Nimble Streamer and Zabbix Agent running on Windows but it should also work as soon as you're able to install and run some releavant version of jq and cURL on it. Contact us if you succeed using this monitoring method for Windows version of Nimble.

We also assume that you already have the Zabbix server installed. If not, please find setup details on Zabbix's comprehensive documentation web pages. Zabbix provides many installation choices. The virtual appliance works best for us but you may choose the one that best suits your environment. If you have specific issues with it, ask Zabbix support or the Zabbix community forum.

2. Link Templates and Gather Data

Here are the steps you need to complete in order to add Nimble-specific metrics to your Zabbix server:

  1. Enable Nimble Streamer HTTP API for the server instance which you want to monitor
  2. Install cURL if it is not yet installed
  3. Import provided Templates to your Zabbix Server
  4. Install Zabbix Agent to your Nimble server
  5. Update Zabbix Agent configs to make templates work
  6. Add Nimble Streamer host to Zabbix server
  7. Apply Nimble Streamer Templates to a specific host

Here are the details of each step.

2.1 Enable Nimble Streamer API

To enable Nimble native API, add ‘management_listen_interfaces = *’ to /etc/nimble/nimble.conf file. We have used the default port 8082 to make Zabbix Agent receive metrics from Nimble. Please follow this documentation page. to find out more about enabling Nimble API.

2.2. Install cURL

Make sure that cURL is installed on Nimble server. It can be used to make sure API is set up fine and it will be used further.

2.3 Import templates

Next, import Nimble Templates into Zabbix.

Download template files from respective GitHub repo to some location. From the Zabbix’s pop-up menu, go to Configuration -> Templates and click the Import button at the right top of the Templates page.

At the Import page, make sure that the checkboxes look like on the following screenshot and choose the template file to import.

Complete importing process by clicking the Import button. "Imported successfully" message should appear at the top of the page.

Navigate to the Templates page again, type "Nimble" at Name field and click Apply to set filter for Nimble templates only. You will notice two Nimble templates available.

2.4 Install Zabbix agent

You need to install Zabbix Agent on your Nimble Streamer server to send your server’s metrics to Zabbix Server. The easiest method is to install the agent using official Zabbix repositories by executing the following commands:


sudo dpkg -i zabbix-release_5.2-1+ubuntu20.04_all.deb

sudo apt update 

sudo apt install zabbix-agent jq

sudo systemctl enable zabbix-agent

The "jq" JSON parser is needed to process data from Nimble API responses.

2.5 Update Zabbix agent configs

Now complete the setup of Zabbix Agent by editing the /etc/zabbix/zabbix.conf file with your favorite editor to specify a Zabbix Server IP or Domain name via"Server=" option.

Please also add hostname of the server at "Hostname=" option and use the same name as Host name field when adding a host to Zabbix.

Download Zabbix Agent configs for Nimble from GitHub repo and copy them to /etc/zabbix/zabbix_agentd.d/.

wget zbx_nimble.conf

wget -O zbx_nimble_srt.conf 

sudo cp *.conf /etc/zabbix/zabbix_agentd.d/

Check if your firewall allows incoming connection to port 10050 and start Zabbix Agent:

sudo systemctl start zabbix-agent

2.6 Add Nimble Streamer host to Zabbix

Switch to Zabbix web interface and add your Nimble Streamer server by clicking Create Host at Configuration -> Hosts page as usual. 

Select Interface type as Agent, and specify your Nimble server’s IP or domain name to connect to. Use Nimble group name and the same Host name as you defined in zabbix.conf file.

2.7 Apply Nimble Streamer Templates to a host

At the Templates tab select Host group Nimble and select Templates.

Click Add button after selecting Templates to add host to Zabbix. The added host will appear at the top of the page.

If you did everything correctly, you will notice availability status (ZBX) will become green after a few moments:

You may get the following error if the hostname in zabbix_agent.conf file is not matching the hostname you’ve entered when adding Hosts:

The setup is finished. Check if the metrics are being received by Zabbix at Monitoring -> Latest data menu. 

Now you can use this data to compare with data received by other templates or methods, create unique Graphs to add to the Dashboard or custom Screens, and add some Triggers to track if your server’s health goes down.

That's it. We'll continue improving our Zabbix monitoring templates and configs, stay tuned for updates and contact us if you have any questions or suggestions.

Follow us in social media to get updates about our new features and products: YouTubeTwitterFacebookLinkedInRedditTelegram

Related documentation

Nimble Streamer native API, Nimble Streamer configuration methods, Softvelum github