70940420ff9ce1378fccce10549334a040b2fca0
relay.rs envía al relay una huella SHA-256 del client_token al registrar el ID de 8 dígitos, en vez del token en texto plano. Permite que el relay (gradio-relay, cambio complementario ya desplegado en relay.gradio.net) rechace un re-registro de un ID activo cuando la huella no coincide, cerrando la ventana para que un tercero que conozca el ID intercepte el token de un cliente remoto suplantando a la estación real.
G Radio Player
Reproductor de radio profesional — GTK4 + GStreamer + Rust
Binarios
| Binario | Descripción |
|---|---|
radio-player |
Interfaz principal GTK4 |
comercial-scheduler |
Carga comerciales y eventos al segundo :58 de cada minuto |
playlist-refill |
Mantiene la cola de música con 14 temas leyendo de la parrilla |
Compilar
./build.sh
Ejecutar
./run.sh # inicia los tres procesos juntos
O por separado (para depuración):
RUST_LOG=info ./target/release/radio-player
./target/release/comercial-scheduler
./target/release/playlist-refill
Estructura de archivos
$HOME/.gradio/data/
├── tmp/
│ ├── playlist4 # cola de música (ruta TAB MM:SS.mmm)
│ ├── comercialeslist4 # cola de comerciales
│ ├── eventos-esperalist # eventos post-comerciales
│ └── eventoslist # eventos emergentes
├── comerciales/
│ └── {HH}/{MM}.com # pautas por hora:minuto
│ formato: ruta|dias|YYYYMMDD_ini|YYYYMMDD_fin
│ dias: "12345" = Lun-Vie, "67" = Sáb-Dom
├── eventos-espera/
│ └── {HH}/{MM}.com # mismo formato
├── eventos/
│ └── {HH}/{MM}.com # mismo formato
├── parrilla/
│ └── {DOW}/{HH}-{HH+1}.mus # archivos de música por franja
│ formato: ruta/al/archivo.mp3 o /ruta/carpeta/*
└── reporte/
├── GR6-parrilla-YYYY-MM-DD.txt
├── GR6-comercial-YYYY-MM-DD.txt
└── GR6-evento-YYYY-MM-DD.txt
$HOME/.gradio/data/mix # segundos de crossfade
$HOME/.gradio/data/tmp/upvol # volumen normal 0-100
$HOME/.gradio/data/tmp/downvol # volumen duck 0-100
$HOME/.gradio/data/panel/Time/ # HRS{HH}.mp3, HRS{HH}_O.mp3, MIN{MM}.mp3
$HOME/G Radio/inicio-espacio-pub/ # jingles inicio tanda
$HOME/G Radio/fin-espacio-pub/ # jingles fin tanda
Formato de pautas (.com)
/ruta/al/audio.mp3|12345|20250101|20251231
/otra/pista.wav|67|20250601|20250630
- Campo 1: ruta del archivo
- Campo 2: máscara de días (1=Lun … 7=Dom)
- Campo 3: fecha inicio YYYYMMDD
- Campo 4: fecha fin YYYYMMDD
Formato de parrilla (.mus)
/ruta/carpeta/* # elige aleatoriamente de la carpeta
/ruta/exacta/tema.mp3 # archivo concreto
Dependencias del sistema
- GTK4 ≥ 4.6
- GStreamer ≥ 1.20 con plugins: gst-plugins-base, gst-plugins-good, gst-plugins-ugly
- ffprobe (paquete ffmpeg) — usado por playlist-refill para leer duraciones
Variables de entorno
GRADIO_RELAY_URL— URL del servidor de relay WebSocket para acceso remoto vía internet (defaultwss://relay.example.com/ws). Para autohospedaje, definirla antes de lanzarradio-player.
Licencia
Distribuido bajo los términos de la GNU General Public License v3.0 o posterior
(GPL-3.0-or-later). Ver el archivo LICENSE.
Este programa enlaza dinámicamente con GTK4 y GStreamer, ambos publicados bajo LGPL-2.1+ y compatibles con GPL-3.0.
Languages
Rust
94.2%
Shell
5%
CSS
0.8%