Rocket Streaming Audio Server (RSAS) Release Notes ==================================== 1.0.7 - 2024-12-19 * Bugfix: Fixed source getting stuck on a mount in certain situations * Bugfix: Fixed empty HLS segments with low bitrates * Bugfix: Fixed seamless takeover (source kick) regression from 1.0.6, where the new source connection would get closed too. * Bugfix: Fixed static binary installer bugs 1.0.6 - 2024-11-27 * Improved bitrate detection, to better handle certain encoders * Added a "404 HLS Not Enabled" error response, for easier troubleshooting. * HLS: - Added a option to provide flexibility when running behind a reverse proxy. Read our new docs on [Reverse Proxying](streaming-audio-server/docs/configuration/reverse-proxying.html) for more information. - Added experimental option. - Added support for X-Forwarded-Proto header. * VHost hostnames now support starting with a wildcard (*.example.com) * Added AlmaLinux 9 and Raspberry Pi 2 and newer builds, deprecated CentOS 7. * Bugfix: Fixed HLS segment timestamps being in wrong byte order (regression in 1.0.5) * Bugfix: Fixed a race condition in HLS segmenter * Bugfix: Fixed Looped Audio Files rate limit not working in certain circumstances * Bugfix: Fixed a memory leak in HLS * Bugfix: Fixed HLS relay sometimes truncating segments 1.0.5 - 2024-03-29 * Looped Audio Files: Completely revamped - Rate-limited now for better player compatibility and usability. No longer accumulates delay on client-side. - These sources now automatically start, so they can reliably be used as fallback mounts. - Listeners now share a common playback position. * HLS: - Automatically scale up HLS segment size based on stream bitrate, by default. Defaults to a 12 second segment duration. - Added EXT-X-PROGRAM-DATE-TIME to playlists, to aid timeshifting sync in players. - Fixed an HTTP/1.1 bug affecting HLS playback of multiple streams. * Major upgrade of dependencies, including to OpenSSL 3.1. * More HTTP/1.1 bugfixes * Removed unneeded dependencies (zstd, liblzma) * Optimizations: - Reduced memory usage of each TLS connection by 1 KB * Bugfix: Fixed rare crash related to preroll 1.0.4 - 2023-11-17 * HLS: - Segment size and counts in playlists can now be customized via and settings. See https://rocketbroadcaster.com/streaming-audio-server/docs/configuration/hls.html#settings for more information. - Prepend UNIX timestamp of stream start to HLS segment filenames, to improve cachability. - Tightened Cache-Control: max-age header HLS playlists and segments. - Bugfix: Fixed EXT-INF duration being wrong from HE-AAC codecs. - Bugfix: Improved playback compatibility of HE-AAC codecs on iOS devices. * Codec detection: - Automatically detect audio codecs through introspection. - Added "codec" field to /health API responses. - Detection of MP3 (MPEG-1/2 Layer III), MP2 (MPEG-1 Layer II), Ogg Vorbis, Ogg Opus, Ogg FLAC, AAC-LC, AAC Main, HE-AAC v1, HE-AAC v2, and xHE-AAC. - Samplerate, bitrate, and channels detected through this introspection override any ICE headers sent by the source encoder. * Custom HTTP Headers: Allow specifying custom HTTP headers sent in all responses. See the following for more info: https://www.rocketbroadcaster.com/streaming-audio-server/docs/configuration/custom-headers.html * Static files: Added ETag for static files, based on last modified time. Improves cachability. * Proxy server support: Allow an HTTP/HTTPS proxy server to be used for outgoing requests. For more information, see: https://www.rocketbroadcaster.com/streaming-audio-server/docs/configuration/misc.html#proxy-servers * Webhook Listener Authentication: Added "icecast-www-authenticate" header in Listener Webhook Authentication responses, allowing webhook handlers to force browsers to prompt for a username and password. * Generating your own DH params is no longer necessary. Switched to using the recommended ffdhe4096 params. * Bugfix: Removed spurious ICE/ICY headers on Server-Sent Event responses. * Bugfix: Consistently apply CORS headers on all HTTP responses. * Bugfix: metadata-history API: Set Content-Type and charset so browsers render the text properly. * Bugfix: Fixed extremely rare listener connection leak triggered by buggy Fortune 500 corporate proxy (TCP non-conforming?) * Bugfix: Fixed potential SSL socket shutdown hang. * Bugfix: Fixed choppy FLAC when relaying, in certain cases. * Bugfix: FreeBSD: Fixed "address in use" error on startup when multiple worker threads used. * FreeBSD: Minor performance optimizations. * FreeBSD: Installer script and rc.d init script now included. 1.0.3 - 2023-02-17 * Webhook source auth: Added http_status field, which passes through the original request's full status line. * Webhook source and listener auth: Pass through client HTTP headers as HTTP headers (with the header_prefix), in addition to POST body params (backwards compatible). See docs for more info: https://www.rocketbroadcaster.com/streaming-audio-server/docs/configuration/authentication.html#passing-through-http-headers-from-the-listener-or-source * Bugfix: Persistent relays could in certain situations not kick relaying listeners when failing, preventing downstream failover. * Bugfix: Fixed rare issue causing read timeout mechanism to fail, leading to stuck source connections or webhooks. * Bugfix: Fixed compatibility with older FLAC encoders * Bugfix: Fixed preroll truncation on Linux and force audio frame sync after preroll. * Bugfix: Windows GUI: Fixed hostname setting not saving (HLS) * Bugfix: Windows GUI: Fixed empty max-listener-duration causing error on startup. 1.0.2 - 2022-11-21 * Fixed OpenSSL version dependency Ubuntu 16.04 and 14.04. * Other details of this update will be published at a future date. 1.0.1 - 2022-11-13 * Bugfix: Fixed systemd service file (rsas.service) typo, preventing service from starting. * Bugfix: Fixed HLS segmentation for MP3 streams with bitrates higher than 128 kbps * Bugfix: Fixed CODECS line in M3U8 for MP3 streams. (Note: Test with VLC >= 3.0.17.4, previous versions were bugged.) 1.0.0 - 2022-11-09 * HLS support - RSAS can now remux your existing Icecast-style streams to HLS, allowing any AAC stream to be available as HLS. - "Packed audio" AAC support for HLS - ID3 metadata for HLS - HLS listeners appear in your /health stats just like other listeners. - HLS listener sessions mimic regular Icecast listeners in access.log, for compatibility with your existing statistics processing tooling. - Find out how to enable HLS and more here: https://rocketbroadcaster.com/streaming-audio-server/docs/hls.html * HLS relaying: - Relay an HLS stream from another RSAS server, providing consistent HLS segments and playlists between servers, for client-side failover. - Relay traditional Icecast/SHOUTcast/RSAS streams and convert them to HLS. - RSAS implements a full reverse caching proxy to make HLS relaying easy. * Preroll ad support: - Play a jingle or ad before your stream is heard by listeners. - Supports loading ads from local disk or via remote URL. - Intelligent caching of ads at remote URL. For more information, see: - Dynamically insert prerolls using the Listener Auth Webhook - Added mount option * Postroll ads: - Play an ad or jingle after a listener reaches reaches the max session duration. - Dynamically insert postrolls using the Listener Auth Webhook - Added mount option. * Midroll ads: - Play ads or jingles in the middle of your stream. - Multiple ads per ad break. - Triggerable via metadata from your encoder (eg. RSAD30000) or via the Manage API. - Programmable ad insertion via setting. When an ad break is triggered, RSAS will send a webhook to fetch which ads to play on the mount. Allows you to build your own integration with ad networks. - Customizable per-ad metadata, or fallback to setting - Synchronization of midroll ads for new listeners connecting in the middle of an ad break. - Intelligent caching of midroll ads * HTTP/1.1 support and major improvements to static file serving: - Includes HTTP/1.1 Keep-Alive, to minimize connections for static files. - Support for HTTP/1.1 Range header, to allow seeking in static audio and video files. - Serves MP4 video files out-of-the-box now, with seeking. - Cache-Control, Date, and Expires headers - Can now follow symlinks out of your webroot (use with caution) * Major performance improvements for static file serving, on both Windows and Linux. - Fully asynchronous file I/O - Use sendfile() or Windows equivalent when possible * Overhauled Linux packages: - On Debian, Ubuntu, and CentOS, our RSAS packages now create an "rsas" user and group. The "rsas" user is in the "icecast2" group, for compatibility. - The `rsas.service` systemd service file is now included (installs to /usr/lib/systemd/system) - Upgrading? Read our instructions here: https://www.rocketbroadcaster.com/streaming-audio-server/docs/installation/#upgrading-from-a-pre-10-version - Ubuntu 22.04 DEB package added * Windows: Updated OpenSSL to 1.1.1q, which is supported until September 2023. Windows users should plan to upgrade RSAS from this release by this time. * Icecast compatibility: - Implemented several missing Icecast APIs, including: - /admin/stats - /admin/listclients - /admin/listmounts - Makes RSAS compatible with several stream analytics and listener statistics aggregators. - Use of these Admin APIs requires configuring an and enabling Icecast emulation: https://www.rocketbroadcaster.com/streaming-audio-server/docs/statistics.html#icecast-compatible-status-page * Increased max HTTP request header size to 4 KB, for compatibility with websites using large cookies. This can also now be customized with the setting under . * Added optional password protection for /health API, using under . * Added mount-specific health API at //health API - Can be password protected with in your config. * Auto-stop relays - Added option for on-demand relays to stop when the listener count drops to zero. * Improved fallback logic on relays. Now recurses until it finds an active fallback. Allows relay->relay->file fallbacks to work as well as more advanced topologies. * Misc: - Added "song" and "duration" parameters to Listener Removal Webhook. - Log rotation settings are now configurable (for each log). See docs here: * Improved CORS so modern players can access ICY metadata directly from the stream using AJAX. - Access-Control-Allow-Headers now permits Icy-Metadata - Access-Control-Expose-Headers permits Content-Type, icy-metaint, and all the other ice/icy headers. * Bugfix: Fixed bug where listeners that were relays may not get closed when the source dropped. * Bugfix: Fixed Ogg FLAC relays sometimes getting stuck in an unplayable state. * Bugfix: Improved Ogg FLAC detection and sync * Bugfix: Fixed static file serving over HTTPS on Windows. * Bugfix: Improved AAC frame synchronization for new listeners and during failover * Bugfix: Fixed latency=high and default latency mode applying inconsistently. * Bugfix: Fixed rare fallback listener leak * Bugfix: Fixed rare listener leak affecting Linux during network connectivity loss * Bugfix: Fixed infinite loop when relay with fallback dropped with listeners and no active fallback * Bugfix: Fixed rare socket timeout causing relays to get stuck in audio loop * Bugfix: Fixed empty querystring in listener_remove webhook * Bugfix: Fixed access logging of HTTP 403 "Mountpoint in Use" responses * Bugfix: Fixed "Maximum fallback resursion limit reached" error not resulting in an HTTP response (now HTTP 503) * Bugfix: Fixed parsing HTTP requests if header terminator was over 512 byte boundary * Bugfix: Fixed rare issue where TLS hostname verification could sometimes fail when relaying. * Bugfix: Fixed relaying from servers using SNI * Bugfix: Fixed CPU core count dection in Linux containers * Bugfix: Fixed relaying over IPv6 * Bugfix: Fixed incorrect Content-Type header for Icecast-style status-json.xsl * Bugfix: Improved connecting to relays with multiple DNS records (handle round-robin if hosts are down) * Added experimental --hashpassword command line argument and support for hashed passwords in config file using PBKDF2 + HMAC with a SHA256 hash and 390000 iterations. We recommend only using this in combination with rate limiting by a reverse proxy, otherwise it creates a DoS vector. 0.1.20 - 2021-08-31 * Major performance optimizations, yielding about a 2x drop in CPU usage at high workloads. * Relay URLs can now be changed dynamically via config reloads. Listeners will get moved to the new URL. * Seamless Takeover: Rocket Broadcaster will now ask broadcasters if they want to kick an existing source when they connect, which allows DJs to seamlessly takeover a stream. * Added /manage/ API, for kicking a source or moving listeners to a new mount. See the docs: https://www.rocketbroadcaster.com/streaming-audio-server/docs/api.html#manage-api * Added optional field to config file format * Added last_config_reload field to /health (UNIX timestamp) * Added --test/-t flag for checking config file syntax * Added warning if default passwords are used. Prevented blank passwords too. * Icecast compatibility: - Implemented `` mount flag from Icecast, which hides a stream from the emulated Icecast status page and `status-json.xsl` page. - Added `` directive, allowing you to remap URL paths. - Added the "stream started" timestamp to Icecast status page and to the `status-json.xsl`. - Added ability to override referer header with "referer" querystring parameters (?referer=example) - 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. See the docs for more details: http://127.0.0.1:8002/streaming-audio-server/docs/configuration/authentication.html#custom-responses - "HTTP 400 Bad Request" template now included. * Bugfix: Fixed handling of icecast-auth-timelimit in webhooks compared to 0.1.19 alphas. * Bugfix: HTTP referer now shows up in access logs * Bugfix: Fixed static file serving on Windows, which prevented LetsEncrypt wizard for working for some users. * Bugfix: Fixed FLAC compatibility with BUTT encoder. - Bugfix: Fixed rare relay race condition that could lead to a crash. - Bugfix: Fixed HTTP "referer" always being blank in the access log. - Bugfix: Fixed a rare crash related to TLS. 0.1.19 - 2021-08-01 * This release was intentionally skipped. 0.1.18 - 2021-03-24 * Added persistent relays. * Major performance improvements, especially with large numbers of listeners. * Added option to limit listener session duration on a per-mount basis () * Added icecast-auth-timelimit header from source webhook auth. If specified, it imposes a timelimit on the listener. * Icecast-compatible header passthrough (via POST vars) for webhook listener and source auth. ( and header_prefix) * Added server_start and stream_start metrics to status-json.xsl * Added SNI support, for using multiple SSL certificates with different hostnames, via . * Behaviour change: Default to persistent relays instead of on-demand (Use 1 in your section for on-demand behaviour.) * Behaviour change: //metadata now returns JSON by default unless explicitly used with an EventSource for streaming metadata. * Behaviour change: Drop unwritten log lines if the backlog exceeds 10K records, to avoid blocking under high load. * Bugfix: Fixed rare memory leak with TLS * Bugfix: Fixed DNS lookups blocking for relays * Bugfix: Fixed TLS negotiation with clients that don't support SNI * Bugfix: Fixed glitchy audio playback via Google Assistant. * Bugfix: Fixed listener authentication race condition. * Bugfix: Improved compatibility with Unity game engine - Only send in-band ICY metadata if it changed. * Bugfix: Various other bugfixes 0.1.17 - 2020-09-18 * Added Metadata History API (/mount/metadata-history) - See the docs: https://www.rocketbroadcaster.com/streaming-audio-server/docs/players.html#metadata-history-api * Added customizable error page templates. (Included in Windows/DEB/RPM packages. Not yet bundled with static Linux .tar.gz.) * Improved source reconnection behaviour - RSAS will now retain listeners for up to 10 seconds after a source disconnects, to allow sources to reconnect and resume broadcasting to those listener. Applies to relays too. * Icecast-compatible Status Page added - Must be manually enabled: https://www.rocketbroadcaster.com/streaming-audio-server/docs/statistics.html#icecast-compatible-status-page * Performance improvements * TLS certificate errors on a service reload are non-fatal. * Improved logging, especially related to relays and fallbacks, to aid troubleshooting. * Authentication options (