/media-player-controller

Spawn media player app and control playback

Primary LanguageJavaScriptMIT LicenseMIT

media-player-controller

License npm Downloads Donate Donate

Spawn media player app and control playback. Also allows reading player state through socket or web connection.

Supported Media Players

Player Linux Win MacOS
mpv yes no ?
vlc yes yes ?

? - untested (feedback is welcome)

Player config

var player = new PlayerController({
  app: 'mpv',                         // Media player name to use (mpv/vlc)
  args: [],                           // Player command line args (array of strings)
  cwd: null,                          // Current working dir for media player spawn
  media: '/path/to/video.mp4',        // Media to load on player launch (required)
  ipcPath: '/tmp/media-ctl-socket',   // Path to socket connection file (mpv only)
  httpPort: 9280,                     // HTTP port for local communication (vlc only)
  httpPass: null,                     // HTTP login password (vlc only, defaults to player name)
  detached: false                     // Spawn player as detached process
});

Player functions

Each playback controlling function have an optional callback with eventual error.
They are executed asynchronously by default and can be used after playback-started event.

.launch()                    // Launch media player
.quit()                      // Stop media player process

.play()                      // Resume playback
.pause()                     // Pause playback
.cyclePause()                // Cycle play/pause
.load(mediaPath)             // Load new media file (without closing player)
.seek(position)              // Seek to position (value in seconds)
.setVolume(value)            // Adjust player volume (value 0-1)
.setSpeed(value)             // Adjust playback speed (normal: 1.0)
.setRepeat(isEnabled)        // Repeat playback (true or false)
.cycleVideo()                // Switch active video track
.cycleAudio()                // Switch active audio track
.cycleSubs()                 // Switch active subtitle track
.addSubs(subsPath)           // Add subtitles to currently playing video
.setFullscreen(isEnabled)    // Enable or disable fullscreen (true or false)
.cycleFullscreen()           // Toggle fullscreen on/off
.keepOpen(isEnabled)         // Keep player open after playback (true or false)

.command([args])             // Custom command for IPC/HTTP (array of args)

Please note that some commands are not yet implemented for every player (most of them are). If a command is not available for currently used player, callback will return error with a message saying so.

Available events

.on('app-launch')            // Emited on media player app launch
.on('playback-started')      // Playback started and player can now be controlled
.on('playback', data)        // Data object with current playback event
.on('app-exit', code)        // Exit code emited on media player app close

Usage Example

const PlayerController = require('media-player-controller');

var player = new PlayerController({
  app: 'mpv',
  args: ['--fullscreen'],
  media: 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4'
});

player.on('playback', console.log);

player.on('playback-started', () => {
  console.log('Playback started. Player can now be controlled');
});

player.on('app-exit', (code) => {
  console.log(`Media player closed. Exit code: ${code}`);
});

player.launch(err => {
  if(err) return console.error(err.message);
  console.log('Media player launched');
});

Donation

If you like my work please support it by buying me a cup of coffee :-)

PayPal