StreamStack implementation for parsing and/or injecting metadata with SHOUTcast/Icecast radio streams.
This module offers an interface for retrieving the raw audio data and
parsing the metadata from a SHOUTcast or Icecast broadcast. Two API's
are offered: a low-level StreamStack read and write interface (which
requires you to establish the connection to the
net.Stream yourself), and a
more convenient high-level
ReadStream interface (which
net.Stream connection, and uses the
Here's a basic example of just piping the clean audio data to stdout, while printing the HTTP response headers and metadata events to stderr:
var icecast = require'icecast-stack';var url = ''; // URL to a known Icecast streamvar stream = icecastcreateReadStreamurl;// Fired when the `net.Stream` has it's 'connect' event.streamon'connect'console.error"Radio Stream connected!";;// Fired after the HTTP response headers have been received.streamon'response'console.error"Radio Stream response!";console.errorresheaders;;// When a 'metadata' event happens, usually a new song is starting.streamon'metadata'var title = icecastparseMetadatametadataStreamTitle;console.errortitle;;// Proxy the raw audio stream to 'stdout', redirect to a file!streampipeprocessstdout;
Look in the
examples directory for code of some more complex use-cases.
The most important use case of this is for HTML5 web apps that listen to
radio streams; the
<audio> tag doesn't know how to deal with the extra
metadata and it is impossible to extract (on the client-side). But a
WebSocket connection could be used in conjunction with this module to provide
metadata events to a web browser, for instance.
Installation through npm is the most
straight-forward way to install the
$ npm install icecast-stack
Or just checking out this git repo works as well:
$ git clone git://github.com/TooTallNate/node-icecast-stack.git