Syphon vs NDI® vs Window / Screen grabbing – when to use?

This was a recent question that I thought was worth posting as its own thread here.

While NDI® is great for sending video streams between software / hardware over a network, when sending video between software on the same Mac, it is best to use Syphon whenever possible.

  • Syphon works by passing video textures directly between applications in video memory.
  • To the best of my knowledge, when using NDI with VDMX (and other similar GPU based software), images need to be read back from the GPU into CPU memory and then sent between the applications. Likewise on the receiving end the images need to be decoded and re-uploaded to the GPU. This is a bunch of extra work.
  • Additionally, passing Syphon textures is lossless and you get alpha channels by default; with NDI there the quality is quite good, especially when using the RGB mode

How does window / screen grabbing compare?

  • Syphon will give the best performance.
  • Like Syphon, window / screen grabbing does not lose quality.

But you can as a challenge – test this all for yourself!

  1. Try using both Syphon and NDI to send outputs from VDMX to the basic test apps. Use “Activity Monitor” to see which has lower CPU usage.
  2. You can test the quality reduction by sending a video stream over NDI / Syphon streams and…
    • recording to ProRes, then playing the ProRes movie as the source and repeating the process; over several generations of recordings, which method degrades faster?
    • just send a total noise stream between app using Syphon and NDI; as in my attached screenshot, the noise is perfect in the Syphon Client but blurry in the NDI feed
  1. Try the same ideas as 1 & 2 but for receiving video in VDMX; test alongside using screen / window capture techniques.



the difference is obvious to the naked eye, but let’s see what the numbers say:
CPU usage, NDI is always higher.
Quality: Syphon is better.

I have noticed, that NDI looks better with images with less detail (solids or simple graphics). in greater detail, greater degradation (as in the noise example)

In summary use NDI between different machines. And Syphon if images are shared between applications of the same computer.

On the other hand, the degradation of the color in successive steps of Record and reproduce, is in both cases very similar (using Apple Pro ress 422). I need to try other codecs to see what the answer is.


Set up-
2019 16" mbp - vdmx mix -> syphon -> obs hardward encode

Trying to figure out best way to record my mix. Obs will save the h264 mix, which is fine for some use, but looking to recycle mix clips into new mixes. Expect the h264 clips to fall apart quickly.

Tried sending ndi to 2013 mbp over ethernet –
2019 vdmx mix -> ndi -> 2013 mbp vdmx rec prores

And ended up with noticeable compression artifacts. Not sure if it was the 2019 mbp bottle necking while creating the ndi stream, or the 2013 mbp having issues encoding the prores file.

Admittedly this type of image is tough for realtime encoding

1 Like