NDI Streamer

Posted

Quick Links


NewTek’s free set of applications for their NDI protocol has an awesome application called Scan Converter, which allows you to output your computer display over an NDI stream! There exists a version for Windows, and a version of Mac - however there did not seem to exist a version for Linux.

A partner company called Sienna recently announced a beta version of their own Scan Converter for Linux, however at a cost. A reseller quoted me AU$1369.50 (~US$900). Wow! I’m sure that the software is excellent, as Sienna is very reputable for their services with large companies including Apple Inc, Sony, Dolby and NBC - but considering there is a free version for Windows and Mac, I’ll pass.

The NDI SDK for Linux is free to obtain, and someone had made a plugin for OBS which was able to broadcast NDI sources. Whack that NDI plugin onto a display capture source, and voila we have a ghetto NDI Scan Converter setup! That plugin is great and I would highly recommend it; however this workflow had a high resource overhead from OBS - even if I wasn’t using any of its other features.

NDI Streamer

 GitHub: featherbear/ndi-streamer

I ended up diving into the SDK and whacked together some screen capture code with the SDK, birthing NDI Streamer. It has been a while since I made a project with C++, and it took quite some time to get the build toolchain right; but it compiles and runs!

It uses a screen capture library called screen_capture_lite, that pipes screen data into several NDI sources - one source for each display.
It’s also (somewhat) optimised to only broadcast the NDI stream if there is a client connected - as not to waste CPU activity.

Performance

ApplicationRAM (MB)CPU (%)
OBS54113.3
NDI Streamer3013.4

Given its sole purpose, NDI Streamer consumes much less memory than OBS - using only a twentieth of the memory that OBS requires!
CPU activity to comparable, with NDI Streamer actually performing way worse than OBS (considering that OBS has a ton of over things happening too).

Maybe in the future I’ll find a better screen capture library, and also update my NDI send logic - but nevertheless, making NDI Streamer was fun; and it’s nice to see how easy it is to integrate an application with the NDI protocol!

More posts

COVID-19 Weddings

Love during a pandemic

Posted

Computer Science Interview Proficiency

Things that I've asked as an interviewer

Posted