The Video Wall

(In Progress)

Figuring this out in Sketchup makes the real build WAY easier.

The Build

Next to the starfield, this is the thing people ask the most about. 

The design of the frame is simple enough. It's basically just a shadow box. Each porthole has a monitor behind it.

For PiWall, there's good guides out there. This is how I do, but I'll link to how others do below.

I used real portholes, not those decorative mirrors on Ebay.
The contrasting black bolts look sharp, yeah?
These are mounted on standard low-profile wall-mounts.
MDF didn't save me enough money to be worth ever using MDF again.
The wall framing is basically the same as if this was a window. The porthole frame slips right in.

The Electronics

PiWall is a software package that allows you to broadcast video to a network of connected Raspberry Pi computers. This eliminates the need to have multiple video cards, and makes node placement easy. 

Since there's one RPi per monitor plus one broadcast RPi, this build required four of them. One for each monitor and the broadcast.

Wiring is entirely straightforward. One RPi to a monitor, and all the RPis on the same layer 2 broadcast domain. In this case just a basic dumb network switch.

Since taking this pic, I've moved to a Power-Over-Ethernet design, which has removed the need for so many power plugs, but that's mostly just cosmetic.

YOU CANNOT RUN THIS OVER WIFI. IT MUST BE ON A PRIVATE PHYSICAL ETHERNET NETWORK.

Wifi really, really doesn't play well with broadcast traffic. At best you'll slow down the rest of your network, but chances are your access point or router just won't be able to broadcast the stream and this just won't work at all.

You also really, really want this to be on a PRIVATE network. If you just plug into your wifi network router's switch, the broadcast stream is going to cause problems and/or your other devices broadcast traffic will interfere with this stream.

The Software

This is where it gets a little harder.

There are reasonably good instructions on the PiWall forums here, but they were posted in 2018. libav-tools and related capabilities are rolled into ffmpeg now, for example.

There's a very good, up to date (as of 2022) guide here as well. 

Since others have gone into great detail, I don't need to, and I'll mostly just record the stuff I need to remember for myself. Since things like installing Raspbian and enabling wifi are easily found online, I'm not going to repeat it. This really needs some Linux knowledge, and I assume you have that.

I am writing this up in 2023. PiWall has been unmaintained since at least 2013. It's forked from a package called OMXPlayer which has been deprecated, and will be removed from future Raspbian repositories, likely to include dependent libraries. Debian Bullseye has already broken PiWall. I found a fix for that, but who knows if it'll work with the next release?

Buster is the last Raspbian release that can natively support PiWall. Bullseye can be patched in, but no promises about the future. If you're reading this in 2025 and it won't work, that may very well be your problem.

I'm pretty sure that future versions of the RPi hardware simply won't work, as the hardware changes are a large part of why omxplayer has been abandoned. (The fact that you can't even get new RPi's in 2023 due to a cHiP sHoRtAgE is beside the point, but similarly concerning.)

Raspberry Pi OS Configuration - Master

The first step is to create a source for your video streams. In this case, I used another Raspberry Pi, but anything that can run ffmpeg or VLC or OBS should work. The guide linked above shows how to use a Mac and OBS. Note that even if you're not using a Raspberry Pi, you'll need to configure a static route to the broadcast network over a physical ethernet port as described below.

Since this is a private home installation, I skip a whole lot of security stuff. If you share your wifi with strangers or this is a commercial installation, make sure you harden the OS.

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether b8:27:eb:b1:cf:d0 brd ff:ff:ff:ff:ff:ff

    inet 192.168.100.11/24 brd 192.168.100.255 scope global noprefixroute eth0

       valid_lft forever preferred_lft forever

    inet6 fe80::3e96:e6b8:4dd5:e80b/64 scope link

       valid_lft forever preferred_lft forever

$ ip route

default via 192.168.1.1 dev wlan0 proto dhcp src 192.168.1.199 metric 303

192.168.1.0/24 dev wlan0 proto dhcp scope link src 192.168.1.199 metric 303

192.168.100.0/24 dev eth0 proto dhcp scope link src 192.168.100.11 metric 202

224.0.0.0/4 dev eth0 scope link

Validate that the bold sections in the above match what you entered for net/ip/mask, and your raspberry pi streamer is ready to go.

Raspberry Pi OS Configuration - Tiles

The PiWall software used for this project refers to each screen as a "tile", and therefore we call each attached RPi a "tile."

Note, you need one raspberry Pi per monitor in your piwall. You can have as many monitors as you can power, so long as you have a Raspberry Pi attached to it. The Raspberry Pi 4 has dual HDMI outputs. Don't be clever here, that won't work.

The PiWall software has been unmaintained since at least 2016. 

Each tile will have near-identical configurations. The only thing to do differently on each is give them a unique hostname and IP address.

You can do most of the OS configuration over SSH via wifi. However, once configured I run these with Wifi disabled for performance reasons.

On a Pi 4, you'll need to make some changes to /boot/config.txt. I haven't tried that, so I won't confirm here. Check this guide for details. 

Change XX above to some other number between 12 and 254, and make it different for each tile.

 $ ip addr sh dev eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether b8:27:eb:6f:63:7e brd ff:ff:ff:ff:ff:ff

    inet 192.168.100.27/24 brd 192.168.100.255 scope global noprefixroute eth0

       valid_lft forever preferred_lft forever

    inet6 fe80::4893:d916:8a07:fba6/64 scope link

       valid_lft forever preferred_lft forever

$ ip route

192.168.100.0/24 dev eth0 proto dhcp scope link src 192.168.100.27 metric 202

224.0.0.0/4 dev eth0 scope link

If you're on Bullseye, there is a package available to replace missing libraries.

$ sudo wget https://github.com/hitesh83/pwomxplayer-support/archive/refs/heads/main.zip
$ unzip main.zip
$ cd pwomxplayer-support-main
$ sudo ./install_lib.sh

$ wget http://dl.piwall.co.uk/pwlibs1_1.1_armhf.deb
$ wget http://dl.piwall.co.uk/pwomxplayer_20130815_armhf.deb
$ sudo dpkg -i pwlibs1_1.1_armhf.deb
$ sudo dpkg -i pwomxplayer_20130815_armhf.deb

If dpkg complains about dependencies, you may need to use $ sudo apt install *.deb. If that doesn't work you'll need to resolve your dependencies, which isn't in scope of this. (Though start by enabling the archive repo in /etc/apt/sources.list.)

If it installed, try typing "pwomxplayer -h". If you get the help text, it's at least installed.