Ultragrid via NDI6

So wirh NDI 6 we can now get proper 10 bit out from flame 2025 via NDI !

with ultragrid this just works out of the box it really has come a long way, I think many people here would benefit from getting this running. So let me just write down some basic stuff to get this going for anyone I am sure people can/will share more advanced things like srt encapsulation (thx alan) and such. maybe in this thread?

Who is this for?

Anyone that works ona flame remotely, mac or linux and wants a big fat broadcast signal with audio to a broadcast monitor.

What is NDI?

NDI is like a virtual SDI cable inside your computer or rather LAN, you can use ndi as a broadcast out in flame. It is however BAD at going via the internet

What is Ultragrid?
Ultragrid fixes ndis shortcomming by taking a video and audio signal source (in our example NDI from flame) and pushes it out to a target like a railgun using UDP.
Its sort of a bit like OBS but its made for point2point extreme performance and extreme low latency video.

It has about the same latency as teradici/hpzrb/parsec etc but its extremely high quality

oh and its free as in opensource.

Ok cool, what do I need

  1. Networking

You need to have some kind of connection between your host and client, this could be a VPN or you need to port forward(better) , zerotier, tailscale, wireguard, whatever you got, just be aware that its UDP so depending on what von you use.

How I do it:

I use port forwarding as I have a fixed ipv4 on both sides - on my client firewall/router I just forward ports 5004-5006 to my pc for added security I set it up to only forward packages from my known host IP - you can also use dyndns if you dont have fixed ips, this differs from router to router on how to set it up.

  1. Video Playback

Ultragrid does support blackmagic output so on your client - if it has a blackmagic card you can send thebincomming video straight out via sdi to your broadcast monitor at home.

You can also use a software viewer to just play the stream back its included in ultragrid.

Audio also works.

  1. software

You just download ultragrid on both machines. as well as the NDI6 runtime on the host.

I had to use the x64 version as the arm version wouldnt launch in ventura on my mac studio.

  1. Flame

Pick NDI out in the setup.app and enable it in flame just like any other broadcast monitor.

  1. Settings

First start Flame
On the Host:

Video source: pick your flames name

Audio source : I had to pick AES/EBU audio here for some reason but then it worked, stuff might be mislabled on my mac for whatever reason. 2 channels of audio is what I use

Video Compression:

You can mess with this depending on your network performance, i use Prores , i think its just 422 prores by default , on HD 25 fps it eats up around 100Mbit/s without FEC

Audio Compression:
PCM seems to be less buggy, so i just use that

Destination:

Your clients IP adress or hostname
Port: 5004

FEC is forward error correction, as its UDP the sender doesnt know how many packages make it to the target- FEC is bascially just sending redundant packages to the client to make sure the signal stays intact - i dont need it for my network but you might benefit from it , i uses more bandwith .

then press start

On the Client:

Video Display: Decklink MiniMonitor or whatever you want, there are many sofrware viewers like the vulkan one or openGL to try.

Audio Device: also Decklink

Thats it, very basic, there are a bunch if advanced tuning methods here as well to get it to work eveb better but it works like this just fine.

@ALan has been using it for years
@cnoellert has also played with it a bit as I can see from related posts.

Lets use this to let everyone join into the ultragrid fun.

10 Likes

There are a number of Californian firms that are using this at scale.
Very customizable, pretty resilient.

It is the basis for SohoNet ClearView 4k, which they charge thousands for a month.

1 Like

I have not tried NDI in years as I gave up on that after ADSK insisted that it was properly doing 10bit output. It wasn’t, I showed them scope data several times, they denied, I moved on. I built a studio architecture around SDI.

Now that they have finally acknowledged and supposedly fix the 10bit issue it does open up some unique workflows. Although I haven’t found an NDI->HDMI converter that does 4K 10/12bit Full Range 4:4:4 with 8channel audio, which I need to feed our projector. Also I would need to get NDI out of Resolve, not sure a clean way to do that, or an SDI->NDI converter that meets the same requirements as above.

MJPEG is 8bit, and likely 4:2:0, so this is no good. If you insist on non-temporal codec, I would do CineForm or ProRes. They support high color fidelity, but if you are OK with MJPEG, you would be a lot better with h264 which can do 10bit YUV 444, or 8bit RGB 444, and probably 1/10 the data rate.

OPUS is kind of the recommended official audio codec.

Audio Compression:
PCM seems to be less buggy, so i just use that

FEC in UG does work properly with high bitrate codecs, but not low bitrate codecs like h265, and to a lesser degree h264.

FEC is forward error correction, as its UDP the sender doesnt know how many packages make it to the target- FEC is bascially just sending redundant packages to the client to make sure the signal stays intact - i dont need it for my network but you might benefit from it , i uses more bandwith .

Vulkan will likely outperform OGL, and Vulkan also supports 10bit display

Video Display: Decklink MiniMonitor or whatever you want, there are many sofrware viewers like the vulkan one or openGL to try.

About 4 years, since I gave up on Streambox as a bunch of jokers. UG in combination with SRT is more reliable and performant than the 3 years we worked with Streambox.

@ALan has been using it for years

I’d be interested to see some latency demos from your setup.

Our configuration is not as low latency as what @cnoellert demonstrated, but we are working at a higher resolution and color space (2K DCI 12bit RGB 4:4:4@24fps) with x265. Around town we can get 12-14 frames latency which is inclusive of SRT latency and bouncing to our cloud reflector and out to endpoints. UHD 12bit RGB 4:4:4 is about 4 more frames latent. We stay away from NVenc since it encodes in YUV space, which would incur a double color conversion (SDI IN) RGB → YUV (encode) → RGB (SDI Out).

1 Like

see this is perfect.

Any specific dope ultragrid argument lines to make h264 work like a boss for something solid-enough like 4:2:2 ?

For me h264 never was really that awesome without going the full beans SRT route (i had this working before a long time ago)

and yes you are of course completely right how bad jpeg2000 is! changed my first post to prores as that does work great for me.

also, if anyone gets software /vulkan HDR to work in windows on the client , would be great

A lot of that would rely on the client OS too. For instance, not sure HDR is really supported on Linux at the OS level.

UG is pretty good about having decent zero config defaults. Just give it a try. Only time I really need to have custom encoder parameters is to eeek out 4K from software x265.

Any specific dope ultragrid argument lines to make h264 work like a boss for something solid-enough like 4:2:2 ?

Give FEC another try here for h264. There is something about the x264 packet structure that is more resilient than x265.

For me h264 never was really that awesome without going the full beans SRT route (i had this working before a long time ago)

also, in regards to connectivity.

There is a built in NAT traversal feature, I don’t remember what it is called, and I’ve never explored it because we have a different solution, but in theory, it should be able to “find each other” and not need Port Forwarding.

Otherwise, I recommend having a modern VPN layer, such as Tailscale, Wiregaurd, ZeroTier, and pushing signal thru that. Then you don’t need to deal with any of the other connectivity nonsense, and there is almost no latency or throughput penalty.

So using Ultragrid, how do you give a client a link to watch?

UG is for high quality streaming appliances, not web based viewing.
But you could do that with Nimble Streamer and clever configuration.

@finnjaeger has shared that a few time here. He made his own security front end, but you can do it also with clever uses of .htaccess on the web server side.

1 Like

you dont :slight_smile: different solution, your client doesnt have business fibre hardwired to a box with a decklink card do they?

if your clients are like alans, they might, mine struggle getting a 5mbit h264 stream with 1s of buffer…

using h264, or even more so h265, for an HD signal you can probably get down to 10-15mbits even.

Since we are sending signal to a theater at a major studio where it is projected onto a 45 foot screen we up the bitrate to around 20-25 mbits. That same signal gets sent to a producers home in the mountains, and our colorists place in here in LA. Residential internet (at least here in the US) can handle that easily.

It is baffling to me, that a place like Germany which the outside perception is of technical prowess, has such a pathetic residential internet infrastructure. Can you get Starlink there? Seems like even that would be better than the available hardline.

also, with the little NUC appliance boxes we send out, we have a configuration which uses the built in HDMI and Vulkan as the display, so no need to Decklink. We call this the Lite configuration. It is quite color accurate, but when we need perfect color via HDMI or any SDI out, then we send out Pro boxes that do have a Decklink.

All appliances are ZeroConfig for the client. Just plug in power and network and display, and it works.

1 Like

you can get around 100Mbit/ pretty easily , many just have 50Mbit DSL.

You can also get 1Gbit docsis but its heavily oversubscribed , i can only get 100+ Mbit/s at night , constantly breaks.

The problemis more the connection from router to client, having a 5 year old wifi router combo thing 2 rooms down in a multi-tenant building(hint : 50+ APs in one building) is no good for streaming.

“but netflix works fine” …

but yea, its bad :slight_smile:

Your clients are professionals

mine are agencidiots with a macbook air.

If I send them a zero client they would not even know how to connect it to power unless it has magsafe.

at one point I did embed a disassembled UltraStudio Monitor 3G into an expanded lid on a half height NUC (the one below is full height). It worked fine, but our users actually like to the ability to see the preview on the UltraStudio Mini screen, kind of as a validation.

gen8singleHDMILid-front-angle

1 Like

Yes, our one caveat is hardwired ethernet only. No accommodation for wifi.

-N on the receiver side enables NAT traversal–basically firewall hole-punching. Once you start receiving on the client-end with -N enabled you’ll see and entry like this in the logs or stdin:

Flow signaling succeeded.
PCP Server IP        Prot Int. IP               port   Dst. IP               port   Ext. IP               port Res State Ends
::ffff:192.XXX.XX.X  UDP  ::ffff:192.XXX.XX.X  5006   ::                       0   ::ffff:47.XXX.XXX.XX  5006   0  succ Tue May 21 18:00:14 2024

The external IP, in my case 47.XXX.XXX.XX, is what you would enter as the destination IP on the sender. The two handshake at the firewall, the signal is passed to the client and no ports need to be opened on the firewall. Multiple external clients and multiple internal destinations? Change the ports on each sender/reciever pair, like by 10 for example:

S/R pair1:5006
S/R pair2:5016
S/R pair3:5026

Makes things easy. Otherwise like @ALan said, Tailscale/Wiregaurd are good p2p solutions operating at near wire speed and perfect for these deployments because of the built-in dns.

2 Likes

reminds me of SRT rendevouz mode

thats cool.

how do I get h264 @ 422 10bit to work?

Post the log output of UG

make sure you are giving appropriate signal wether SDI or NDI. But this may be the start of why NDI is kinda bullshit.