June 7, 2016

Nimble Streamer Transcoder advantages over FFmpeg

Live Transcoder for Nimble Streamer is a highly efficient product which uses best available transcoding techniques combined with our own know-hows and researches. One of the components used in Transcoder is FFmpeg™ project. We use some of its libraries under LGPL, you can see details on our legal details page.

Many other projects use FFmpeg as a standalone turn-key solution being handled as an external tool. That brings a great result, however we decided to take its best parts and use it linked into our middleware. This brings some development efforts, however it gives us several unique benefits which make our Live Transcoder more efficient and robust than FFmpeg used as command line tool in some cases.

Let's see what makes Live Transcoder for Nimble Streamer differ from out-of-the-box FFmpeg and sometimes more efficient.

Key frame alignment

Key frame alignment is very important for creating ABR output streams as all streams need to be in sync to provide best viewing experience.

Live Transcoder gives 4 strategies for key frame alignment. They are described in this article but let's take a look at most interesting.

Keeping source key frame alignment is a required feature for creating ABR streams. The key will be aligned same way as they are aligned in source stream. So if you use it for ABR, you need to use it.
This feature is not available in FFmpeg when it's run as a command-line tool.

Setting key frame alignment

Interval value will insert key frame in the selected time point. It is measured in milliseconds. As example, if you have 0 frame at 5900, and 1 frame at 6100, and you set this value to 6000. In this case a new frame will be inserted at 6000, copied from nearest older frame which is 5900.
This feature is not available in FFmpeg when it's run as a command-line tool.

FPS-based strategy will insert the key frame according to FPS amount defined in the opened edit box.

This strategy is available in FFmpeg as well as the default one where the key frames are defined by the encoder and the value is determined based on preset and tune parameters.

Optionally skipping frames on high load

When the server throughput or source stream throughput does not allow publishing all frames, FFmpeg tries to obtain full set of frames which gives significant picture delay.

Nimble Streamer Transcoder allows skipping some of the frames to avoid any display delays. This means there will be minor glitches of the image but the timeline will remain the same so your viewers will keep tracking the event close to real-time.

Reduced decoding efforts

Video transformation requires image decoding before any activities. FFmpeg is usually launched as separate command line process instances each of which doesn't know anything about others. So making several output streams from a single input stream requires FFmpeg to decode the stream the same number of times as you need the output.

In Nimble Live Transcoder, the decoding is done just once for every incoming stream. Even if you have same stream processed in different scenarios, it will still be decoded just once per each media server instance.

Part of ABR scenario setup example


As continuation of previous use case, you may launch FFmpeg to produce several outputs in a single process and optimize the described behavior. But this one also has a significant point of failure. If you combine several streams in output chain within the same process, any of the failed streams will cause entire process to fail. As example, this happens when any of destination servers become unavailable or its throughput becomes a problem.

Nimble Streamer Transcoder has this handled properly - the transcoding is done separately from delivery and even if some destination is unavailable, it does not affect anything else.

No interruption after changes

Changing output stream parameters in running FFmpeg process means you need to re-start it sometimes along with the original stream, and it always affects the outgoing connections for end-users.

Live Transcoder allows updating scenarios on-the-fly with no need to re-start the incoming or outgoing streams. Adding new element in existing scenario or creating new scenario with existing streams does not affect end user experience. Nimble Streamer takes updates from WMSPanel and apply them immediately after they are saved in the web UI.

You may take a took at that in action at any of our Transcoder videos like this one:

Overall, we appreciate the capabilities and performance of FFmpeg, this is why we made it the basis of our solution. This is why we were able to create new architectural approach in our Transcoder that provides described advantages, giving both performance and user experience improvements.

Feel free to visit Live Transcoder webpage for more details and contact us if you have any question.

Related documentation


  1. Great post, the one downside to this is that I can use ffmpeg for free on any amount of machines, with nimble transcoder it is going to cost me 50$ for each server. Having 15 servers this is going to put most power users off. Another offputting aspect is that those transcoding machines are going to have to allow internet access to for your licencing procedure. Thoughts ?

    1. Thanks for the feedback.
      Regarding the price - we'll have volume discounts for customers who'd like to spread the Transcoder in their networks.
      As for Internet access - that's true as our target audience is a set of companies that perform Internet streaming, hence the Internet access is always there.

    2. licencing procedure is required aspect for any patented technologies.
      Let me give you a positive reason to use our transcoder - it's legal to work with it as we pay for patented technologies we use.