123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- <?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}]");
- }
- $current_title = getMp3StreamTitle('http://randio.it:8000/randio.mp3', 19200);
- echo $current_title
- ?>
|