December 28, 2016

December news

The year of 2016 is almost over so prior to posting a year summary we'd like to highlight some significant updates from December.

Live Transcoder

Live Transcoder decoding and encoding capabilities were improved:

We've also added an article about setting constant bitrate for transcoding with x264.

This all improves efficiency and overall user experience of our Live Transcoder.

Nimble Streamer

Nimble has interesting update for ABR. You can now add multiple language streams into ABR stream. So you can combine N video and M audio streams for further usage in any player.


Icecast live metadata can now be added to any outgoing Icecast stream using WMSPanel UI. Read this article for details. This is a good addition to existing Icecast metadata pass-through.

Read about more audio streaming scenarios supported by Nimble Streamer.

Larix mobile SDK

Larix mobile SDK has been updated.

Android SDK has several new features:

  • Set custom white balance, exposure value and anti-flicker;
  • Long press preview to focus lens to infinity, double tap to continuous auto focus.
  • Use volume keys to start broadcasting;
  • Use a selfie stick  to start broadcasting;

iOS SDK has minor fixes and improvements for streaming.

Use this page to proceed with SDK license subscription.

In a few days we'll also release a yearly summary of our company. 

Follow us at FacebookTwitter or Google+ to get latest news and updates of our products and services.

The State of Streaming Protocols - 2016 summary

Softvelum team which operates WMSPanel reporting service continues analyzing the state of streaming protocols.

As the year of 2016 is over, it's time to make some summary of what we can see from looking back through this past period. The media servers connected to WMSPanel processed more than 34 billion connections from 3200+ media servers (operated by Nimble Streamer and Wowza). As you can tell we have some decent data to analyse.

First, let's take a look at the chart and numbers:
The State of Streaming Protocols - 2016
You can compare that to the picture of 2015 protocols landscape:

December 27, 2016

Adding multiple audio tracks for ABR HLS live streams

Live streaming scenarios of Nimble Streamer include ABR (adaptive bitrate), it can be accomplished via HLS and MPEG-DASH.

Previously we introduced ability to use multiple separate video and audio tracks in same VOD stream. 

Now we've added multiple audio tracks support for live ABR streams. This allows assigning audio streams from any incoming source to ABR streams and define corresponding properties to each of them. Once such stream is defined, a player may provide the audio track selection in order to get proper audio stream.

Let's see how it's set up.

December 26, 2016

Setting constant bitrate for x264 encoder

Live Transcoder for Nimble Streamer has wide range of transcoding capabilities which include H.264 encoding with x264 library licensed for commercial usage by our company so any customer with our Transcoder may use x264 parameters to set up outgoing stream.

This article answers a popular question of our customers - "How can I set up constant bitrate for my streams?" - using x264 encoder settings. This encoder is also known as libx264.

Let us give a couple of short answers and then a full description.

How to set up CRF (Constant Rate Factor) with maximum bitrate

As you may have seen from our screencasts - such as UI sneak preview for ABR scenario setup - you can use web UI to set up transcoding scenario with source streams, transformation blocks and encoder. You can see blue block being sources of streams, green blocks for filters to transform the content and orange blocks as outgoing streams encoders. If you point your mouse to any block, you'll see setup icon - you can click on it to see details dialog.

Click on the orange block (that is the encoder settings box) and set the following custom fields:
  • crf to 20
  • vbv-maxrate to 400
  • vbv-bufsize to 1835
This will set maximum bit rate to 400Kbps with CRF of 20.

This is an equivalent of the following FFmpeg parameters:
-crf 20 -maxrate 400k -bufsize 1835k

How to set up CBR (Constant Bit Rate)

The constant bitrate can be set up almost the same way, in the orange encoder block. If you need bitrate 4Mbps, set the values as follows:

  • bitrate to 4000
  • vbv-maxrate to 4000
  • vbv-bufsize to 4000

This is an equivalent of the following FFmpeg parameters:
-b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 4000k

See the following sections to explanations.

Some internals

Nimble Streamer Live Transcoder uses libx264 which has some flexibility to control the bitrate. As described in FFmpeg docs which uses libx264 as well, the CBR is not supported directly due to very complex codec logic but we can emulate and set maximum bitrate.

If you set vbv-maxrate and vbv-bufsize to something basic like the H.264 High Profile @ Level 4.1 limitations, the encoder will still operate in ABR mode, but will constrain itself to not go outside these specifications.

If you set vbv-maxrate to the same value as bitrate, then the encoder will operate in CBR mode. Notice that it's not a strict CBR where every picture has the same size. vbv-bufsize controls the size of the buffer which allows for bitrate variance while still staying inside the CBR limitations.

If you set only "bitrate" parameter then encoder will work in unconstrained VBR mode, having the parameter value as a target but not as fixed value.

Minimum bitrate (minrate)

As for lower bitrate threshold, the library will need to increase quality if average quality cannot reach min-rate, but in case if max possible quality still cannot fill bandwidth gap you will have bitrate lower than you set. Hence "-minrate 4000k" parameter in the example above will just not work - it's not used for libx264 and was added to FFmpeg guide accidentally. We've checked ffmpeg code - it's just a bug in the docs.

Some cases of FPS affecting bitrate

Please also check Handling fuzzy FPS to get proper bitrate output article which covers cases when frame rate may affect output bitrate.

To get some more details please read this FFmpeg docs page and also this forum thread.

Feel free to visit Live Transcoder webpage for other transcoding features description and contact us if you have any question.

Related documentation

December 19, 2016

Append metadata to Icecast streams

Nimble Streamer has an extended audio streaming feature set for both live and VOD. Live audio streaming covers both transmuxing and transcoding of Icecast pulled and published streams.

In addition to just transmuxing and transcoding audio, Nimble now allows adding any metadata to any outgoing Icecast stream. So any player capable of Icecast playback and metadata processing will show respective info during the playback.

If you need to just pass through the metadata, you can use this instruction to Icecast re-streaming and this instruction for passing the metadata through Live Transcoder.

Let's see how you can do that.

December 13, 2016

NVENC context cache for Live Transcoder

Nimble Streamer Live Transcoder has full support for NVidia video transcoding hardware acceleration.

Some complex transcoding scenarios may result excessive load on the hardware which may affect the performance and result errors. So you may find the following lines in Nimble Streamer logs: "Failed to encode on appropriate rate" or "Failed to decode on appropriate rate". This is a known issue for NVENC.

There are two approaches to solving this problem.

December 12, 2016

Specifying decoder threads in Live Transcoder

Nimble Streamer Live Transcoder allows performing various transformations over incoming video and audio streams.

Any incoming stream needs to be decoded before any further transformation unless you use a pass-through mode. The decoding may be either hardware-based (such as NVidia GPU decoding supported by Live Transcoder or Intel QuickSync) or software-based.

Software decoding may be optimized in order to use processor resources optimally. This is why the Transcoder allows using multiple threads for video decoding.

By default the decoding is performed using one thread for one stream on one CPU core. If the decoding doesn't consume entire core, more threads are added into that core.

However, in some cases one core in not enough to decode one stream. If you look at Nimble logs you will see messages like
Failed to decode video in appropriate rate
This means you need to run one decoding thread on several cores - this is where multiple threads are used.

Notice that before adding new threads, make sure your CPU is not 100% loaded before adjusting threads number.

December 8, 2016

NVENC decoder in Nimble Live Transcoder

Nimble Streamer Live Transcoder has full support for NVidia video transcoding hardware acceleration. Having the hardware capable of the processing and drivers properly installed, our customer can choose NVENC to handle processing.

NVidia® Products with the Kepler, Maxwell and Pascal generation GPUs contain a dedicated accelerator for video decoding and encoding, called NVENC, on the GPU die. You can take a look at the list of NVidia GPUs capable of that.

We've previously described the NVidia encoding setup. Now lets see how hardware-based decoding can be used.

In the transcoding scenario you need to point to video decoder blue rectangle (with a film on it) and then click on appeared gear button.

You'll see decoder settings dialog. In the Decoder drop-down list it will show "Default" option. This is a software decoder used by Nimble Transcoder by default.

To use GPU decoder, choose NVENC from from list. This will pick up NVidia GPU to take action.

The GPU field is a number which allows specifying the sequential number of physical GPU to process the decoding. So if you want to specify exact GPU to decode specific stream, you need to type the number, e.g. 0, 1 etc. for as many GPUs as you have. If you set it to "auto" then Nimble Transcoder will choose the least busy GPU.

Many Nvidia GPU cards have encoding sessions count restricted to 2 active sessions, the decoding sessions are not limited. So you can use even GTX card to help the transcoder to decode with no limitation.

Deinterlacing mode has the following values:

  • weave will weave both fields (no deinterlacing)
  • bob will drop one field
  • adaptive will enable adaptive deinterlacing

Please refer to NVidia documentation for more details on each mode.

If you'd like to use software decoder though - please check this article.

To improve your NVENC transcoding experience, please also take a look at Transcoder troubleshooting covering most frequent questions.

Zabbix monitoring of Nimble Streamer allows tracking server status, SRT streams and NVidia GPU status.

We keep improving our transcoder feature set, contact us for any questions.

Related documentation

NVIDIA, the NVIDIA logo and CUDA are trademarks and/or registered trademarks of NVIDIA Corporation in the U.S. and/or other countries.