Streaming Audio News and Tips

RSAS 0.1.20 Released

We're pleased to announce the release of RSAS 0.1.20! Rocket Streaming Audio Server (RSAS) is a high-performance webserver designed for broadcasting live streaming audio through the web, with low latency and high listener capacity.

This release contains major performance improvements, a new management API, tons of small improvements to existing features, and bugfixes.

➡️ Get RSAS 0.1.20 today from our downloads page.


Wait, what happened to RSAS 0.1.19?

We're skipping it. Late in the development cycle of 0.1.19, we started pursuing a new line of optimizations to boost performance on very large servers with hundreds of thousands of listeners. We started working on these optimizations in a separate branch for 0.1.20 and continued final preparations for the 0.1.19 release. However, our benchmark results for 0.1.20 were so good that we put it through our QA process and quickly started using it in production at Radio Mast. We've excited to share 0.1.20 with you as an even better version of RSAS than we initially planned.

Without further ado, here's what's new in RSAS 0.1.20:

Performance Boost

In this update, our new optimizations have achieved a roughly 2x reduction in CPU usage at high workloads, enabling broadcasters to reach more listeners than ever before on a single server. We've also further reduced the CPU usage for relays. No changes or config tweaks are required, simply upgrade and enjoy.

On our server test rig with a Ryzen 2700 processor (8 cores, 16 threads), RSAS is now able to serve 240,000 concurrent listeners on a 64 kbps MP3 stream. This is on a consumer-class CPU that is already 2 generations old. Importantly, RSAS fully utilizes all available cores and is limited by CPU speed alone.

RSAS /health screenshot with 240,000 listeners RSAS CPU usage in htop with 240,000 listeners on a Ryzen 2700 CPU. RSAS network traffic in nload with 240,000 listeners
RSAS /health screenshot, htop showing CPU utilization, and nload showing network traffic with 240,000 listeners.

In the nload screenshot, RSAS is sending almost 15 Gbps of traffic!

We'll be publishing an updated set of benchmarks with more details soon, so be sure to check back.

Manage API

The new Manage API allows you to perform management actions on individual mounts. Two actions have been implemented thus far, allowing you to force a source to disconnect (kick) or move listeners to a different mount.

Read more about the new Manage API here.

Seamless Takeover

Compatible encoders can now seamless kick and takeover an existing stream when they connect. When connecting to RSAS with Rocket Broadcaster 1.3.22 and up, if a stream mount is already in use, users will be prompted if they want to kick the existing source. This allows broadcasters to seamlessly takeover a stream or switch DJs without any dead air.

Other Small Features:

  • Relay URLs can now be changed dynamically via config reloads. Listeners will get moved to the new URL.
  • Added admin-password config setting from Icecast (currently only used for the Manage API).
  • Added optional <config-version> field to config file format and is exposed in /health. This can help you track whether your new config has been loaded.
  • Added last_config_reload field to /health (UNIX timestamp)
  • Added --test/-t flag for checking config file syntax
  • Added warning if default passwords used (hackme/adminhackme)
  • Prevent blank passwords from being used.
  • Improved Icecast compatibility:
    • Implemented <hidden> mount flag from Icecast, which hides a stream from the emulated Icecast status page and status-json.xsl page.
    • Added <alias> directive, allowing you to remap URL paths.
    • Added the "stream started" timestamp to Icecast status page and to the status-json.xsl.
  • HTTP referer now shows up in the access log.
  • The "referer" header is not supported by all browsers and players, which can make traffic attribution tricky. To make accounting for your traffic sources easier, you can now override this header by setting the "referer" querystring parameter. (eg. /mystream?referer=myapp)
  • Source and Listener Auth Webhooks can now return icecast-resp-status and icecast-resp-reason headers to make RSAS return a custom response when denying a listener or source.
  • HTTP 400 Bad Request template now included.
  • DEBs for Debian 11 now available.
  • CentOS 6 has been deprecated.

Bugfixes:

  • Fixed serving static files on Windows, which prevented the LetsEncrypt wizard from working for some users.
  • Fixed FLAC compatibility with BUTT encoder.
  • Fixed rare relay race condition that could lead to a crash.
  • Fixed HTTP "referer" always being blank in the access log.
  • Fixed a rare crash related to TLS.

What's Next?

RSAS 0.1.21 is planned to come shortly, and will include improved HTTP/1.1 support for serving static audio files on-demand, such as podcasts. It will allow seekable playback of large audio and video (!) files out-of-the-box.

These features will also help round out our HLS implementation, which we're hoping to release as an experimental feature soon.

Audio preroll (aka intro files) is high on our list of priorities and we are planning this for Fall 2021. We're hoping to throw in some experimental features with this too, like the ability to trigger audio insertion mid-stream (mid-roll).

Looking for other features? RSAS development is driven by your feedback, so get in touch and let us know how we can help your online audio streaming.

Lastly, we would like to thank our dedicated users for all your feedback on our previous releases. Your feedback has helped us make RSAS better for the global broadcasting community. Thank you!