Here's the code that powers Burning Man Informatio Radio's 2020 stream.
Found in the harbor/
folder.
Here is the script that runs the stream preference automation. The output of this stream comes from one of the following from a basic hierarchy.
- [Most preferred] A "priority" Icecast 2 mount for pre-recorded shows to stream to, as well as for administrators to take over the stream, if needed.
- An Icecast 2 mount for DJs remote stream to. Silence
being broadcast on this stream will be treated as if a DJ is not connected
after 25 seconds.
- The
live
stream accepts passwords from a Google Sheet that authenticates passwords (and kicks people off) based on time intervals. - The
test
stream accepts a fixed passwords, does not kick people off, and will also accept password from the spreadsheet for testing.
- The
- PulseAudio input. This will be the dummy device monitor output of a Zoom room running inside Xvfb using icewm as a window manager. Silence on this input will be treated as if the stream is down.
- An autoDJ rotating tracks from disk mixed in with station ID and ad blocks every so often.
You can use Docker to test this, however the script runs without Docker on an Ubuntu 20.04 machine.
Copy over the environment configuration file and edit it.
cd harbor
cp env.vars.default env.vars
If you have liquidsoap installed on a Linux machine OR if you have Docker on macOS, run,
./run.sh
The most important open ports are:
8000
: The Icecast 2 server to listen to the stream. See the status page at http://localhost:8000/ with mount/test
.8001
: The liquidsoap harbor script.- Stream to mounts
/stream
or/priority
(as above) with default passwordhackme
- View the harbor status page by going to http://localhost:8001/, default password is
hackme
.
- Stream to mounts
80
: nginx + noVNC, with a desktop environment with Zoom installed. You can test out Zoom streaming with the PulseAudio input described above by going to http://localhost/ and opening Zoom.1234
: Telnet monitor of the harbor script.- Try connecting and sending
help
+ enter for more info.
- Try connecting and sending
This project is licensed under the MIT License - see the LICENSE file for details.