September 15, 2020

Building Quick Sync-only pipeline with Nimble Transcoder

Live Transcoder for Nimble Streamer provides many features for transforming live content using both software libraries and hardware acceleration.

Intel® Quick Sync is fully supported in Live Transcoder for decoding and encoding but all filtering operations were performed using CPU. That caused extra resources usage to transfer processed frames among CPU, GPU and RAM.

Nimble Live Transcoder now allows building transcoding pipelines which are performed completely with Quick Sync hardware acceleration. This is done using specific FFmpeg libraries which we use in addition to our own code.

This article shows how to set up this Quick Sync-powered processing chain.

1. Installation and initial setup


We assume you've already set up Nimble Streamer, it's been set up to get an incoming live stream and you've tested basic streaming. In our example we'll use a stream whose application name is "input" and stream name is "source".

If you're not familiar with Live Transcoder, take a look at Transcoder documentation reference.

Notice that the described functionality is available on Ubuntu 20.04 only. We'll support other upcoming LTS Ubuntu releases as well.

The basic steps to make Quick Sync working are as follows:
  1. Create a transcoder license and subscribe for it.
  2. Install Live Transcoder add-on.
  3. Create some simple scenario with CPU transcoding (e.g. downscale your stream to 240p). This way you'll make sure the transcoder was set up properly.
Now create a new scenario to start a new pipeline setup.

2. Decoder setup


Once you create a new scenario, drag and drop a blue decoder element onto the dashboard. There you need to specify "quicksync-ffmpeg" in Decoder field.


That's it. Now let's set up filtering.

3. Using filters


Once the frame is decoded you can process it via a set of ffmpeg filters which will work via Quick Sync. Nimble Transcoder supports a number of those, here are the most frequently used. Notice that you can refer to FFmpeg source code for more details about custom filters. As of September 2020, Nimble Transcoder uses FFmpeg 4.3.1 for some of its operations, including Quick Sync filters.

"Split" - allows creating several identical outputs from input video. It's available as a filter element in a tool box of Transcoder UI.

"Picture" - another filter available via UI element. Its setup for Quick Sync will look like this:



"fps" filter sets the frames per second rate and is defined via a custom filter. Its name is "fps" and the value is "fps=<number>", like "fps=30".

"scale_qsv" filter allows resizing the image. Add a custom filter into your scenario, set name to "scale_qsv" and then use filter parameters of your choice separated by comma. Common parameters are "w" (width) and "h" (height).


Other options include "format", "mode", "low_power", "hq". Please refer to FFmpeg sources file vf_scale_qsv.c for more details.

"vpp_qsv" filter allows transforming the content in a lot of ways, some of its parameters include "deinterlace", "denoise", "framerate" as well as flipping, scaling and a lot more. Please refer to FFmpeg source file vf_vpp_qsv.c for a full list of options.

4. Encoder setup


In order to encode video using Quick Sync within the hardware pipeline, you need to define Encoder as "FFmpeg" and set Codec to "h264_qsv" for H.264/AVC codec.


You can then define its custom parameters like "profile" for encoding profile , "b" for bitrate and many others which you can find in FFmpeg source file qsvenc_h264.c.

If you need to encode to H.265/HEVC, your Codec field must be set to "hevc_qsv".


It also supports a number of parameters like "b" for bitrate and you can find a full list in qsvenc_hevc.c from FFmpeg sources.

Once you finish your scenario and save it, you'll be able to transform your incoming video stream using only Quick Sync hardware acceleration.

When you have a video pipeline set up, you need to define the audio part. If you don't need any sound transformation, you can add a passthrough for it just like it's described in other setup examples.




If you have any questions, issues or questions, please feel free to contact us.

Related documentation


Live Transcoder for Nimble StreamerTranscoder documentation reference,

September 10, 2020

Make thumbnails for live streams

Nimble Streamer now allows generating thumbnails on-the-fly for any outgoing stream. At the moment it's a single-frame MP4 file which can be embedded into any web page via <video> tag.

In order to start generating those thumbnail, you need to enable Generate MP4 thumbnails parameter for either Global setting of the server or for specific applications' settings as shown below.

Once the parameter is enabled, you can access the generated thumbnail via this kind of URL:

http://server_URL:8081/live/stream/thumbnail.mp4


Here are the examples of global and per-application "Generate MP4 thumbnails" setting enabled.  The thumbnails are re-newed within a Interval period which you set up after checking the checkbox, by default it's 6 seconds.


Here's application setting:



Related documentations

Live streaming in Nimble Streamer

August 25, 2020

Install Nimble Streamer with SRT on MacOS using Docker

Nimble Streamer has full support of SRT protocol for the majority of platforms such as Linux and Windows. The MacOS support is missing due to a number of technical reasons. However our customers have been asking us about such capability.

With Docker, you can now bring SRT support in Nimble Streamer on macOS. Nimble will start and work properly on you Mac.

This article assumes you are familiar with macOS Terminal and you have an understanding of networking technologies. It's not a detailed description of Docker technology but rather a how-to describing our specific use case.

Here's a video that follows this article to demonstrate all steps. Read also read the text below to get more details on every step.




Now let's follow the steps below.

1. Install Docker for MacOS


Download Docker from its official website and follow installation instructions for MacOS. Those are very easy steps so we won't describe them in details.

2. Get Dockerfile from our GitHub


Create a new directory on your disk and download Dockerfile from our GitHub.

Change WMSPANEL_ACCOUNT and WMSPANEL_PASS parameters to your login and password in WMSPanel. Use WMSPANEL_SERVER_NAME parameter to set server name, it will be used in WMSPanel at the moment of container compilation and your server will be registered under that name.

3. Build image


Open the Terminal and go to the directory you've created earlier.

Run this command to create an image with the latest version of Nimble Streamer and SRT package:
docker build --no-cache -t nimble-srt:latest .
Now wait for a completion. If the operation was successful, you'll get "Successfully tagged nimble-srt:latest" message and your server will appear in WMSPanel marked as grey.

If anything goes wrong please contact our helpdesk with full log of your operations.

4. Run and Stop container


Now run your newly created container using this command:
docker run -d --rm -p 8081:8081 -p 1935:1935 -p 4444:4444/udp nimble-srt
After that you'll see your server in panel changing its color to green and status to "Running".

Once the container is launched you can connect to it using IP address of your Mac using mapped ports.

This new container is running in closed network of your docker so if you'd like to play streams produced by Nimble Streamer in that container, you need to specify proper IP in server settings at WMSPanel. Go to Servers top menu, then open server info page and click on Manage custom IP/Ports to add the IP of your Mac. After that you'll be able to perform the playback

To stop container, you need to get its ID using "docker ps" command and then stop using "docker stop CONTAINER_ID" command:

osa-vm-macos:nimble_img osa$ docker ps -q
53778662dec3
osa-vm-macos:nimble_img osa$ docker stop 53778662dec3
53778662dec3


5. Port mappings


In previous section we used TCP ports 8081 (for HLS and other HTTP-based protocols), 1935 (for RTMP) and UDP 4444 (for SRT). You may want to user other ports instead or add more ports. Please make sure these ports are not used by macOS.

To add another UDP port for container mapping just add "-p" parameter specifying required port, e.g. "-p 5555:5555/udp". Full command will look like this one:
docker run -d --rm -p 8081:8081 -p 1935:1935 -p 4444:4444/udp -p 5555:5555/udp nimble-srt
If you need TCP port then just remove "/udp".

6. Set up SRT in WMSPanel


Now you can set up SRT streaming using WMSPanel to control your Nimble instance in container with the previously mapped ports. We used port 4444 in our example so the SRT listener setup in "MPEGTS In" tab will look like this:


You can refer to SRT setup article to lean more about SRT setup process in Nimble Streamer.

Once you complete that you can start streaming SRT via IP and port specified above, using any SRT tool of your choice, like ffmpeg + srt-live-transmit, vMix. OBS or Larix Broadcaster.

7. Connect to the console of your container


If you need to log into the console of your container, get container ID first using this command
docker ps -q
Then use the result value in this command:
docker exec -it CONTAINER_ID /bin/bash

Once you get access, you can work with Nimble Streamer logs to track problems or update server parameters via nimble.conf file.

More on virtualization

The Dockerfile which we use in this article can be used for creating containers at other OSes.

Docker for macOS is basically using a small virtual Linux machine to work so you can also use other virtualization methods of running Nimble Streamer with SRT under Mac, like Virtual Box or VMware Workstation. Let us know if you need some special virtual machine to work with hypervisors.

Feel free to tell us about your experience of using Docker with Nimble Streamer.

August 18, 2020

Live Transcoder upgrade

Nimble Streamer Live Transcoder is widely used among Softvelum customers. 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. One of those elements is FFmpeg which is used for filtering and some decoding operations. We periodically upgrade our code base to work with one of the latest stable releases as it has a number of important fixes and improvements. So in order to keep pace with FFmpeg, our team had to make adjustments and use FFmpeg version 4.2.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 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.

We'll be releasing new packages for all platforms during next few days.
If you plan upgrading Nimble Streamer to 3.7.0-1 please also upgrade Transcoder package.

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

For Ubuntu and 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 installation 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.7.0-1 and Live Transcoder package version will be 1.1.3-1.


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

August 12, 2020

Larix Player on Apple TV

Softvelum team introduces Apple TV support for Larix Player.

You can now play SRT, SLDP, Icecast, RTMP and HLS live streams on tvOS devices.



If you'd like to create your custom Apple TV application you can subscribe for our Larix Player mobile SDK.

August 11, 2020

SRT playback protection and stats

Nimble Streamer has had SRT support since the protocol's inception and our team keeps adding new SRT features into our products.

We see a growing demand for SRT playback using various solutions including Softvelum Larix Player for Android, Android TV, iOS and tvOS. So our customers want to see two major features which they already have for other playback protocols.

Those familiar features are:

So our team followed the feedback and made support for these features.

We've made those features available via Addenda so you'll need to subscribe for this premium package for as long as you need them. Notice that Addenda also covers SRT Publisher Assistance Security Set which allow controlling the publication process via SRT.

Please make sure you subscribe and register an Addenda license on your Nimble server before moving forward.


SRT listener settings


To make reporting and paywall features work, you need to set up SRT listener properly. We assume you are already familiar with SRT setup in Nimble so we'll show just specific settings.

Go to your SRT output settings at Live streams settings menu UDP streaming tab and either create a new stream or edit an existing one.


Listen is currently the only supported mode for this feature set so you need to select it in Mode drop-down.

All other fields' values are defined just like you would do for regular playback. The Local IP and Local port for connections, Source application name and Source stream name for defining the source as well as latency and maxbw parameters for proper error recovery.

nimble-srt-report-stream-name is the new parameter which you need to set up to make this feature work. This parameter's value defines what will be the name of that stream: all playback sessions will be reported under that name and your paywall settings will also use it.

It's set as <app name>/<stream name>. In our example it's live/srtstream.


Viewing statistics in WMSPanel


When your viewer connects to a previously configured SRT listener, one connection will be reported into your stats. If you have several ports opened for different listeners with this feature enabled then you'll see several simultaneous connections.

You'll have these connections counted in all other reports of WMSPanel, such as daily stats, geo-location, streams stats, in-depth streams reports, unique visitors and others.

If you create separate listeners on separate ports but use the same nimble-srt-report-stream-name then both connections will be registered (counted) under that same stream name. This way you can combine data for a single content publisher.

If you have a stream with the same name available via different protocol, then their stats will be combined too. They'll also be show under different columns in daily stats, like you see on a screenshot above.

Multipoint listeners

Nimble streamer supports multipoint listeners option which means that more than one viewers can connect to the same port, and in case of this feature - to the same stream. If you'd like to enable multipoint, read "One-to-many multipoint listener" section in this article.

From statistics perspective, if you create a multipoint listener and 2 viewers connect there then 2 connections will be registered in our reporting.


Paywall support for SRT playback


With nimble-srt-report-stream-name set, a number of features from Softvelum paywall become available for that specific listener:

They are set up the same way as you do for other protocols, follow links above to see detailed instructions. The specific thing for SRT is that you need to specify app name and stream name according to nimble-srt-report-stream-name value. That is <app name>/<stream name> so you put app name into Application field and stream name into Stream field as shown below.

One limitation for paywall is that user agent and referrer restrictions do not apply to SRT.

All other features and approaches described on respective pages and in our paywall FAQ fully apply to SRT. For example, as described in Q6 you can allow stream for just one country and forbid for all others by defining the country in allow list and setting any non-empty password, with SRT checkbox enabled:



If you try playing this SRT stream, you won't be able to do it and you'll see "failed to accept srt socket" error in Nimble log.

That's just one example, visit Paywall page for more information.

Hotlink protection and PPV

This feature is set up the same way as you would do it for HLS or other protocols. You'll need to set up WMSAuth rule with password, then provide your viewers with a URL to your stream with a signature which is based on password and other parameters. Read this page to get all details and to get code examples.

Once you get a signature you will need to add it into your stream URL at streamid parameter this way:

srt://<ip>:<port>/?streamid=wmsAuthSign=<signature> 

Here's an example of running srt-live-transmit this way:

./srt-live-transmit srt://127.0.0.1:2020/?streamid=wmsAuthSign=c2VydmVyX3RpbWU9MDgvMTEvMjAyMCAwMzoxNzowMSBBTSZoYXNoX3ZhbHVlPVZvak5wT3RvSDJWaHJ1UW1UNUdDaHc9PSZ2YWxpZG1pbnV0ZXM9MTA= file://con > /dev/null

You may generate that signature on your website where people open your link with our Larix Player for Android and iOS which handles srt:// deep links\ to open them for playback. Or you can use your own method of delivery to give this link to your viwewers.

Pay-per-view framework is also set up the same way as for other protocols, with the signature placed into the URL at streamid as shown above.


That's it. Please subscribed for Addenda license to use this feature and if you have any questions pelase contact our helpdesk.


Related documentation


July 30, 2020

Streaming SRT via OBS Studio with Nimble Streamer and Larix Broadcaster

OBS Studio team added support for SRT in their software recently. That is a great improvement and we highly recommend using that protocol for your delivery to and from OBS.

In this article we're going to show how you can use OBS with two products of our team. Here are the scenarios we'll cover:
  • Set up OBS Studio to receive SRT.
  • Set up Larix Broadcaster to send SRT to OBS Studio.
  • Set up OBS Studio to send out SRT stream.
  • Set up Nimble Streamer to receive streams from OBS Studio.
This will make a complete pipe from your mobile device through OBS to a software media server located wherever you need it.

We assume you already installed all three products: the latest version (25.0.8+) of OBS on your local computer, Larix Broadcaster on your mobile and Nimble Streamer on one of your servers.


Set up Larix Broadcaster


Open Larix Broadcaster, click on gear icon to enter Settings menu. Tap on Connections.



In our example we already have some connections so let's add a new one by tapping on New connection.



Name field can be defined to distinct a new connection from existing ones.
URL field has to be similar to "srt://192.168.0.106:10000" - that is your computer IP and the port which you defined on previous step.

Save setting to see it in the list, then tap on its check box. This will enable this connection for streaming.



Now you can get back to video preview and tap on big red Recording button to start streaming to OBS.

Please refer to Larix documentation reference page for other articles and videos of Larix setup and usage.

Set OBS for SRT input from Larix Broadcaster


Open OBS and check Sources area.


Add new or change existing Media Source.




Enter a URL like this into Input field.
srt://192.168.0.114:10000?mode=listener
In our case 192.168.0.114 is the IP of your computer. You need to change IP address to the IP of your own computer. If you'd like to use some other port, you need to change it as well.

Don't forget to allow incoming UDP traffic in the firewall settings for the specified port.

That's it, click on OK to save the media source. If you have Larix Broadcaster streaming, you'll see the picture.

Set OBS for SRT output to Nimble Streamer


Once you have some stream in your OBS, you can publish it to Nimble Streamer. Here's what you need to do for that.
Here are the steps to follow:
  1. Go to File -> Settings menu.
  2. Open Output tab.
  3. In Output mode field choose Advanced.
  4. Choose Recording tab.
  5. Select Type as Custom Output.
  6. In FFMpeg Output Type select Output to URL.
  7. In output URL enter "srt://192.168.0.106:2020" or IP/port which you're going to use with Nimble Streamer - we'll define that in the next section. In this example 192.168.0.106 is the IP address of your Nimble Streamer instance.
  8. Set Container format to "mpegts".
  9. You can use default encoders and decoders, or select the one you want to use, such as libx264.
Here are the settings we have as we complete them:



That's it. Now let's set up Nimble.

Set Nimble Streamer


Nimble Streamer has full support for SRT. This article describes full SRT setup in Nimble Streamer and you should refer to it for all details.

Now open Nimble Streamer -> Live streams setting menu, choose MPEGTS In tab and click on Add SRT stream button.

You see this dialog:


Here's what we do in our case:
  1. Set Receiver mode to Listen.
  2. Local IP can be set to "0.0.0.0" to process streams from all interfaces.
  3. Local port should be whatever you can use on your server. In our case it's "2020".
  4. Alias can be set to something you will see for this stream identification going forward in setup.
  5. If you click on Add outgoing stream and enter app and stream name, WMSPanel will create the outgoing stream automatically using the names which you provided.
Once you save, you'll have it all set.

To start streaming from OBS, pressing Start Recording button.

Once you do that, Nimble will provide the outgoing stream.

E.g. if HLS is enabled for this server instance, your HLS stream URL would be http://192.168.0.106:8080/obs/stream/playlist.m3u8

If you need to make further streaming via RTMP, check RMTP digest page and related articles there like RTMP republishing setup.

Please refer to full SRT setup instruction to see what else you can do with SRT setup or further re-streaming. Also, check Glass-to-glass delivery setup to see another example of SRT usage with our products.

Related documentation



July 29, 2020

Slice-wide permissions in WMSPanel

WMSPanel cloud service provides full set of capabilities for controlling Nimble Streamer behavior as well as reporting its stats. The main instrument to split stats is a data slice which allows defining servers and respective applications or streams to get stats from.

The hierarchy of users in WMSPanel account is simple - admin users ("admins") can do anything, non-admin users (or "users") are allowed to see the stats in the data slices where they are assigned. However if you need to give some non-admin a permission to do something with server setting, you can define individual permissions, it's described in this article.

There are cases when you need to define some set of permissions to an entire set of non-admin users.

Now WMSPanel provides this option using data slices. The main idea is as follows:
  • Create a slice.
  • Assign a set of servers which you want to give control to.
  • Assign non-admin users which you want to give permissions to.
  • Define permissions.
Those permissions will be applied to all users and they will be allowed to make specific set of operations over the servers assigned to this particular slice.

When a non-admin user switches to particular slices, he or she gets access to servers and as allowed by slice' permissions list.

Data slice permissions and per-user permissions (defined as described here) are combined together in a white-list manner. So, if you set "Incoming streams" in per-user permissions list and "Outgoing streams" in a data slice permissions list, a given user will access incoming streams in any slice and outgoing streams in that particular slice only.

We strongly recommend to enable 2-factor authorization for all admin users and non-admins with special set of permissions to improve the level of your security.

Let's see how it's set up.

Go to slices management page by clicking on Manage link under the top menu. Create a new slice if you haven't created it yet.


For the designated slices, click on "gears" icon on the right from the slice details, it's there among other icons. You will see a dialog like this.


Once you click on "0 permissions" you'll see a list of permissions for a particular server. Just click on check boxes for required features.


You can do that for all servers from those assigned to the slice.
Clicking on a check box near server name checks all features.



That's it. Once you save settings, they will be applied to your slice and your users will be able to use selected features.

Related documentation


July 23, 2020

Vote! Streaming Media European Readers' Choice Awards 2020

Streaming Media European Readers' Choice Awards of 2020 is now opened for voting. Softvelum products are represented in 4 categories:
  • Analytics/Quality of Service Platform: Softvelum - Qosifire
  • Encoding/Transcoding Service: Softvelum - Nimble Live Transcoder
  • Hardware/Software Server: Softvelum - Nimble Streamer
  • Mobile Video App or Solution: Softvelum - Larix Broadcaster


Here's where you can find us:


Support our team by giving your vote for us!



July 16, 2020

NDI support in Nimble Streamer

NDI® is a free protocol for video delivery over IP. It's widely adopted by industry professionals in a variety of products used in live production.

NDI is a technology which was implemented with these ideas in mind:
  • Live video is produced and processed by professional production teams in local networks prior to outer-world delivery.
  • Various solutions from various vendors are fully interoperable using the same protocol.
  • Network topology doesn't matter, making it easy to find and capture video streams.
  • Video source is abstracted from video destinations, it just sends out the data into the network.
  • The video content is moderately compressed with 10x factor down to 100 MBps making it easy to deliver over local networks.
  • It's a replacement for SDI technology.

1. Nimble NDI features overview


Softvelum Nimble Streamer software media server is used by a lot of customers from live production industry for efficient delivery of live streams among production sites and from production to the viewers using all general-purpose protocols like SRT, RTMP, MPEG-TS and others.

Now NDI is available in Nimble Streamer to provide even more capabilities for live delivery.

Receive NDI signal as input. Nimble gets the stream and decodes it for further usage. You can do various further processing:
  • get NDI from local network;
  • transform with Live Transcoder: re-sizing, re-sampling etc
  • encode into H.264/AVC, H.265/HEVC, VP8, VP9 with supported encoder libraries;
  • re-package into other protocols for further delivery: SRT, HLS, MPEG-DASH, RTMP etc;
  • record and play with DVR;
  • handle heavy duty when serving streams to multiple viewers.
Send NDI signal as output. Nimble produces an NDI stream:
  • take any content input via supported protocols like SRT or RTMP;
  • transcode and send the content via NDI into local network.
So Nimble Streamer is not a production-level mixing and editing tool but rather is a "bridge" between live production environments and global networks.

NDI monitoring tool. Along with implementing NDI in Nimble Streamer, we've made a console tool for diagnosing NDI streams. This helped us test and debug our solution, so we are sure it also will help our customers debugging their setup of Nimble and NDI streams in general.

Now let's look at NDI setup and usage in our products.

2. Installation


Handling NDI requires Live Transcoder for Nimble Streamer because the streams must be either decoded from or encoded to NDI format.

So before moving forward, you need to install the following products of Softvelum and make subscription where it's required.
  1. Sign up for WMSPanel account.
  2. Install Nimble Streamer on a proper server and register it in WMSPanel. If you'd like to install SRT package, please also refer to proper instructions.
  3. Subscribe for WMSPanel account, the price starts from 30 USD per month.
  4. Create Live Transcoder license and subscribe. This short video shows the process. It costs 50 USD per month per server.
  5. Install Live Transcoder package and register the license on the server with Nimble Streamer instance.
Once you're finished, you will have a paid WMSPanel account, a running instance of Nimble Streamer with Live Transcoder package, ready to transcode streams. For more details about Live Transcoder usage please refer to documentation reference and our video tutorials.

3. Set up NDI input


To get the NDI stream in, you need to create a Transcoder scenario. In your WMSPanel account, click on Transcoders menu to open scenarios page, then click on Create new scenario button. You'll be redirected into an empty scenario.

Now drag a blue video source element, then select NDI option.


In NDI name field you need to enter your source NDI stream. It can have both host name and stream name, but you may use just stream name. In our example the NDI source is "SOURCE HOST (stream)" which means host ("SOURCE HOST") and stream name ("stream"). Please also check NDI tool described in section 5, its output provides NDI source names which you can use for your input.

Now you can create the video output element, just drag the green element and keep the output type as "Stream".


Application and stream name define the naming of your output stream for further reuse. You may leave other values by default if you find them appropriate or define other parameters and values, like different codec or encoder library. Once you save encoder settings, you need to link decoder and encoder elements, just drag an arrow from the decoder to the encoder.

You may also put any filters between decoder and encoder in case you need to additionally transform the content, like to split the stream and make various renditions.

Once you're done with video pipe, you need to do the same for audio part of your input content. Drag audio source and select NDI stream as input. You need to define the same input stream name as you did for video.


Now add audio encoder element.


Here you specify the same output app and stream name, then you may choose codec and encoder. Once you save settings. You need to connect decoder and encoder, unless you want to apply some filters like volume changer.


That's it. Now once you save scenario, it will sync up with Nimble Streamer within several seconds and your server instance will start receiving NDI stream to process it and generate the output stream.

You can now handle this stream according to your use case, like re-publish it via SRT or RTMP. The SRT publication setup is described in this article and RTMP re-publishing described here.
You can also try playback to make sure the stream is available. The example of HLS output stream URL will be http://yourhost/live/output/playlist.m3u8 for default settings.

In addition to the aforementioned "direct output" transcoding pipe, you can add more filters and generate multiple outputs. Check this scenario example.


It has video split filter after NDI decoder, then it makes direct output with original rendition, scales down to 480p and down to 240p, and encodes all 3 outputs. The decoded audio is also split into 3 output streams.
You can also check other examples of transcoder workflow in our YouTube playlist.

4. Set up NDI output


Setting NDI output is somewhat similar to input setup process.

First, make your live stream input available for further processing, read our documentation for details:
You can check other protocols and use cases on live streaming digest page.

Once you have your input stream ready and tested, you can proceed with NDI setup.

Go to your transcoder setup and create a new scenario.

Video input will have your processed incoming stream application and stream name. You may choose another decoder if you want as well.


Drag and drop encoder element and select NDI as output option.


Now specify output stream name, this is how it will be recognized by other NDI recipients in this network. You may also define this stream's key frame alignment.

Save this and connect video input and output. 


Now add audio input having the same stream app and stream name.


Then add encoder element with NDI selected in it.


The stream name needs to be the same as you specified in video output. When you save audio output, connect input and output.


When you save this scenario, it will be synced within several seconds.

Once the scenario settings are synced, your Nimble Streamer will start sending NDI output with the content defined by our scenario.

Just like you saw in section 3, you may create more complex scenarios.


In this example the audio in encoded without changes while the video is scaled down and then custom "fps" filter is applied to change the framerate.

5. NDI monitoring tool usage


In addition to implementing NDI in Nimble Streamer and Live Transcoder we've created a tool which helped us debugging NDI workflow. It's a command line utility called "nimble_ndi". It works if Nimble Streamer and Nimble Live Transcoder are installed with no need for registering Nimble instance or Transcoder license.

It provides two functions: getting the list of available streams and getting full details about a particular stream.

5.1 Get active NDI streams list

Log into the server where Nimble Streamer is installed and run this command:
nimble_ndi
It will show the list of streams as "host name (stream name)" with IP and port, e.g.

camera1 (stream)                  10.208.14.1:6961
camera2 (stream)                  10.208.14.2:6961
producer (main)                   10.208.15.1:6961
producer (secondary)              10.208.15.1:6962
OSA-VM-WIN10 (vMix - Output 1)    192.168.0.201:5961
OSA-VM-WIN10 (vMix - Output 2)    192.168.0.201:5962
That information can be used as a reference for NDI setup in previous sections. For example, having this output, you can sue host and stream ("OSA-VM-WIN10 (vMix - Output 1)") for your NDI input setting.

5.2 Get NDI stream details

If you want to have full info on the frames of specific stream, run this command:
nimble_ndi --show-frames="host (stream)"
E.g.
nimble_ndi --show-frames="camera1 (stream)"
It will produce the output like this:

video: timecode=107080000 timestamp=15943425579304024 av_sync_ms=0 fps=24/1
audio: timecode=107310000 timestamp=15943425579707145 av_sync_ms=40 no_samples=1024 sample_rate=48000
audio: timecode=107520000 timestamp=15943425579708666 av_sync_ms=40 no_samples=1024 sample_rate=48000
video: timecode=107500000 timestamp=15943425579712332 av_sync_ms=0 fps=24/1
audio: timecode=107730000 timestamp=15943425580115564 av_sync_ms=40 no_samples=1024 sample_rate=48000
audio: timecode=107950000 timestamp=15943425580117047 av_sync_ms=40 no_samples=1024 sample_rate=48000

Each line represents a frame of either video or audio with these parameters:
  • timecode: it's optional but Nimble generates it for he tools which need it;
  • timestamp: time which NDI library provides us with;
  • av_sync_ms: a delta from previous frame of either video or audio, in milliseconds;
  • no_samples: number of audio samples, it's for audio frames only;
  • sample_rate: it's audio frames only;
  • fps: for video frames only.
That allows easily tracking NDI streams in your network.

6. Using NDI Discovery Server


Nimble Streamer can work with NDI Discovery Server and if you want Nimble to work with it, you need to specify it in ndi-config.v1.json by its address.
You can find this file at these locations:
  • On Windows it's %PROGRAMDATA%\NewTek\NDI\ndi-config.v1.json
  • On Linux it's $HOME/.newtek/ndi-config.v1.json
In order to specify NDI Discovery Server, you need to open ndi-config.v1.json, find "networks" section and add "discovery": "discovery.server.I.P" parameter. Here, discovery.server.I.P is the address of a host where NDI Discovery Server is working. For example if you have it working on 192.168.0.253 then your config will have this section:
"networks": {
      "ips": "",
      "discovery": "192.168.0.253"
},

If you don't want to edit these files manually, use respective utils such as NDI Access Manager for Windows or Sienna Access Manager for Linux.

Notice that on Linux the NDI config files should be placed in the home directory of the user which Nimble is running as. For example, if Nimble is running as root, then the file must be located at /root/.newtek/ndi-config.v1.json

7. Video step-by-step tutorial


We've made a video showing the setup process, take a look at it.



8. Troubleshooting



Q: I setup NDI Discovery Server IP by the 3rd party software and nimble_ndi shows a list of NDI streams, but streams are not available for the Transcoder.

Make sure that the .newtek directory with the *.json config files is located at the home folder of a user which Nimble is running as.


Q: I'd like to have NDI|HX® support on Ubuntu.

If you'd like to have NDI|HX® support on Ubuntu, please do the following.
  1. Go to NewTek NDI|HX driver page and download the file into some temporary directory
  2. Run the downloaded file to obtain required files.
  3. Copy the extracted files into /usr/lib/x86_64-linux-gnu directory.
  4. Re-start Nimble Streamer.
The following filed will be copied:
libavcodec-ndi.so.58
libavdevice-ndi.so.58
libavfilter-ndi.so.7
libavformat-ndi.so.58
libavutil-ndi.so.56
libndihx.so
libswresample-ndi.so.3
libswscale-ndi.so.5
On Windows, no additional activities are needed.


If you have any problems with NDI, check that your host is configured to have respective ports opened. Here's an example of UFW rules for Ubuntu host with properly configures ports.

> sudo ufw status
Status: active
To                      Action  From
--                      ------  ----
6960                    ALLOW    192.168.0.0/24
6961                    ALLOW    192.168.0.0/24
6962                    ALLOW    192.168.0.0/24
6963                    ALLOW    192.168.0.0/24
6964                    ALLOW    192.168.0.0/24
6965                    ALLOW    192.168.0.0/24
6966                    ALLOW    192.168.0.0/24

If you have other issues with NDI configuration, please refer to General NDI Troubleshooting page from NewTek knowledge base.

Contact us if you have any questions regarding NDI support in Nimble Streamer.


NDI® is a registered trademark of NewTek, Inc.


Related documentation