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
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
Application | RAM (MB) | CPU (%) |
---|---|---|
OBS | 541 | 13.3 |
NDI Streamer | 30 | 13.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!