The NDI plugin offers a fairly easy way to send OBS video signal (presumably other applications can take advantage of this too) to another OBS instance on another machine. This can come in handy for numerous reasons such as splitting up workloads between machines by capturing output from one machine, such as gaming computer, to stream with a dedicated unit that interfaces with YouTube. This has advantages in that you can move the machine doing the heavy lifting into another room or across the room as to not hear the fans and so forth. In my case, my primary machine is getting long in the tooth. I prefer the setup I have as far as the screen layout and height of the computer as well as the location. I use my AMD Desktop / server / workstation machine to talk to YouTube or Twitch directly with that OBS instance and record locally in effect freeing up my laptop from quite a bit of the workload.
At the time of writing, there isn’t an RPM available and the instructions out there along with what to expect seems lacking at best, so, I thought I would take what I know and compile it into one easy, step-by-step guide here for openSUSE. Your mileage may vary depending on your distribution.
For starters, you need to get the software packages from GitHub.
Download the following:
This is a Debian package meant for Debian/Ubuntu so you may be thinking, “how am I supposed to use this?” …and that is a reasonable question. The solution is a tool that is not often talked about. It is also likely not recommended by most people but I am not most people. That tool is called “Alien“.
To install Alien, navigate here and just click on the appropriate experimental package for your version of openSUSE:
Alternatively, you can use the terminal method, which will very a bit between distributions
sudo zypper ar https://download.opensuse.org/repositories/utilities/openSUSE_Factory/ utilties
sudo zypper ref
sudo zypper install alien
sudo zypper ar https://download.opensuse.org/repositories/utilities/openSUSE_Leap_15.2/ utilties
sudo zypper ref
sudo zypper install alien
To explain each of the lines that I am expecting you to put in the terminal because you should NEVER just trust some random commands on the internet. First of all, I stand behind this as CubicleNate, and I do my best to not be wrong and I’d like to keep doing these things. You can also reacho ut to me directly using any of these methods.
Once the installation of Alien is complete. You will have to take the two deb packages previously downloaded and convert them.
Using a terminal, navigate to the location of the downloaded packages and run the following
sudo alien -r libndi*.deb
sudo alien -r obs-ndi*.deb
sudo zypper in ./libndi*.rpm obs-ndi*.rpm
Now your are ready to set up OBS!
Using this reference, I made the adjustments to my firewall but it didn’t work. Perhaps I am missing something and I would love to edit this article accordingly but opening up both tcp and udp ports 5960 through 5968 as well as having the mDNS port active did not allow me to utilize the NDI plugin with firewalld active. Either the documentation is out of date, in correct or there is a user error on my part and I couldn’t find the appropriate logs to tell me otherwise. Therefore, I just deactivated the firewall on both the source and destination machines.
sudo systemctl stop firewall
This is the point where you should be sorely disappointed with these instructions but again, I would like to improve this and will gladly listen to any input.
The next step is to open up OBS-Studio (v25 and latter is required) on both machines. On the source machine, go to Tools > NDI™ Output settings
Then set the output preferences. In my case, I had not interest in sending the “Preview Output” only the “Main Output” and label it with the hostname; just in case I might do this with another machine.
On the Destination OBS machine, you have to add the NDI Source. This is just one of the many options you have available as a source.
For the source name, select the drop-down and the appropriate available source. I didn’t mess with any of the other settings so your mileage may vary on this portion of the instructions as well.
And that is it. Your NDI Source is just another input like a webcam or video signal and you are off to the streaming or production races.
The whole firewall thing has me a bummed out a bit. I have wrestled around with it far too long but at least I know that lowering my “shields” will allow for transporters to work. Not ideal but I am within my firewalled off house, I just happen to like security in layers.
I want to note that the latency on this is VERY low. I mean incredibly low. I have tested this by playing a game on one machine and using the output on another machine with almost no latency perceived. It is quite the incredible technical miracle and I am quite grateful.
I also want to make the vintage computer tie-in. The NDI plugin is developed by Newtek, the makers of the Video Toaster that was very popular on the “big box” line of Amiga computers from the 1990s. So, in a way, I feel like I have a little bit of that incredible Video Toaster tech on my openSUSE machine.
OBS-NDI on GitHub
NDI Problem Solving PDF
12 thoughts on “OBS NDI™ Plugin on openSUSE”
I’ve installed as you instructed on Tumbleweed, yet my OBS installation isn’t finding the requisite NDI filter, output options, etc. Have you encountered this?
I have not encountered this issue. Are you able to perform the video sync over the network?
I will have to go through this again on a fresh system to see if I run into issue.
I had the same issue as Jon. What I did and worked was to “Symlink /usr/lib/obs-plugins/ to /usr/lib64/obs-plugins/ ”
After that NDI working
Hope this helps others
I just followed your guide to install ndi on Tumblweed and Leap 15.2. I tried to build from source for OpenSUSE but it did not work for me. This guide did! To address your issue with the firewall, you need to put the sending PC’s IP in the trusted zone in your firewall and reload. The command is sudo firewall-cmd –zone=trusted –add-source –permanent. Then you want to reload your firewall. The trusted zone is set to allow for all traffic so when you add your sending(Gaming) pc’s IP as a source, firewalld will allow all traffic from that IP. I hope this helps your as much as your guide helped me.
I am glad my guide for the OBS NDI plugin worked for you. I am concerned because I am not sure how long Alien will continue to work for this. I will test out the firewall modification and so I don’t have to just shut the thing down. Thank you very much for your feedback!
I’m not on OpenSUSE. But I had to add both machines to each others trusted zone.
Looks like it’s using some random ports above 5960 on both machines. Haven’t seen it go above 8000. So you could probably open tcp 5960-8000 if you don’t want to do the trusted zone thing for some reason.
Thank you for that information. How were you able to determine that?
Hola CubicleNate, me sale el siguiente error: “Package build failed. Here’s the log of the command (cd libndi4-4.5.1; rpmbuild –buildroot=’/home/eric/Descargas/libndi4-4.5.1′ -bb –target x86_64 ‘libndi4-4.5.1-2.spec’):
sh: rpmbuild: no se encontró la orden”
in opensuse 15.3 just:
sudo cp -v /usr/lib/obs-plugins/* /usr/lib64/obs-plugins/
Many thanks for this – I would have been lost without it.
I solved the firewall problem by allocating the Mevo Start cameras fixed IP addresses and then opening those IP addresses in the firewall. I used Wireshark to determine which ports were used and opened ports 5960-5969 and 7960-7969. I also had to set the default action for the zone to ACCEPT.
I am running on openSUSE 15.2 using the firewall-config program. It seems that each camera may use up to 4 ports so the second range may need to be extended if you use more than two cameras.