wpradio PHP Stream Proxy
Secure PHP-based stream proxy for WP Radio WordPress plugin.
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/lukapaunovic/wp-radio-stream-proxy/archive/refs/heads/main.zipSecure PHP-based stream proxy for WP Radio WordPress plugin.
Built to reliably handle real-world radio streams including:
- Shoutcast / Icecast
- ICY metadata
- HTTP/0.9 legacy endpoints
- Broken or non-standard stream servers
This plugin replaces remote radio stream URLs with a local signed PHP proxy endpoint, improving compatibility, stability and security.
✨ Features
- PHP stream proxy (no external services)
- ICY metadata handling (requested upstream, stripped for browser clients)
- HTTP/0.9 support for legacy Shoutcast servers
- Works with HTML5
<audio>players - No hard-coded domain (auto-detects site URL)
- HMAC-signed stream URLs (prevents hotlinking)
- Content-Type passthrough from upstream
- Compatible with Cloudflare and reverse proxies
- No nginx or PHP-FPM special config required (recommended but not mandatory)
- 👉 Nginx & PHP-FPM configuration:
NGINX_PHP_FPM.md
🔌 Compatibility
This plugin is designed to work with:
- WP Radio WordPress plugin
(by SoftLab – https://softlabbd.com)
It hooks into the following filters:
wp_radio/stream_urlwp_radio_station_streamwp_radio_player_stream
⚠️ Important Disclaimer
This is a completely independent and original implementation.
- This project is NOT affiliated with SoftLab
- This project is NOT a fork
- This project is NOT based on any existing WP Radio proxy addon
- This project does NOT reuse code from:
- Radio Player Proxy
- SoftLab proxy addons
- Any commercial WP Radio extensions
All code in this repository was written from scratch.
Names like WP Radio are used only to describe compatibility, not ownership or endorsement.
🛡️ Why This Exists
Many radio streams in the wild:
- break when ICY metadata is exposed to browsers
- use HTTP/0.9 (curl fails without explicit support)
- close connections without proper headers
- fail behind HTTPS or Cloudflare
This proxy normalizes all of that without modifying the original stream.
🚀 Installation
- Copy the plugin file into: wp-content/mu-plugins/
or
wp-content/plugins/wp-radio-stream-proxy/
-
Make sure the directory exists: mkdir -p wp-content/mu-plugins
-
The plugin auto-loads (no activation needed if mu-plugin)
🔐 Security
Each stream URL is signed using HMAC:
- Station ID
- Original stream URL
- Secret key (defined in plugin)
Only valid, generated URLs can be used.
⚙️ How It Works
- WP Radio outputs a stream URL
- This plugin replaces it with a local proxy URL
- Client connects to your server
- Server connects to upstream radio stream
- ICY metadata is stripped
- Clean audio stream is sent to browser
🧪 Tested With
- Icecast MP3 / AAC streams
- Shoutcast v1 / v2
- Legacy HTTP/0.9 endpoints
- Chrome / Safari / Firefox
- Cloudflare proxied sites
📄 License
MIT License
Use at your own risk. No warranty.
👤 Author
Luka Paunovic
Independent developer
🤝 Contributions
Issues and pull requests welcome.
Keep changes focused and documented.