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
.
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
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 is very important for creating ABR output streams as all streams need to be in sync to provide best viewing experience.
. They are described
but let's take a look at most interesting.
. 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 |
Redundancy
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.
Related documentation