API Pública de Reproductor
Integra tus streams en cualquier sitio web o aplicación. Una sola llamada JSON devuelve metadatos en tiempo real, URL de emisión y carátula del álbum. Sin autenticación. CORS abierto.
/api/player/{custom_id}
Devuelve todos los datos del reproductor en tiempo real con URLs absolutas listas para usar en cualquier dominio.
Petición
GET https://streampanel.online/api/player/mi-radio
Respuesta JSON — stream en marcha
{
"ok": true,
"is_live": true,
"stream_name": "Radio Ejemplo",
"custom_id": "mi-radio",
"stream_url": "https://streampanel.online:8001/mi-radio",
"title": "Yellow",
"artist": "Coldplay",
"listeners": 47,
"cover_url": "https://streampanel.online/img/album_art/Coldplay%20-%20Yellow.jpg",
"updated_at": 1741789200
}
Respuesta JSON — stream parado
{
"ok": true,
"is_live": false,
"stream_name": "Radio Ejemplo",
"custom_id": "mi-radio",
"stream_url": "https://streampanel.online:8001/mi-radio",
"title": "",
"artist": "",
"listeners": 0,
"cover_url": "https://streampanel.online/img/default-album.jpg",
"updated_at": 1741789200
}
Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
ok | boolean | Siempre true si el stream existe |
is_live | boolean | true si el stream está emitiendo en este momento, false si está parado. Cuando es false, cover_url devuelve la imagen predeterminada y title/artist están vacíos |
stream_name | string | Nombre del stream configurado en StreamPanel |
stream_url | string | URL de emisión de audio lista para poner en <audio src>. Incluye host, puerto y punto de montaje. Compatible con SHOUTcast (SSL nativo) e Icecast-KH (SSL nativo). |
title | string | Título de la canción en reproducción. Vacío si is_live es false |
artist | string | Artista de la canción en reproducción. Vacío si is_live es false |
listeners | integer | Número de oyentes conectados en este momento |
cover_url | string | URL absoluta de la carátula del álbum. Cuando el stream está parado devuelve la imagen predeterminada. Listo para <img src> |
updated_at | integer | Unix timestamp de la respuesta |
/api/cover/{custom_id}
Redirect 302 a la URL de la carátula actual. Úsalo directamente en un <img> para mostrar siempre la carátula en tiempo real sin JS. Si el stream está parado redirige a la imagen predeterminada.
Uso en HTML
<!-- La imagen se actualiza automáticamente sin JavaScript --> <img src="https://streampanel.online/api/cover/mi-radio" alt="Carátula" style="width:200px;height:200px;object-fit:cover;border-radius:8px">
Parámetro ?song= — Integración con players externos (pro.radio, etc.)
Algunos players externos como pro.radio añaden automáticamente ?song=artista-titulo-slug
a la URL de metadatos para solicitar la carátula correspondiente. Este endpoint detecta ese parámetro
y devuelve un redirect 302 a la imagen correcta (buscando en caché local → Last.fm → iTunes).
No es necesario configurar ningún endpoint separado para la carátula en estos players.
# URL que pro.radio construye automáticamente: GET https://streampanel.online/api/player/mi-radio?song=coldplay-yellow # Respuesta: HTTP 302 → /img/album_art/Coldplay%20-%20Yellow.jpg
ℹ️ En pro.radio basta con poner la misma URL del endpoint JSON en el campo «Now Playing URL». El sistema gestiona automáticamente tanto la respuesta JSON como las peticiones de carátula con ?song=.
Ejemplos de integración
La forma más sencilla. Añade un div con data-sp-stream y carga el script.
El reproductor completo se genera automáticamente.
<!-- Pon este div donde quieras el reproductor --> <div data-sp-stream="mi-radio"></div> <!-- Carga el script una vez al final del body --> <script src="https://streampanel.online/js/sp-player.js"></script>
Atributos opcionales
| Atributo | Valor | Descripción |
|---|---|---|
data-sp-color | #2563eb | Color de acento del reproductor opcional |
data-sp-theme | light / dark | Tema visual opcional |
data-sp-autoplay | true | Reproducir automáticamente al cargar opcional |
data-sp-interval | 10000 | Intervalo de actualización en ms opcional |
Llama a la API directamente y usa los datos como quieras en tu propio reproductor. Comprueba is_live para saber si el stream está emitiendo.
async function updatePlayer() { const res = await fetch('https://streampanel.online/api/player/mi-radio'); const data = await res.json(); if (!data.is_live) { document.getElementById('song-title').textContent = 'Stream offline'; document.getElementById('cover').src = data.cover_url; // imagen predeterminada return; } document.getElementById('cover').src = data.cover_url; document.getElementById('song-title').textContent = data.artist + ' — ' + data.title; document.getElementById('listeners').textContent = data.listeners + ' oyentes'; document.querySelector('audio').src = data.stream_url; } updatePlayer(); setInterval(updatePlayer, 10000); // actualizar cada 10 segundos
Tienes tu propio HTML y solo quieres que el script actualice los elementos específicos.
Añade data-sp-bind al contenedor y marca cada elemento con su atributo.
<div data-sp-stream="mi-radio" data-sp-bind> <img data-sp-cover src="/default.jpg" style="width:80px;border-radius:6px"> <span data-sp-title></span> <span data-sp-artist></span> <span data-sp-listeners></span> <audio data-sp-audio controls></audio> </div> <script src="https://streampanel.online/js/sp-player.js"></script>
Recibe cada actualización en tu propia función y haz lo que necesites con los datos.
<div data-sp-stream="mi-radio" data-sp-on-update="onStreamUpdate"></div> <script src="https://streampanel.online/js/sp-player.js"></script> <script> function onStreamUpdate(data) { console.log('Canción:', data.artist, '-', data.title); console.log('Carátula:', data.cover_url); console.log('Oyentes:', data.listeners); // Tus propias acciones aquí... } </script>
Demo en vivo
Reproductor generado automáticamente usando el script. Cambia el stream con el selector de arriba.