I had the idea of replacing the phone+station with a simple app running from a Steam Deck (dubbed the Shrimp Deck) and connected to the shrimp using the usb/ethernet adaptor I'm already using on the station. This idea actually came when I thought about adding a touch screen to the station.
I got excited at the idea of writing a small app to replace the web UI+station server using the GoDot game engine. I've been longing to try this engine, but the idea of writing a game gets me bored already. Games take too long to build. This was a perfect use case.
Unfortunately, as GoDot documentation on video playback states clearly:
The only supported format in core is Ogg Theora (not to be confused with Ogg Vorbis audio). It's possible for extensions to bring support for additional formats, but no such extensions exist yet as of July 2022. H.264 and H.265 cannot be supported in core Godot, as they are both encumbered by software patents.
Too bad... So here's my quest to find the right tool.
GoDot ffmpeg plugin
I actually found an ffmpeg plugin from the EIRTeam. This seemed like what I needed. Unfortunately it only reads local files.
Unreal
It looks like Unreal can show networked streams as long as they are in rtsp format, which is okay when testing locally (my desktop has many CPU cycles to spare), but the pi zero only has hardware acceleration for the h264 format, and it is a priority to minimize the processing load on the shrimp, for CPU and battery life reasons.
Qt5
Good old Qt to the rescue... Networked streamed content as served by ffmpeg won't pause and that seems like an issue for QMediaPlayer
.
Qt6
Suffers from a bug with networked url until 5.6.1 which isn't available in debian bookworm at the moment.
qt.multimedia.player: Unable to set the pipeline to the paused state.
It just looks like another phrasing for the same issue as in Qt5.