High-Performance Audio Streaming Media Server, Live Ingest Engine & Remote Management Station
Complete Standalone Alternative to Icecast, TinyIce, and RocketStream in pure C# (.NET 10)
RTSAS is the high-performance audio streaming media server and station management suite for the RadioTEDU and RTAI ecosystem. It functions as a complete, lightweight, and modern replacement for TinyIce and Icecast, engineered to ingest live broadcast feeds from DJ software (Butt, Mixxx, OBS, VirtualDJ, Liquidsoap), broadcast live audio streams to thousands of web/media listeners, render 24-hour vector analytics, inspect real-time connected listener IPs, and provide a stateless LAN/WAN Remote Control companion client with role-based access control (RBAC).
graph TB
subgraph DJIngest["ποΈ Live Audio Ingest (DJs & Automation)"]
DJs["Butt / Mixxx / OBS / VirtualDJ / Sam Broadcaster"]
end
subgraph RTSASServer["π» RTSAS Master Server (:11154 & :8080)"]
IngestEngine["Audio Ingest Engine<br/>(SOURCE / PUT HTTP Protocol + Per-Mount Auth)"]
RingBuffer["Thread-Safe Audio Ring Buffers<br/>(Zero-Copy Circular Burst Buffers)"]
IcyEngine["Dynamic ICY Metadata Injector<br/>(StreamTitle='...' @ 8192 byte intervals)"]
ListenerDispatcher["Asynchronous Audio Dispatcher<br/>(HTTP/1.0 & HTTP/1.1 Web/Player Streaming)"]
IcecastApi["Icecast 2 Compatible API<br/>(/status-json.xsl, /admin/stats.xml, /stats)"]
LocalDashboard["WinForms Live Dashboard<br/>Vector GDI+ Charts & IP Inspector"]
RemoteApiServer["Embedded REST API Server (:8080)<br/>Token-Auth RBAC Remote Server"]
end
subgraph Listeners["π§ Web Players & Media Listeners"]
Nginx["π‘οΈ Nginx Reverse Proxy (Port 443 SSL)<br/>X-Forwarded-For & X-Real-IP Real IP Passing"]
WebPlayers["HTML5 Web Player / Browser Streams"]
MediaPlayers["VLC / Winamp / AIMP / Car Audio"]
end
subgraph RemoteClients["π» RTSAS Remote Clients"]
RemoteApp["RTSAS Remote Client App<br/>(Zero Local Storage)"]
end
DJs -->|SOURCE /mount HTTP/1.0| IngestEngine
IngestEngine --> RingBuffer
RingBuffer --> IcyEngine
IcyEngine --> ListenerDispatcher
ListenerDispatcher -->|proxy_pass :11154| Nginx
Nginx --> WebPlayers
Nginx --> MediaPlayers
RingBuffer --> IcecastApi
RingBuffer --> LocalDashboard
LocalDashboard --> RemoteApiServer
RemoteApiServer -->|HTTP REST JSON Auth| RemoteApp
- DJ Ingest Support: Native support for
SOURCE /mount HTTP/1.0andPUT /mount HTTP/1.1protocols from standard DJ software (Butt, Mixxx, VirtualDJ, OBS, Sam Broadcaster, Liquidsoap). - Per-Mount Password Authentication: Authenticate DJ feeds against individual mountpoint passwords or global master source passwords.
- Dynamic Audio Codec Support: Transmits MP3, AAC, AAC+, Ogg Vorbis, Opus, and FLAC streams without transcoding latency.
- Audio Burst Buffers (64 KB): Newly connected listeners immediately receive audio burst chunks to eliminate initial playback silence or buffering delay.
- Dynamic ICY Metadata Injection: Injects
StreamTitle='Artist - Song';metadata frames at negotiated intervals (icy-metaint = 8192) for classic media players (VLC, Winamp, AIMP, Car Stereos). - Icecast 2 API Compatibility: Implements standard
/status-json.xsl,/admin/stats.xml, and/statsendpoints for complete compatibility with web player widgets, radio directories, and automation scripts.
- True Real IP Extraction: Integrates seamlessly behind Nginx reverse proxies by parsing
X-Forwarded-ForandX-Real-IPheaders from trusted proxies (127.0.0.1). - Live Metrics: Inspect connected listener client IPs, connection duration, network/location, and player user-agent software.
- Admin Kick Capability: Disconnect abusive or ghost connections instantly.
- Smooth, anti-aliased GDI+ vector area charts for Concurrent Listeners, Data Transfer & Bandwidth (MB/GB), and Response Latency (Ping).
- Interactive crosshair hover tooltips and CSV log export.
- Manage and monitor your station from any machine on the network.
- Operates 100% statelessly in memory (zero local data cached on client machines).
- Granular Multi-User RBAC: Define permissions (
CanViewStatus,CanViewLogs,CanViewListenerIps,CanRefreshStreams,CanManageChannels,CanViewAuditLogs).
- All credentials stored in
config.jsonare encrypted at rest using Windows DPAPI (ProtectedData.Protect). - Master Admin passwords are cryptographically salted and hashed using PBKDF2 SHA-256 (100,000 iterations).
- Per-Channel Security Verification: Prompts for Master Admin authentication before editing or viewing channel passwords independently.
Deploy RTSAS behind Nginx with SSL (Port 443) and zero-buffering live streaming:
server {
listen 443 ssl;
server_name stream.radiotedu.com;
ssl_certificate "C:/Certbot/live/stream.radiotedu.com/fullchain.pem";
ssl_certificate_key "C:/Certbot/live/stream.radiotedu.com/privkey.pem";
# 1. Live Radio Streams & DJ Ingest (RTSAS Server :11154)
location ~ ^/(lofi|cazz|classic|ai|radio|etkinlik|energize|rock|en|fr)(-(low|normal|high|flac|aac|320k))?(\.(mp3|ogg|flac|aac|wav))?$ {
proxy_pass http://127.0.0.1:11154;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Streaming Optimization
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Expect "";
client_max_body_size 0;
chunked_transfer_encoding on;
proxy_cache off;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
# 2. Icecast 2 Compatible Stats Endpoint
location ~ ^/(status-json\.xsl|stats|stats\.xml|status\.xsl)$ {
proxy_pass http://127.0.0.1:11154;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}
# 3. RTSAS Remote Control REST API
location /rtsas-api/ {
proxy_pass http://127.0.0.1:8080/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}
}- Download
RTSAS-Setup-Installer.exefrom GitHub Releases. - Run the installer wizard:
- Configure Server Port (default:
11154). - Enter your Master Admin Password and Default Stream Password.
- Click
+ Add Mountto configure your initial radio mounts (e.g./radio,/lofi,/rock,/cazz). - Select desktop shortcut preferences and click Install.
- Configure Server Port (default:
# Clone the repository
git clone https://github.com/radiotedu/rtsas.git
cd rtsas
# Run test suite (31 tests passed)
dotnet test IcecastStreamMonitor.slnx
# Run RTSAS Server & Dashboard
dotnet run --project IcecastStreamMonitor/IcecastStreamMonitor.csproj
# Run RTSAS Remote Client App
dotnet run --project IcecastStreamMonitor.RemoteControl/IcecastStreamMonitor.RemoteControl.csproj| Shortcut | Action |
|---|---|
Ctrl + N |
Add New Channel / Mountpoint |
Ctrl + E / Enter |
Edit Selected Channel (Prompts Admin Auth) |
Delete |
Remove Selected Channel |
Ctrl + D |
Duplicate Selected Channel |
Ctrl + T / Space |
Toggle Active / Disabled |
Ctrl + G |
Open 24-Hour Analytics & Charts Dialog |
Ctrl + L |
Open Connected Listener IPs Popup |
F5 |
Refresh All Streams Immediately |
Ctrl + , |
Open Global Settings & Tray Preferences |
rtsas/
βββ assets/branding/ # Official RadioTEDU, RTAI, and RTSAS Branding Logos
βββ IcecastStreamMonitor/ # Core RTSAS Server & Station Application
β βββ Controls/ # GDI+ Vector Historical Chart Control
β βββ Forms/ # Main Dashboard, Channel Edit, Analytics, Listeners, Remote Users Dialogs
β βββ Models/ # AppSettings, StreamChannel, Listener, AuditLog, RemoteUser
β βββ Services/ # Streaming Engine (AudioStreamServer, MountPointStream, IcyMetadataInjector), Monitor, History, Audit, DPAPI Security, RemoteApiService
βββ IcecastStreamMonitor.RemoteControl/# Zero-Storage Stateless LAN/WAN Companion Client App
β βββ Controls/ # Remote Vector Charts Control
β βββ Forms/ # Remote Login, Remote Dashboard, Analytics, Listeners Dialogs
β βββ Models/ # Remote Models & RBAC Permissions
β βββ Services/ # RemoteApiClient (REST API Client)
βββ IcecastStreamMonitor.Installer/ # Standalone Setup Installer Wizard
βββ IcecastStreamMonitor.Tests/ # xUnit Automated Unit & Integration Tests (31 Passed)
βββ .github/workflows/ # GitHub Actions CI/CD Release Pipeline
βββ ARCHITECTURE.md # Comprehensive Technical Architecture & Design Document
βββ CONTRIBUTING.md # Contribution Guidelines & Code Standards
βββ SECURITY.md # Security Disclosure Policy & Cryptographic Specifications
βββ LICENSE # MIT License
βββ README.md # Project Documentation
RTSAS uses the RadioTEDU broadcast-signal mark to identify it as part of the same open-source radio and AI tooling family.
Licensed under the MIT License.


