This module is a wrapper for mplayer started in slave mode (see documentation). It ensures that an instance of mplayer is always running in background ready for playback.
You need mplayer installed on your system for it to work properly!
See the Changelog section for all breaking changes which may cause issues if you've updated the module.
npm install mplayer
Start off with instantiating the client
var MPlayer = require('mplayer');
var player = new MPlayer();
You may want to pass in an object with options allowing for better debugging
- verbose (Boolean):
true
,false
- if set to true all player events will be logged to console - debug (Boolean):
true
,false
- log mplayerstdout
,stderr
streams directly to console, along with everything written tostdin
stream
or passing additional options to the spawned mplayer instance
- args (String|Array): - list of additional parameters which will be passed to the command line mplayer instance (see mplayer manual for more details)
After this you will have access to all player methods and events. The player instance uses node's native EventEmitter for events management.
- setOptions(< Object > options) - loops through the options object and uses mplayer
set_property
function to set them for the currently running instance
options
is an object with one or more key value pairs, determining which parameters should be set, see the last section
of slave mode documentation for the list of possible parameters and values
Example:
player.setOptions({
cache: 128,
cacheMin: 1
});
- openFile(< String > file, [ Object ] options)
file
is the location of the file you want to open either in your filesystem or on the web
options
is an object passed to the setOptions method right before opening the file
Example:
player.openFile('/Users/noodny/Downloads/sample-video.avi');
- openPlaylist(< String > file, [ Object ] options)
file
is the location of the playlist file you want to open either in your filesystem or on the web
options
is an object passed to the setOptions method right before opening the file
Example:
player.openPlaylist('http://www.radio.com/radio-stream.pls', {
cache: 128,
cacheMin: 1
});
- play( )
- pause( )
- stop( )
- next( )
- previous( )
- seek(< Number > seconds) - seek to a specific second
- seekPercent(< Number > percent ) - seek to a percent position of a file
- volume(< Number > percent ) - set volume to a given percentage
- mute( ) - toggle mute
- fullscreen( ) - toggle fullscreen
- hideSubtitles( )
- showSubtitles( )
- cycleSubtitles( ) - change to the next subtitles file in the file directory
- speedUpSubtitles( )
- slowDownSubtitles( )
- adjustSubtitles(< Number > seconds) - adjust the subtitles timing by +/- seconds
- adjustAudio(< Number > seconds) - adjust the audio timing by +/- seconds
- ready - triggered only once when mplayer process is started
- time < Number > seconds - triggered every ~30ms
- start - triggered once an asset playback has started
- play - triggered when playback is resumed
- pause - triggered when playback is paused
- stop - < Number > EOF code - triggered when an asset has finished playing
- status < Object > status - triggered whenever player status changes
The
status
object has the following properties:
{
muted: Boolean,
playing: Boolean,
volume: Number, // percent
duration: Number, // seconds
fullscreen: Boolean,
subtitles: Boolean,
filename: String,
title: String // currently playing stream title - valid only for radio streams
}
The following example will set up a player instance, open a radio stream and set it's volume to 50% after 1 second, while logging the player status event output to the console:
var MPlayer = require('mplayer');
var player = new MPlayer();
player.on('start', console.log.bind(this, 'playback started'));
player.on('status', console.log);
player.openPlaylist('http://www.miastomuzyki.pl/n/rmfclassic.pls', {
cache: 128,
cacheMin: 1
});
setTimeout(player.volume.bind(player, 50), 1000);
- Allow for passing additional arguments to the spawned mplayer instance Thanks @efernandesng
- Add documentation
- Add quotes to the filename Thanks @hugo-agbonon
- Change the
open
method toopenFile
andopenPlaylist
- Add
verbose
anddebug
constructor options
- Emit play/pause events
- Remove stdout console logs
- Proxy events to the object exported from module
- Methods chaining
- Throttle time event down to once per second
- Defer methods resolving after actual player action