Merge tag 'v0.1' into develop

Initial public preview of RadioPlayer: a lightweight Custom Google Cast Receiver + desktop sidecar for playing a LIVE radio stream.

Highlights

Custom CAF Receiver UI (HTML/CSS/JS) with branded artwork and playback status
Plays LIVE stream: https://live.radio1.si/Radio1MB (audio/mpeg, streamType: LIVE)
Controls: Play / Stop / Volume via Cast sender
Works on Nest Audio, Nest Hub/Hub Max, Chromecast, and speaker groups/stereo pairs (subject to sender capabilities)
Sidecar improvements: robust launch flow (handles NOT_ALLOWED by stopping existing sessions and retrying)
Included files

index.html
receiver.js (CAF Receiver initialization + LOAD interceptor for LIVE metadata)
styles.css (dark/purple UI)
logo.svg
index.js (launch retry + metadata fixes)
Important notes

Receiver must be hosted over HTTPS for Cast
Use Default Media Receiver for local testing; register a Custom Receiver App ID for production
Sidecar uses castv2-client (not official Google sender SDK) — group behavior may vary
No Node.js on receiver; no persistent storage guaranteed
How to test (quick)

Serve the receiver folder over HTTPS (e.g. mkcert + npx http-server).
From sender, LOAD:
contentId: https://live.radio1.si/Radio1MB
contentType: audio/mpeg
streamType: LIVE
Known limitations

UI is intentionally lightweight; some CSS effects may be limited on older devices
Sender-side group handling may need the official sender SDK for full reliability
If you want, I can draft the GitHub release body or a short changelog entry formatted for the Releases page.
This commit is contained in:
2025-12-31 08:57:51 +01:00

View File

@@ -1,4 +1,4 @@
# RadioCast # RadioPlayer
A lightweight, cross-platform radio player built with Tauri and Vanilla JavaScript. Features local playback and Google Cast integration. A lightweight, cross-platform radio player built with Tauri and Vanilla JavaScript. Features local playback and Google Cast integration.
@@ -13,10 +13,10 @@ Before you begin, ensure you have the following installed on your machine:
## Installation ## Installation
1. **Clone the repository**: 1. **Clone the repository**:
```bash ```bash
git clone <repository-url> git clone <repository-url>
cd RadioCast cd RadioPlayer
``` ```
2. **Install dependencies**: 2. **Install dependencies**:
```bash ```bash
@@ -106,3 +106,40 @@ To change the default window size, edit `src-tauri/tauri.conf.json`:
## License ## License
[Add License Information Here] [Add License Information Here]
## Release v0.1
Initial public preview (v0.1) — a minimal, working RadioPlayer experience:
- Custom CAF Receiver UI (HTML/CSS/JS) in `receiver/` with branded artwork and playback status.
- Plays LIVE stream: `https://live.radio1.si/Radio1MB` (contentType: `audio/mpeg`, streamType: `LIVE`).
- Desktop sidecar (`sidecar/index.js`) launches the Default Media Receiver and sends LOAD commands; launch flow now retries if the device reports `NOT_ALLOWED` by stopping existing sessions first.
Included receiver files:
- `receiver/index.html`
- `receiver/receiver.js` (CAF Receiver initialization + LOAD interceptor for LIVE metadata)
- `receiver/styles.css`
- `receiver/assets/logo.svg`
Quick testing notes
- The receiver must be served over HTTPS for Cast devices to load it. For quick local testing you can use `mkcert` + a static HTTPS server:
```bash
# create local certs
mkcert -install
mkcert localhost
# serve the receiver folder over HTTPS
npx http-server receiver -p 8443 -S -C localhost.pem -K localhost-key.pem
```
- Use the Default Media Receiver App ID while developing, or register a Custom Receiver App in the Cast Developer Console and point its URL to your hosted `index.html` for production.
Sidecar / troubleshoot
- If a Cast launch fails with `NOT_ALLOWED`, the sidecar will now attempt to stop any existing sessions on the device and retry the launch (best-effort). Check sidecar logs for `Launch NOT_ALLOWED` and subsequent retry attempts.
- Note: the sidecar uses `castv2-client` (not the official Google sender SDK). Group/stereo behavior may vary across device types — for full sender capabilities consider adding an official sender implementation.