August 29, 2019

NVidia drivers upgrade issues

Recently some of our Live Transcoder NVENC users have faced specific problems with NVidia usage so we'd like to draw your attention to this cases.

NVENC is a technology which combines capabilities of powerful hardware and sophisticated software drivers which allow using that power for customers' applications. There are cases when software update may change the behavior of hardware and affect your transcoding experience, causing errors and all kinds of related troubles. This month NVidia has released new version of their drivers and that update caused transcoding issues across users. Some of them were users of Nimble Transcoder so our team made proper research to eliminate that problem. Those customers had to roll back to previous drivers version to wait for updates from NVidia.

So here are our recommendations to those customers who use NVidia hardware for their transcoding process.

1. Once you've set up NVENC and Live Transcoder and make it work properly, record NVidia drivers version.

2. Make backups of all NVidia drivers which you use over time. You may also find them on this page.

3. If you'd like to make upgrade to some those components, please make one upgrade at a time. So if you decide to upgrade NVENC and Nimble Streamer, make sure you first upgrade Nimble, then let it work for a few days, and then upgrade NVENC. So going step-by-step must be your key strategy.

4. Whatever component you upgrade, please make regression testing of your existing streams. E.g. you upgrade Nimble and your tests show that your streams are fine, after that you upgrade NVENC and your tests fail (streams are not encoded properly) so in that case you know that driver change has introduced the issue.

5. If some of your components failed after upgrade, make sure you roll back to previous version of that component. Once you do the rollback, don't forget to run your regression testing again.

If you use NVENC in your streaming scenarios, we strongly recommend you to use shared contexts to improve performance. In order to do that, you need to add the following parameters into your Nimble config file:
nvenc_context_share_enable = true
nvenc_context_share_lock_enable = true
Please read NVENC shared context usage article for all related details.

We also recommend to check NVidia developers' forums like this one to keep in touch with changes related to NVENC.

If you have any issues or questions regarding NVENC usage in Live Transcoder, pelase feel free to contact us any time.

August 23, 2019

Streaming Media Readers' Choice Awards 2019

Streaming Media magazine has started a vote for Readers' Choice Awards 2019.

Softvelum products have been nominated in 6 categories:

  • Analytics/Quality of Service Platform - Softvelum Qosifire
  • Encoding Software - Softvelum Nimble Live Transcoder 
  • Media Server - Softvelum Nimble Streamer
  • Quality Control/Monitoring Platform - Softvelum Qosifire
  • Server-Side Ad Insertion Solution - Softvelum Nimble Advertizer
  • Video Player Solution/SDK - Softvelum SLDP Player

Open the voting page and select our products to vote as shown on a screenshot below. Voting closes on 1st of October. At that point, all voters will receive an email asking them to to confirm their votes and only the confirmed votes will be counted.

Your support is very important for our team, so have a minute to cast your vote for us!

Here's how you can find us in a huge list of nominations and nominees:

Feel free to support our team, every vote matters!

August 21, 2019

Live Transcoder upgrade

Nimble Streamer Live Transcoder was released in early 2016 and since then it has got many useful features which our customers use widely. The core technology of the Transcoder combines both Softvelum team's own know-how and third-parties' work. Those third parties are listed on a corresponding page.

As we add new functionality, some core third-party technologies also advance forward. For instance, FFmpeg which is used for filtering and some decoding operations, has moved from version 3 to version 4, getting some important fixes and improvements. So in order to keep pace with FFmpeg, our team had to make adjustments and use latest version 4.

New FFmpeg version requires changes in both Nimble Streamer and Live Transcoder. So if you decide to make upgrade of Nimble Streamer then, in order to make smooth transition among versions, Nimble and Transcoder packages will have to be upgraded simultaneously. If one of the packages is upgraded without its counterpart, then live transcoding will stop working.

So here is what you need to do in order to complete this upgrade the correct way.

For Ubuntu, run this command
sudo apt-get update
sudo apt-get install nimble nimble-transcoder

For Debian, run this command
apt-get update
apt-get install nimble nimble-transcoder

For CentOS, run this command
sudo yum makecache
sudo yum install nimble nimble-transcoder

You may also run procedures from Live Transcoder upgrade page first and then Nimble Streamer upgrade page one after another do get the same result. If you have Windows, you also need to follow this path.

So we recommend you to perform this simultaneous upgrade when you have time and resource for that.

After the upgrade is complete, your Nimble Streamer package version will be 3.6.0-1 and Live Transcoder package version will be 1.1.0-1.

If you have any questions or face any issues during the upgrade, please contact us using our helpdesk.

August 20, 2019

Trigger SCTE-35 marker insertion by Nimble API

Nimble Advertizer has wide variety of options to insert ads, including inserting ads per SCTE-35 markers. So if your original stream has those markers and your Advertizer is set up to trigger ads for it, your output will have proper ads.

In addition to reacting to available SCTE-35 markers, Nimble Advertizer is able to insert new markers right at the moment you need them using Nimble API. This will trigger almost immediate ads insertion so it's a good way to implement your own "big red button" for per-request ads insertion. Here's how you can do it.

Enable SCTE-35 processing

To enable SCTE-35 markers insertion, 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.

Set up Advertizer

SCTE-35 insertion feature set is part of Nimble Advertizer. So first you need to create and subscribe for Addenda license.

Then you need to set up Advertizer according to Advertizer tech spec. This includes preparation of ads files and setup configuration. As part the setup, you'll define what streams will be reacting to markers. You can read article explaining SCTE-35 markers handling mechanics, including example of handler response.

Set up Nimble API

Markers insertion is performed via Nimble native API.

  1. Use this API page to enable API first
  2. Use "Insert SCTE-35 Out marker" call (see description) to perform insertion for Out marker in order to go on commercial.
  3. Use "Insert SCTE-35 In marker" call (see description) to perform insertion for In marker in order to return from commercial if you don't want to rely on Out marker.

Try to call that method on some test streams to see how it triggers the insertion of ads.

Use markers insertion

Once you have your Advertizer ready for markers handling and know how to use proper API call, you may develop further setup for triggering ads via API call in your production environment.

Besides immediate insertion via Advertizer, you may pass through the inserted SCTE-35 markers for further processing. Read this article for details of this functionality.

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

Related documentation

Nimble AdvertizerSCTE-35 markers forwarding and passthroughInserting ads by Nimble Advertizer using SCTE-35 markersSCTE-35 markers support in Nimble Streamer Playout

August 15, 2019

ABR in SLDP real-time streaming

Streaming media industry currently moves away from RTMP protocol to other real-time streaming technologies due to its future decline. The next generation of technologies tries not just to replace the protocol but also add new features like ABR or new codecs support.

Our team introduced SLDP - Softvelum Low Delay Protocol - as our vision of how real-time streaming should be implemented. Of course, we added capabilities that were missing in RTMP.

ABR capabilities

Adaptive bitrate (ABR) is one of the key features available as part of SLDP. It's supported on both sides of transmission:
  • Nimble Streamer server allows switching per player command among available bitrates which are set up as part of ABR stream
  • Larix Player provides controls for switching between bitrates if a stream has information about available sub-streams.
Switching of channels may be performed nearly instantly. A player sends command to a server to send media from another bitrate and once the data is received, it takes just a time equal to GOP duration to start displaying a new sub-stream.
Every sub-stream in ABR may have its own codec. With this feature you can combine high resolution sub-stream with H.265/HEVC and other sub-streams having H.264/AVC or use other codecs like VP8/VP9 or AV1.

SLDP and ABR setup

General process of SLDP playback setup in Nimble Streamer doesn't differ from RTMP playback setup. This article shows step-by-step procedure which is very simple with WMSPanel control panel web UI.

ABR setup in Nimble Streamer is described at this article and it's also straight-forward. It includes input streams processing and output setup. Notice the graceful adaptive bitrate stream approach used in Nimble.

If you don't have various renditions from and need to create them from your original stream, you may use our Live Transcoder, and try wildcard setup in particular to simplify this process. Also check this Transcoder video showing the setup process.

If you use Transcoder, you should also perform key frame alignment for all single-bitrate streams. Sometimes when you switch between different stream's renditions you can see a some short glitch. This happens because a player need a new GOP to start the playback. Different streams may have their key frames aligned differently, so each new GOP will start from different point. To avoid that, you need to perform key frame alignment. Use this article to set key frame alignment in your transcoding scenarios.

Larix Player usage

Having SLDP stream, you can now use our players to provide the playback to your users.

You may use 3 options:

All players are free of charge. They also have respective SDKs so you could customize them for your user experience.

SLDP HTML5 player setup also may optional parameters to tune the ABR playback.

If you'd like to set initial resolution which you want your uses to see by default when the player is loaded, use this setting:
initial_resolution = <width>x<height>
If you use key frame alignment as described above, you should use this parameter to obtain smooth rendition switching:
key_frame_alignment = true
You may also use latency_tolerance parameter to tune the streaming latency as described in this article.

That's it. With steps described above you will have full-featured SLDP ABR playback on any platform you need.

Please also take a look at the SLDP frequent questions to improve your SLDP usage. And read Reliable Low Latency Delivery with SRT+SLDP post in Haivision blog describing a combination of both protocols for building reliable delivery networks.

Also notice that HLS DVR streams can be added to SLDP HTML5 Player for rewinding low latency streams. Read this article for details.

Visit SLDP website and contact us in case of any questions regarding SLDP technology usage.

August 7, 2019

Using Certbot with Nimble Streamer

Certbot is a popular tool for working with Let's Encrypt certificates. Nimble Streamer has full support for SSL-protected streaming so let's see how you can use Certbot with Nimble Streamer for your convenience.

1. Set up Certbot

First go to Certbot website and scroll down to "My HTTP website is running" line. Choose "Other" option in Software field and then your OS in "System" field.

You'll be redirected to this Certbot page with necessary instructions.

Follow steps 1 through 3 to install and setup Certbot.

On step 7, choose "Yes, my web server is not currently running on this machine" option.

If you have Nimble Streamer working on port 80, this will not work because Certbot will try to bring up its own web server. In this case, choose "No, I need to keep my web server running" and read this article for additional setup and then continue with steps below.

2. Set up certificate

On step 8 - "Install your certificate" - you need to use your new certificate in Nimble Streamer configuration.

Add these lines to your /etc/nimble/nimble.conf file:
ssl_port = 443
ssl_certificate = /etc/letsencrypt/live/
ssl_certificate_key = /etc/letsencrypt/live/
and then re-start Nimble Streamer with this command:
sudo service nimble restart
You can find more info about nimble.conf on this page.

If you need more complex setup scenario like multiple domains or encryption methods, you can follow this article to set up SSL certificate properly.

By this step, you'll have Nimble Streamer instance running with valid SSL certificate.

3. Set up certificate renewal

The last step will be to set up the automatic renewal of certificate. Certbot does this perfectly, however we'll need to make it call Nimble Streamer for reload the certificate. This can be done via Nimble Streamer native API.

First, set up management API as described on this page under "Starting point: enable API access" point.
Here's an example you can use:
management_listen_interfaces =
management_port = 8083
Then re-start Nimble Streamer instance:
sudo service nimble restart

Second step will be to run the renew command as described in "Test automatic renewal" Certbot page section, with additional post-hook parameter like this:
sudo certbot renew --post-hook 'curl -X POST'
You can use the above command (which makes proper API call) to manually renew SSL certificates without Nimble Streamer restart.

To test automatic certificate renewal, run the following command:
sudo certbot renew --dry-run --post-hook 'curl -X POST'

The latest version of Certbot provides pre-configured automated renewal for Ubuntu via systemd timers.
To make sure that Certbot’s systemd timer is installed, use the following command:
systemctl list-timers
Its output should contain certbot.timer at UNIT column.

To make Nimble Streamer apply new certificate settings without restart, please use following commands to create post-hook timer:
sudo echo -e '#!/bin/sh\ncurl -s -X POST' > /etc/letsencrypt/renewal-hooks/post/ 
sudo chmod 750 /etc/letsencrypt/renewal-hooks/post/
Now you certificates will be renewed automatically.


If Nimble doesn't start after the above steps, and its logs contain the following error
[20ХХ-01-01 00:00:00 P????-T????] [nimble] E: failed to load SSL certificate(s)
please check that user nimble can read folder /etc/letsencrypt, then you need to execute the following commands to grant required permissions:
sudo chgrp -R nimble /etc/letsencrypt/
sudo chmod -R g+rx /etc/letsencrypt/

That's it. If you have any questions or issues, feel free to contact us via helpdesk.

Related documentation

SSL setup for Nimble Streamer, Paywall feature set