VL.IO.NDI

,

@motzi did you open the VAudio template for vl yet? there are many comments inside…

bigup @motzi !!
Really great news on the way!!!

1 Like

i also just found this on github:

2 Likes

here we go:

  • updated to the new NDI SDK 3.7
  • some internal refactoring
  • still no audio (i’ve got no time at hand atm)

feedback welcome!
VL.NDI_181018.7z (1.3 MB)

3 Likes

Amazing work!
Its working exelent here, I need to test it on a second machine with 3 monitors ( 1 4k ) to compare a few things
But for the moment, using the old screenshot node on fullhd was way to slow, now im using NDI ScanConverter and your receiver node and its way better. Amazing work @motzi

this is vvvv plugin version build with vvvv plugininterface. few years ago i tried this approach and recently updated. it not support audio but sending dx11 texture through network works well.

i think motzi’s VL.NDI should be official plugin for vvvv/VL in the future, but you can try both now;)

VVVV.NDI Oct.21.zip (1.9 MB)

6 Likes

I just tested your plugini Mino, its works great here!

1 Like

here is one more little update. i changed the Guid of the dotnet NDI assembly so VVVV does not get confused any more when you wanted to test mino’s VVVV.NDI and VL.NDI side by side without restarting VVVV (we both based our work on the same dlls but they differ now internally).

also i fixed a minor thing when creating frames to send.

VL.NDI_181026.7z (1.3 MB)

1 Like

@motzi Big Thanks~~~~ but how to install this & which V4 version ??

@jzzxh: use vvvv b38.1 or later.

just download the vl.ndi zip from above and open vvvv/girlpower/NDI Overview.v4p (no install necessary).
then just open the helppatch from the receiver. for receiving something you need a NDI source on the network or on your PC. i’d recommend to download the NDITools by newtek. they include e.g. a program called scan converter, that does a screencapture of your PC and announces it as an NDI stream on your network (link to the NDITools is in the helppatch).

1 Like

Hi @motzi, this is great stuff, thanks for the hard work!

I am trying to use Vl.ndi to send an R16 or R32 float texture across instances of vvvv. The problem I face is that when I use the Receiver node combined with UploadImage the resulting texture has a B8G8R8_UNorm format and my data is corrupted.

So I guess I have two questions:

  1. Does Vl.ndi apply any sort of compression or conversion to the texture?
  2. Is Vl.ndi suited to send data textures across multiple instances of vvvv? (Say 1 channel, 16 bit 1920x1080 float texture @30FPS)

I know it could also be the UploadImage node choosing an incorrect format but I wanted to run it by you first.

Thanks for any light you can shed on this.

aye randall!

i fear NDI is not your weapon of choice for these kind things.
as you already assumed, NDI is applying some agressive, proprietary compression on the image to achieve a low bandwith (i.e. several fullHD streams over gigabit ethernet are possible). it is highly optimized for the CPUs vector extensions (SSE etc.) to for low latency video streaming. i’m not sure if you have a lot of choice regarding the transmitted video formats but i’m pretty sure it preferres “visual quality” over “technical correctness” and assumes plain broadcast video images…

anyways, i would have to look into this deeper to be sure (an update to NDI 3.8 is nescessary anyways - when there is time for that i will have a look).

if you want to share on the same machine, shared GPU textures are the way to go. they have no delay, no copy and no compression. or do you need CPU pixel data?

I think he be needin to share data between multiple gpus ;)

I’ve used Spout to do this, PNG compression, encoding the 16bits of 1 channel into 2 8bit channels in a shader and sending that via spout, all the other formats are too lossy to work, not sure if it would cope with HD or not, mine were depth textures from a kinect. ( @ravazquez )

@ravazquez
The ndi thread gets a bit derailed but couldn’t you do something like PixelData (DX11.Texture 2d) → Writer (Raw SharedMemory) → Reader (Raw SharedMemory) → AsTexture (DX11.Texture 2d Raw).

It works in principle (see patch) but the combination PixelData / AsTexture is borked, something wrong with calculation of the stride it seems.

SharedMemTex.v4p (19.1 KB)

@catweasel - that wont work between gpus though right?

@bjoern - that’s mega heavy - coming back to the cpu

@mrboni
Well I know. But it’s the same for NDI, isn’t it?

@mrboni you can run spout locally, so yes, but I guess you can’t share texture between them, never tried tbh. I’d guess that if NDI needs a texture through VL via CPU, using spout would be less taxing, as it gets the shared texture in another thread, and then shares that via shared memory on the receiver. But tbh you’d have to test it, to be sure, and let us now ;)

Anyone got this running with a recent gamma?