How you would render four UHD videos onto a 12 monitor video wall

I would love to hear more about what hardware and software solution you have or would use for a project like described below.

I’m working on a project for which we are looking for a solution to render four UHD (3840 x 2160) videos onto 12 monitors with a resolution of (1920 x 1080). After some discussion and research the most obvious solution would be to use 3 Quadro GPUs and a syncer as described on the scalable visualisations solutions page (see below). Development wise this is probably the most straightforward solution as we can use Mosaic to create one big desktop. I’m only not sure how this combined desktop would be used in software. E.g. would I simply create an OpenGL context and would OpenGL see one GPU instead of 3?

Another solution would be to use just one Quadro P4000 which according to the spec can do 4 * (4096 x 2160) @ 120fps. And then use a video splitter to split up the output to 12 * (1920 x 1080).

For both solutions I want to use the Video Codec SDK to decode h264 (we don’t use audio). Last week I did a test with a GTX 680 and the benchmark showed the same decoding speeds as nvidia notes in their application note. The pascal architecture is capable of decoding at 658fps (for 1920 x 1080) which looks promising, but of course I need to benchmark this.

What are your thoughts about the hardware and software for a project like this?

Quadro: http://www.nvidia.com/object/quadro-scalable-visualization-solutions.html
P4000 spec: https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/documents/Quadro-P4000-US-03Feb17.pdf
Application Note: http://studylib.net/doc/18850290/application-note---nvidia-developer

If you only need to decode h264/h265/hdr/hlg streams - check single board computers.

Happy hacking solution for ~ $600

I love that solution and it probably might work too though though my only concern would be synchronisation between the videos. Have you done something like that using a client/server architecture where all clients were syncing a timestamp that is used for diplay?

I see many solution for FRAME level syncing:

  • You can use multicast stream like RTP that send exactly one frame at once (and wait before send next encoded frame to make exactly 60 FPS). MPP decoder decode frame ASAP without delay or buffering (of course it works for I and P encoded frames and most H265 streams).
  • You can use buffered stream or file read, decode frames, buffer decoded frames (recommendation is 20+ frames) and send output synchronized by simple UDP broadcast packet with PTS to display.

If you need V-SYNC level syncing it its more complicated but also possible in SBC (not searched for ROCK64 but for RaspberryPI “vcgencmd adjust_hdmi_clock 1.001” to speed up or slow down HDMI clock to tune V-SYNC (see https://www.raspberrypi.org/forums/viewtopic.php?f=70&t=148390)).