Skip to content
Native libshout bindings for node.js
Branch: master
Clone or download


Type Name Latest commit message Commit time
Failed to load latest commit information.
docs docs(*): Add mirror for libshout2 Apr 11, 2018
music chore(*): Add sample mp3 and ogg file Oct 24, 2018
.gitignore docs(readme): Add node version compability chart Sep 29, 2019
package-lock.json chore(release): 0.1.3 Jul 21, 2019
package.json chore(release): 0.1.3 Jul 21, 2019


Native libshout bindings for node.js.

Libshout allows applications to easily communicate and broadcast to an Icecast streaming media server. It handles the socket connections, metadata communication, and data streaming for the calling application, and lets developers focus on feature sets instead of implementation details.

More detail:

Original libshout docs: (a copy of this page can be also found at /docs/libshout2.html)

Node version compability

Since this project heavily depends on node-ffi project, there can be compability issues.

My tests for the current version (0.1.3):

node npm result
12.11.0 6.11.3 node-ffi does not support node 12 yet
11.15.0 6.7.0
10.16.0 6.9.0
9.11.1 5.6.0
8.11.4 5.6.0
6.14.1 3.10.10


You have to install libshout library before using nodeshout. If you work on OS X, you can install via homebrew.

brew install libshout

Then, install nodeshout via npm.

npm i nodeshout

Initalize nodeshout library, create a Shout instance and configure it.

// Initalize

// Create a shout instance
const shout = nodeshout.create();

// Configure it
shout.setFormat(1); // 0=ogg, 1=mp3
shout.setAudioInfo('bitrate', '192');
shout.setAudioInfo('samplerate', '44100');
shout.setAudioInfo('channels', '2');

Open the connection.;

If connection is successful, above function will return nodeshout.ErrorTypes.SUCCESS which is integer 0. After successful connection, you can send audio file chunks via shout.send method.

shout.send(buffer, bytesRead);

For the synchronization, there is 2 method provided. First one is shout.sync() method, this method blocks current thread. Second one is shout.delay() method, this method returns how many milliseconds you should wait to send next audio chunk.


// Create a metadata instance
const metadata = nodeshout.createMetadata();

// Set currently playing song.
metadata.add('song', 'Led Zeppelin - I can\'t quit you baby');

// Apply metadata to shout


Helper streams make all the things super-easy. You don't have to deal with reading and syncing stuff. They're avaliable >= 0.1.1.

Include helper stream classes.

const { FileReadStream, ShoutStream } = require('nodeshout');

and then pipe them together. That's all!

const fileStream = new FileReadStream('./some/music.mp3', 65536);
const shoutStream = fileStream.pipe(new ShoutStream(shout));

shoutStream.on('finish', () => {
    // Finished playing, you can create
    // another stream for next song


Check the /demos folder.

You can’t perform that action at this time.