Package Exports
- @fridgefm/radio-core
- @fridgefm/radio-core/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@fridgefm/radio-core) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Radio engine for NodeJS
Usage
Simple lightweight package to start your own
live
radio station 📻 Just drop yourmp3
files and broadcast them to the world 🌎Heavily inspired by Shoutcast and Icecast.
Setup
Installation
npm i @fridgefm/radio-core --save
Server
const { Station } = require('@fridgefm/radio-core');
const station = new Station();
station.addFolder('User/Music');
server.get('/stream', (req, res) => {
station.connectListener(req, res);
});
station.start();
Client
<audio
controls
type='audio/mp3'
src='/stream'
/>
Station constructor
Creating a station is as simple as
const myAwesomeStation = new Station({
verbose: false, // if true - enables verbose logging (for debugging purposes),
responseHeaders: { // in case you want custom response headers for your endpoint
'icy-genre': 'jazz'
}
})
Station methods
connectListener
connects real users to your station, this is the only method that should be exposed to listeners
response argument is required
station.connectListener(request, response, callback);
addFolder
adds track within a folder to the playlist
station.addFolder('User/Music');
start
starts broadcasting
station.start();
next
instantly switches track to the next one
station.next();
togglePause
pauses the stream
station.togglePause(); // no argument, changes the pause state to the opposite
station.togglePause(true); // force pause, regardless of the previous state
station.togglePause(false);
getPlaylist
just returns you the entire playlist
station.getPlaylist();
reorderPlaylist
lets you manipulate the entire playlist via passed callback
const myShuffleMethod = (list) => list
// doubles the list (making it twice as long)
.concat(list)
// filters out the specific track
.filter(track => track.fsStats.name !== 'Artist - Track');
station.reorderPlaylist(myShuffleMethod);
There are also some built-in shuffle methods
const { SHUFFLE_METHODS } = require('@fridgefm/radio-core')
// This one randomly shuffles the playlist (keeping the length the same)
station.reorderPlaylist(SHUFFLE_METHODS.randomShuffle());
// This one moves the track on the 1st position and moves it to the 2nd position
station.reorderPlaylist(SHUFFLE_METHODS.rearrange({ from: 1, to: 2 }));
on
lets you make a subscription to station events (see below)
Station events
Station emits several events - they are available via
const { PUBLIC_EVENTS } = require('@fridgefm/radio-core')
NEXT_TRACK
event fires when track changes
useful for getting to know when exactly the track changed and what track that is
station.on(PUBLIC_EVENTS.NEXT_TRACK, (track) => {
const result = await track.getMetaAsync();
console.log(result)
})
START
Event fires on station start
station.on(PUBLIC_EVENTS.START, () => { console.log('Station started') });
RESTART
Event fires on station restart (when playlist is drained and new one is created)
it might be a nice time to shuffle your playlist for example
station.on(PUBLIC_EVENTS.RESTART, () => { /* do something*/ });
ERROR
Event fires when there is some error. You should
add this handler - otherwise any error will be treated as unhandled (causing process.exit
depending on Node version)
station.on(PUBLIC_EVENTS.ERROR, (e) => { handleError(e) });
or just go to examples
Development
npm run dev
or
npm run dev [path/to/your_mp3tracks]
# in this case it would take a little more time, just wait
Demo
Sandbox is available here on Codesandbox
Fully working demo is available on FridgeFM