Stress Stop
24/7 YouTube livestream, Stream control server, ffmpeg + DigitalOcean, Shopify
A store that sells calm, and a channel that runs all night
Stress Stop has spent more than thirty years teaching people how to manage stress — workbooks, training kits, relaxation audio and video for hospitals, universities, and companies like Mayo Clinic, Blue Cross Blue Shield, and MIT. Their Shopify store is where that catalog lives.
For years, their calming video footage has played where organizations put it: hospital waiting rooms, long-term care facilities, office lobbies. If you weren’t inside one of those buildings, you never saw it. Stress Stop wanted to change that — put the footage on YouTube as a channel that is always live, The Relaxation Channel, so that anyone who finds it at 2 a.m. finds something playing, and anyone who wants more finds the store.
The hard part isn’t the idea. It’s keeping a stream up for months without a person watching a dashboard.
What “always live” actually requires
YouTube will happily take a live feed. It will not keep it alive for you. A 24/7 stream from a laptop dies the first time the laptop sleeps, the Wi-Fi hiccups, or a file ends and nothing starts the next one. And YouTube periodically ends long-running streams on its own, which takes the public link down with it.
So the brief we wrote ourselves was: nine long-form videos, roughly twenty hours of footage, looping forever, on infrastructure small enough to leave alone, with no one on call.
How it’s built
The whole thing is one small Node service on DigitalOcean’s App Platform, and it does four jobs.
- Storage. The videos sit in DigitalOcean Spaces, not on the server. The service reads the playlist from an environment variable, so reordering or adding a scene is a config change, not a deploy.
- Playback. For each item it starts an ffmpeg process that pushes the file to YouTube’s RTMP ingest, then hands off to the next one. It prefetches the next file so there is no gap while the current one plays.
- Recovery. ffmpeg exits with a code. Zero means the file finished; anything else triggers a retry with exponential backoff, up to three attempts, before the controller moves on. Disk space is checked before every prefetch. The service autostarts, so a platform restart brings the stream back without a human.
- The fallback nobody sees. When YouTube ends the public stream, the controller switches to an unpublished backup stream so the channel is never dark, then returns to the public one.
On top sits a plain status page: what’s playing, what’s next, the last exit code, free disk, and Start / Stop. There is a /status JSON endpoint and a /logs endpoint for when something looks off. That is the entire admin.
What it looks like from the outside
A YouTube channel with a stream that is on when you open it. Nature scenes — spring, the California coast — cut to run long, in a loop long enough that a regular viewer doesn’t notice the seam. Every frame is Stress Stop’s own, produced by founder James Porter (no relation to ours, though we’ve stopped correcting people). Underneath it, a link back to stressstop.com.
It ran for a month before anyone touched it. The touch was adding a video.
Why a Shopify agency built a video server
Because the store is the business, and the channel feeds the store. We’re mostly Shopify. We are not only Shopify. When a client’s next customer is going to arrive through YouTube, the useful thing to build is the part that keeps YouTube running — and to build it small enough that it never becomes a second job for them.