Efficient tools to build your streaming infrastructure


SDI output setup in Nimble Streamer

Nimble Streamer team recently introduced SDI input support. This allows producing any supported live protocols and codecs from your Blackmagic-compatible SDI sources.

And now, we complete the pipeline by adding SDI output support in Nimble Streamer for those Blackmagic-compatible devices. You can take any live source that is processed by Nimble Streamer and transfer content into your connected SDI devices.

Prerequisites

The SDI feature set requires the latest versions of Nimble Streamer and Live Transcoder packages. Currently SDI support is available on Ubuntu 22.04 and Ubuntu 24.04 only. Please refer to Nimble installation page and Transcoder installation page for upgrade details. Also, make sure you have Transcoder license activated on your Nimble instance in order to make Transcoder work there.

Get available SDI devices

Once the latest Transcoder package is installed, you need to launch nimble_sdi tool in order to get the list of SDI devices ready to get the content from Nimble:

/usr/bin/nimble_sdi

It will generate the list of all SDI devices, like this:

Found 4 SDI devices:
81:8c1580a0:00000000, DeckLink Duo (1)
81:8c1580a1:00000000, DeckLink Duo (2)
81:8c1580a2:00000000, DeckLink Duo (3)
81:8c1580a3:00000000, DeckLink Duo (4)

If this command fails, please install the latest drivers for your SDI device. That’s version 15.3 at the moment but you may use some more recent one when you read this.

Create Transcoder scenario with input

To create SDI in your streaming pipeline, you need to create a Live Transcoder scenario, add inputs via decoder elements, some optional processing filters and then create SDI encoding elements. That will generate live stream output into the designated SDI device. Here’s what you do to make that happen.

We made a sample scenario.

The blue input elements simply decode video and audio for further transformation. Here’s the video one:

You may use any decoder of choice. If you have GPU, you can use it too. Please refer to Transcoder docs reference for examples of that.

Audio decoder is simple, you can use default settings.

Prepare framerate and resolution

After decoding, you may add filters to transforms content as needed.

It’s important to keep the same frame rate and resolution as your SDI output requires. You need run ffmpeg with specific option to see full list of supported formats. In order to do that you need to build FFmpeg with DeckLink support on the same server where you installed Nimble Streamer.

Once you have your ffmpeg build ready, run it with list_formats option for your designated SDI output:

> ./ffmpeg -y -f decklink -list_formats 1 -i 'DeckLink Duo (4)'

Supported formats for 'DeckLink Duo (4)':
  format_code  description
  ntsc    720x486 at 30000/1001 fps (interlaced, lower field first)
  pal     720x576 at 25000/1000 fps (interlaced, upper field first)
  23ps    1920x1080 at 24000/1001 fps
  24ps    1920x1080 at 24000/1000 fps
  Hp25    1920x1080 at 25000/1000 fps
  Hp29    1920x1080 at 30000/1001 fps
  Hp30    1920x1080 at 30000/1000 fps
  Hp50    1920x1080 at 50000/1000 fps
  Hp59    1920x1080 at 60000/1001 fps
  Hp60    1920x1080 at 60000/1000 fps
  Hi50    1920x1080 at 25000/1000 fps (interlaced, upper field first)
  Hi59    1920x1080 at 30000/1001 fps (interlaced, upper field first)
  Hi60    1920x1080 at 30000/1000 fps (interlaced, upper field first)
  hp50    1280x720 at 50000/1000 fps
  hp59    1280x720 at 60000/1001 fps
  hp60    1280x720 at 60000/1000 fps

You can see the list of resolutions with respective frame rates that work the best for your particular hardware.

If the input resolution and framerate of your input stream don’t match the supported format of your SDI device, then you need to put proper filters to alter the content. E.g. for “Hp30” format we’ll have the following filters.

This one is for resolution:

And this one is for FPS, added as a Custom filter:

Now, let’s proceed with SDI encoding.

Encoding SDI for output

Use encoder element for video and choose SDI as its type. Then add the device name into SDI name field, as show in the “Get available SDI sources” section above:

Then add encoder for audio with SDI as a type and SDI name as your device’ name.

That’s it. Once you save the scenario, your SDI device will start getting content from your source.

Out team is working on improving SDI feature set. Stay tuned for our updates and if you have any questions, issues or suggestions, please contact our engineering team.