The next post will be part 3 of my Engineering FM series but it’s time for a quick diversion to introduce a tool I ended up producing, initially as a contingency plan, but later as a serious project, for implementing outside broadcast audio links and studio-transmitter links using the Real Time Protocol.
That tool is called OpenOB. The main resource for finding out more is the GitHub page hosting it. But I figured it deserved a proper introduction as I’ve had quite a few people asking after it via a post on the Rivendell mailing list.
The problem is simple: You have audio, you want to get it across an IP network like a college network or just over the internet via a pair of DSL lines, and you have no money. This is where I started and what I made OpenOB to solve.
OpenOB is basically quite simple – a pair of Python scripts, a receiver and a transmitter. There’s a simple YAML configuration file used to set up the link, and a Redis server used to let the two ends of the link communicate. This is all set up in a way that doesn’t require any holes punching on the transmitter’s firewall (assuming you can egress on some sensible ports), and which is configured by the transmitter (receiver’s sound card/JACK settings aside). You can change bitrates and jitter buffer sizes on the transmitter without needing to reconfigure the receiver. There’s also bidirectional audio level monitoring, so you can see what’s going on at both ends from just one end.
Any GStreamer-supported codec and payloader can be used, but by default the CELT codec is used, which is a great low-latency low-bandwidth lossy codec which can handle speech and music content. This works great for outside broadcasts where bandwidth may be limited, and in theory, the system can be used over a mobile connection like a 3G dongle, though I’ve not had a chance to test this just yet.
For studio-transmitter links where bandwidth isn’t an issue (as with Insanity Radio, where we have a nice 100Mbps college network between studio and transmitter) we want the best audio quality, so OpenOB supports linear PCM audio (16-bit) transport, allowing lossless audio transport with low latencies.
While you’ll need to buy sound cards with balanced I/O for the best quality operation, OpenOB is entirely free and open source and available to anyone. The code is also open to reuse in your own projects under the GNU GPL v3.
So, there it is. Go have a play with it if you’ve got need of a system like this and want to avoid 10+ seconds of latency and low quality with a HTTP/Icecast link or spending £2,000+ on professional codecs.