RSPlayer is open-source music player designed specifically for headless computing environments. It shines on devices like the Raspberry Pi and other Linux-powered Single Board Computers (SBCs).
Operating as a system service, RSPlayer offers a web-based user interface, making it a perfect fit for devices without dedicated monitors or input peripherals. The UI is meticulously designed to be responsive and intuitive, delivering a seamless user experience across mobile devices, tablets, and PCs.
Under the hood, RSPlayer harnesses the power of the Symphonia and Cpal crates. These allow RSPlayer to handle audio decoding and playback efficiently, leveraging Rust's native capabilities for high-performance audio playback.
For DIY enthusiasts seeking a customizable, high-performance music player for their projects, RSPlayer is the go-to choice. Its lightweight design and efficient resource usage make it ideal for transforming your Raspberry Pi or other SBCs into a dedicated music station.
Online demo -> https://rsplayer.dlj.freemyip.com/
- Low Latency Output: Direct output to ALSA or PipeWire minimizes latency.
- Local Browser Playback: Stream audio directly to your web browser for local playback.
- Adjustable Playback Thread Priority: Customize the priority of the playback thread up to a real-time rating of 99 via the settings page.
- Dedicated CPU Core for Playback: By default, the playback thread is pinned to a single CPU core for optimized performance.
- Web UI Remote Control: Manage your playback remotely with an intuitive web interface.
- Flexible Volume Control: Control the volume using software (alsa mixer) or hardware control (Dac chip instuctions via GPIO).
- Written in Rust: Enjoy the benefits of minimal dependencies and high performance, thanks to the Rust native implementation.
- Comprehensive Music Library Management: Scan, search, and browse your music library and online radio stations with ease.
- Dynamic Playlists: Automaticaly create dynamic playlists for personalized listening experiences.
- DSP Integration: Advanced Digital Signal Processing with filters and presets.
- Web UI VU Meter: Real-time audio visualization in the web interface.
- Extended Hardware Control: Support for seek and power management via firmware interactions.
- Web UI Themes: Support for customizable themes and dark/light modes.
- Synchronized Lyrics: Real-time synchronized lyrics support via LRCLIB integration.
- Playlists by genre, year: Browse and create playlists based on genre or year.
- Loudness Normalization: Per-song EBU R128 loudness normalization, toggleable from the settings page. Analysis runs automatically in the background while playback is stopped and results are stored permanently.
- Library Statistics: Dedicated statistics page showing song/album/artist counts, total duration, play history, top genres, albums by decade, and loudness analysis progress.
- Expanded Audio Codec Support: Compatibility with a wider range of audio codecs.
- Intelligent Dynamic Playlists: Advanced dynamic playlists that adapt based on user likes or playback counts for a personalized listening experience.
- Windows Compatibility: Development of a Windows build to extend platform support.
- MacOS Compatibility: Development of a MacOS build to extend platform support.
- Remote file system management: Ability to mount and use remote file storage (nfs and samba) from UI.
- Music Recommendations: Suggest similar tracks or artists based on listening history or current playback.
- Generate missing album cover image: Auto-generate album art using album name.
- MPD protocol support: Compatibility with MPD clients.
- Subsonic protocol support: Compatibility with Subsonic clients.
- Multi-room playback: Synchronized playback across multiple devices.
- MPRIS D-Bus integration: Native Linux desktop media key and player integration.
- Community plugin framework: Extensible architecture for third-party plugins.
- Improve playlists management create/modify/delete items and playlists: Items can be added/removed to/from playlist from everywhere.
- Replace Bulma CSS with a modern, maintained alternative.
- Replace seed-rs with a newer, maintained framework.- Remove unnecessary
.unwrap()and.clone()calls. - Replace
warpwithaxumoractix. - Reduce code duplication in UI with generic functions and macros.
RSPlayer runs on Linux. The Deb, RPM, and Arch packages include a systemd service for automatic startup.
| Architecture | Rust Target | Binary | Deb | RPM | Arch | Docker |
|---|---|---|---|---|---|---|
| ARMv6 (Pi Zero/1) | arm-unknown-linux-gnueabihf |
Yes | Yes | Yes | Yes | - |
| ARMv7 (Pi 2-4) | armv7-unknown-linux-gnueabihf |
Yes | Yes | Yes | Yes | - |
| ARM64 (Pi 4 64-bit) | aarch64-unknown-linux-gnu |
Yes | Yes | Yes | Yes | - |
| x86_64 | x86_64-unknown-linux-gnu |
Yes | Yes | Yes | Yes | Yes |
| RISC-V 64 | riscv64gc-unknown-linux-gnu |
Yes | Yes | Yes | Yes | - |
To install RSPlayer, execute the following script (requires curl):
bash <(curl -s https://raw.githubusercontent.com/ljufa/rsplayer/master/install.sh)The installation script detects your Linux distribution (Debian/Ubuntu, Fedora/RHEL/CentOS, Arch/Manjaro) and architecture, then installs the appropriate package. It will install all necessary files, configure and start the systemd service.
To stop RSPlayer, run the following command:
sudo systemctl stop rsplayerTo start RSPlayer service again, run the following command:
sudo systemctl start rsplayerdocker run -p 8000:80 -v ${MUSIC_DIR}:/music -v rsplayer_data:/opt/rsplayer --device /dev/snd -it --rm ljufa/rsplayer:latestservices:
rsplayer:
image: ljufa/rsplayer:latest
devices:
- /dev/snd
ports:
- 8000:80
volumes:
- ${MUSIC_DIR}:/music:ro
- 'rsplayer_volume:/opt/rsplayer'
restart: unless-stopped
volumes:
rsplayer_volume:
driver: localOnce RSPlayer is installed, you can access the web user interface by navigating to http://localhost or the IP address of the machine on which it is installed.
For detailed configuration instructions, please refer to the documentation.
RSPlayer can be controlled from Home Assistant via the rsplayer_hacs_plugin.
Features include media player control (play, pause, stop, next/prev, volume) and real-time sync with rsplayer_firmware power state.
Install via HACS by adding https://github.com/ljufa/rsplayer_hacs_plugin as a custom repository.
For DIY enthusiasts, rsplayer offers the flexibility to integrate with custom hardware components.
- Hardware Designs: rsplayer_hardware
- Firmware: rsplayer_firmware
See the Hardware Integration documentation for more details.
If you would like to contribute to RSPlayer, please submit a pull request or open an issue on the GitHub repository.
For instructions on how to build the project from source, please see the Building from Source documentation.
RSPlayer is licensed under the MIT license. See the LICENSE file for more information.