Skip to content

Instantly share code, notes, and snippets.

@talcual
Forked from fracasula/getMp3StreamTitle.php
Created August 15, 2017 05:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save talcual/dd5f8aae2f63687c133206646f29e608 to your computer and use it in GitHub Desktop.
Save talcual/dd5f8aae2f63687c133206646f29e608 to your computer and use it in GitHub Desktop.
How to get the MP3 metadata (StreamTitle) from a streaming URL
<?php
/**
* Please be aware. This gist requires at least PHP 5.4 to run correctly.
* Otherwise consider downgrading the $opts array code to the classic "array" syntax.
*/
function getMp3StreamTitle($streamingUrl, $interval, $offset = 0, $headers = true)
{
$needle = 'StreamTitle=';
$ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36';
$opts = [
'http' => [
'method' => 'GET',
'header' => 'Icy-MetaData: 1',
'user_agent' => $ua
]
];
if (($headers = get_headers($streamingUrl)))
foreach ($headers as $h)
if (strpos(strtolower($h), 'icy-metaint') !== false && ($interval = explode(':', $h)[1]))
break;
$context = stream_context_create($opts);
if ($stream = fopen($streamingUrl, 'r', false, $context))
{
$buffer = stream_get_contents($stream, $interval, $offset);
fclose($stream);
if (strpos($buffer, $needle) !== false)
{
$title = explode($needle, $buffer)[1];
return substr($title, 1, strpos($title, ';') - 2);
}
else
return getMp3StreamTitle($streamingUrl, $interval, $offset + $interval, false);
}
else
throw new Exception("Unable to open stream [{$streamingUrl}]");
}
var_dump(getMp3StreamTitle('http://str30.creacast.com/r101_thema6', 19200));
echo "\n\n";
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment