[
"method" => "GET",
"header" => "Icy-MetaData:1\r\n"
]
];
// Crear el contexto de flujo
$context = stream_context_create($options);
// Intentar abrir el stream
$fp = @fopen($streamUrl, 'r', false, $context);
if (!$fp) {
return ['error' => 'No se pudo conectar al stream'];
}
// Obtener las cabeceras para encontrar el intervalo de metadatos
$metaInt = 0;
$headers = stream_get_meta_data($fp);
foreach ($headers['wrapper_data'] as $header) {
if (stripos($header, 'icy-metaint') !== false) {
$parts = explode(':', $header);
if (count($parts) == 2) {
$metaInt = intval(trim($parts[1]));
}
break;
}
}
if ($metaInt == 0) {
fclose($fp);
return ['error' => 'No se encontraron metadatos ICY'];
}
// Leer el intervalo de datos de audio
$buffer = fread($fp, $metaInt);
// Leer el bloque de metadatos
$metaLength = ord(fread($fp, 1)) * 16;
$metadata = '';
if ($metaLength > 0) {
$metadata = fread($fp, $metaLength);
$metadata = rtrim($metadata, "\0"); // Limpiar la cadena de metadatos
// Extraer el t铆tulo de la canci贸n
preg_match("/StreamTitle='([^']*)';/", $metadata, $matches);
$streamTitle = isset($matches[1]) ? $matches[1] : 'Desconocido';
} else {
$streamTitle = 'Desconocido';
}
fclose($fp);
// Devolver los metadatos junto con la imagen
return [
'title' => $streamTitle,
'image' => $imageUrl
];
}
// Obtener los metadatos
$metadata = getStreamMetadata();
?>
Reproductor de Radio