We've replaced a few of the flyer screens at the bars -- new LCD monitors are so cheap now and have much wider viewing angles. We also added a couple of monitors at the pizza cashier, hyping our appetizers and beer selection. We've had a bunch of people comment that they didn't know about some of our appetizers until those screens went in, including staff!
Those screens are just Raspberry Pis displaying a web page. All the flips and fades are done in JavaScript.
We've also done a webcast-infrastructure upgrade that I'm pretty hopeful for. Fingers crossed, but it might make things less flaky.
So the video comes out of the switcher as a pair of SDI feeds (one for each room) and then those go into a pair of Roland VC-1DL frame syncs, to smooth out the glitches that occur every time the switcher switches (without that, the downstream devices freak out every time the input changes, since the source cameras do not have external sync).
These Roland devices are flaky, and sometimes just stop sending video until you power-cycle them. But I have them on a remote-controllable power supply, so my scripts just turn them off and on again when they detect that anything has gone wrong (like the video being frozen for too long).
After that, the smoothed out SDI next went into a pair of Blackmagic UltraStudio MiniRecorders which converted SDI to Thunderbolt or USB-C video, to hand it off to a Mac Mini running OBS. Those MiniRecorders are extremely flaky and unreliable and often required rebooting -- but since they are USB devices, there is literally no way to do that except by unplugging and re-plugging the USB cable. So no automated recovery is possible them, and I hate them for it.
But!
We found this thing, the Kiloview E1 NDI Encoder, which digitizes the video and serves it up as an RTMP stream. It is very configurable, and seems to have been designed with a "stay on 24/7 unattended" mindset, which is so rare these days. So now I just have OBS on the Mac ingesting the RTMP stream over the network, and I get these USB shenanigans entirely out of my life!
For a little while it seemed like I could also omit the Roland frame syncs: the Kiloview is much more tolerant of bad SDI frames than the MiniRecorders were. But I did see it glitch out a few times without them, so it seems like the Rolands are still doing some good.
I really hope the Kiloview turns out to be reliable, because those MiniRecorders are just the worst.
19 Responses:




this is so cool! and such an elegant solution using RPi + webpages!!
Yeah, they work great! I guess I wrote that JavaScript back in 2014. Back then we were driving the screens with ten-year-old Mac Minis, but these days even a Pi2B is fast enough for the single-flyer screens. The one above the pizza bar (the one that does a cascade of dozens of flyers and has the Patreon ticker) needed to be a 4B to keep up.
Though for some reason the animation is only fast enough in Chromium, not Firefox.
I think every time I've been to Ikea recently, there's been at least one screen stuck on the RPi boot screen with a corrupt SD card.
There's plenty of small PCs designed specifically for 'digital signs', but you can buy* ten Raspberry Pis for the same price and just swap them out.
*(if you can find them in stock...)
I still curse Big TV for all simultaneously nixing their “play this USB stick full of images as a slideshow that loops forever” features several years ago. Rumor has it that too many people were buying cheap flatscreen TVs for just that purpose and cutting into their then-expensive giant monitor sales. So now TVs will all only play a USB slideshow once and don’t loop.
My janky Pi Zero W solution for a one-off display was launching a natively loop-capable framebuffer image viewer (fbi) on boot that ingests an ordered textfile of image filenames. Every slide has the same display duration and you only get one transition type for the entire slideshow, but I also didn’t have to write any of that stuff myself, so I’ll call it a wash.
I do seem to recall that getting systemd to run the image viewer on the default text console was a whole thing, though.
ERR_CONNECTION_REFUSED
In the unfortunate event you need to use those (or some other) USB devices again - could you put them on a powered USB hub, and put the hub on a remote-controlled power supply?
(I apologize for trying to solve the problem you no longer have.)
I investigated that approach, and no, it does not work. USB is extremely hungry for ghost power and as long as there is continuity to something it will draw voltage from it. There does not exist a powered USB-C hub that provides optical isolation.
Most USB hubs behave that way, yeah. It's very bad behavior, in that it leads to bizarre failure modes when the bus becomes underpowered because the power brick gets disconnected.
But: I have a Startech USB 3 hub that is not like this. It absolutely does not operate at all without a power brick plugged in.
Bonus nachos: It is housed in a metal box, with mounting ears.
More nachos: I have more of them than I need. LMK if you want one.
I may take you up on that if I decide this NDI device is a no-go and have to go back to the USBC nightmare, thank you!
To be clear, though: when you power cycle the hub, with both upstream and downstream USB cables still attached and host computer powered up, all downstream devices power-cycle?
Yes, that's been my experience with them, which was somewhat dismaying at the time when I was playing with and wanted to plug a keyboard and mouse into old blade server that only had one USB port.
The Startech hub failed to work without a power brick attached.
Also: I found this today. It turns selectively off the power for USB ports on [many kinds of] USB hubs. Works with macos, it says.
Untested by me. No idea if it actually works.
https://github.com/mvp/uhubctl
If you get stuck fighting usb again, one way to programmatically cut power to usb devices is to find a hub with per-port power control.
https://github.com/mvp/uhubctl
I've been able to power cycle misbehaving usb devices automatically.
I had some stuff that detected my device failing, and then watch dmesg and reboot the device it till it enumerates peoperly.
I've only used it with linux, but it says it works on a Mac.
I also fixed it for a 3D printer that would run its control board from the upstream USB host even when "off" by just cutting the two power wires in the USB cable connecting it to the Pi.
C.
The cashier screens are very cool. Mozzarella wants another 'z'.
Mozilla --> Mozarella.
oh, I didn't think of that!
what LCD monitors did you use?
SAMSUNG T35F. They're cheap and they have a really wide viewing angle from all 4 directions. (Some monitors have asymmetric top/bottom viewing angles, which is a problem when you are hanging them portrait.)
thanks!