bytelus / nowplaying
A lightweight PHP adapter for viewing the current now playing data in Icecast and SHOUTcast 1/2. A part of the Radiolize software suite.
Fund package maintenance!
AzuraCast
Open Collective
Patreon
Requires
- php: >=7.4
- ext-json: *
- ext-libxml: *
- ext-simplexml: *
- ext-xml: *
- psr/http-client: *
- psr/http-factory: *
- psr/log: ^1.1
Requires (Dev)
- guzzlehttp/guzzle: ^7
- http-interop/http-factory-guzzle: ^1.0
- overtrue/phplint: ^1.1
- php-http/discovery: ^1.9
- phpstan/phpstan: ^0.11.1
- phpstan/phpstan-strict-rules: ^0.11.0
- roave/security-advisories: dev-master
This package is not auto-updated.
Last update: 2025-03-20 05:29:05 UTC
README
NowPlaying is a lightweight, modern, object-oriented PHP library that abstracts out the currently playing metadata from popular radio broadcast software into a single common return format.
Installing
NowPlaying is a Composer package that you can include in your project by running:
composer require bytelus/nowplaying
Compatibility
Now Playing data | Detailed client information | |
---|---|---|
Icecast (2.4+) | ✅ | ✅ |
SHOUTcast 2 | ✅ | ✅ |
SHOUTcast 1 | ✅ | ❌ |
Usage Example
<?php // Example PSR-17 and PSR-18 implementation from Guzzle 7 // Install those with: // composer require guzzlehttp/guzzle:^7 http-interop/http-factory-guzzle $adapterFactory = new \NowPlaying\Adapter\AdapterFactory( new \Http\Factory\Guzzle\UriFactory, new \Http\Factory\Guzzle\RequestFactory, new \GuzzleHttp\Client ); $adapter = $adapterFactory->getAdapter( \NowPlaying\Adapter\AdapterFactory::ADAPTER_SHOUTCAST2, 'http://my-station-url.example.com:8000', 'AdminPassword!' // Optional ); // The first argument to the functions is the mount point or // stream ID (SID), to pull one specific stream's information. $now_playing = $adapter->getNowPlaying('1'); $clients = $adapter->getClients('1');
Example "now playing" response (PHP objects represented in JSON):
{ "currentSong": { "text": "Joe Bagale - Until We Meet Again", "title": "Until We Meet Again", "artist": "Joe Bagale" }, "listeners": { "current": 0, "unique": 0, "total": 0 }, "meta": { "online": true, "bitrate": 128, "format": "audio/mpeg" }, "clients": [] }
Example "clients" response:
[ { "uid": 1, "ip": "127.0.0.1", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36", "connectedSeconds": 123 } ]