Stoatworks Labs

bdplay

A USB stick as a source on an NDI decoder

In developmentFirmwareGo
bdplay — A USB stick as a source on an NDI decoder
bdplay's own control page at port 8091 on a real PLAY mid-playlist — the library read off the drive, the transport, and the log that answers most of the "why won't this play" questions.

What it does

A BirdDog PLAY is an NDI and SRT decoder: it shows what the network sends it. bdplay makes a USB stick one more thing the network can be. Plug one in, pick USB from the source list in the decoder's own web UI, and it plays what is on the stick to the HDMI output — video, stills and PDFs, in filename order or shuffled, looping until you pick something else.

Almost all of this was already on the device and unused. The hardware decoder, the media framework and the display sink all ship in the stock firmware; what is missing is that nothing mounts a stick, and the web UI checks the chosen source against a list that has no USB on it. So bdplay mounts the volume itself — read-only, always, because these get unplugged mid-write — and takes over the dropdown rather than trying to make the vendor's handler understand a new word. The unit's stored configuration never changes, which is why going back to NDI is instant.

The awkward part is the display. One process owns the screen at a time, so playing from USB means standing the decoder's own video process down and putting it back afterwards — and a unit with that process stopped has a dark output and a working web page, which looks exactly like a brick. Every exit path restores it, including being killed, and the restore verifies the picture actually came back rather than trusting that the request was accepted.

  • USB added to the source list in the decoder's own web UI
  • Video, stills and PDFs, hardware-decoded to HDMI with audio
  • Sequential or shuffled, looping, with the shuffle reordered per cycle so nothing starves
  • FAT, NTFS and exFAT — the last through FUSE, with no kernel change and no reflash
  • PDFs through PDFium, so nothing copyleft ends up on the device
  • Mounted read-only, and the decoder's own video process restored on every exit path
  • A control page of its own on port 8091: the library off the drive, the transport, live status and a log
  • Installed as a checkbox in the PLAY Patcher, which assembles the firmware package in the browser — no toolchain

Where it stands

Working end to end on a real PLAY on firmware 1.0.30, including a genuine exFAT volume and PDF rendering on the device. That is one unit on one firmware version, and USB hotplug with a physical stick is still unverified: the testing ran off a loop device and internal storage. One finding is worth knowing before installing it: cycling the decoder's video process destabilises it — the vendor's own code aborts during teardown, and the damage is cumulative across a session rather than visible at the moment of the switch. Recovery from that state is handled, but it is our doing. There is no tagged release yet.