Giter Site home page Giter Site logo

mplayer's Introduction

Description

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.

Installation

npm install mplayer

Usage

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 mplayer stdout, stderr streams directly to console, along with everything written to stdin 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.

Methods

  • 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

Events

  • 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
}

Example

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);

Changelog

2.1.0

2.0.1

2.0.0

  • Change the open method to openFile and openPlaylist
  • Add verbose and debug constructor options

1.0.0

  • Emit play/pause events

0.0.3, 0.0.4

  • Remove stdout console logs

0.0.2

  • Proxy events to the object exported from module

TODO

  • Methods chaining
  • Throttle time event down to once per second
  • Defer methods resolving after actual player action

mplayer's People

Contributors

codeheroics avatar efernandesng avatar elgerlambert avatar fgather avatar j-holub avatar noodny avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

mplayer's Issues

Timechange on Raspberry pi

ON raspberry pi 2, jessie version event Time is not fired because "A:" time change is sent to SDTERR instead of STDOUT so changing code like below, makes it better :)

onError: function(error) {
        if(this.options.debug) {
            console.log('stderr: ' + error);
        }

        data = error.toString();

        if(data.indexOf('A:') > -1) {
            var timeStart, timeEnd, time;

            if(data.indexOf(' V:') !== -1) {
                timeStart = data.indexOf(' V:') + 3;
                timeEnd = data.indexOf(' A-V:');
            } else {
                timeStart = data.indexOf('A:') + 2;
                timeEnd = data.indexOf(' (');
            }

            time = data.substring(timeStart, timeEnd).trim();

            this.emit('timechange', time)
        }
    }

ENV:
RPI 2, Jessie
MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team

Video volume is not working

@noodny
when trying to play video using mplayer volume is not working. Even I am not able to mute or unmute it. Video just completes without audio. I am working on ubuntu environment.

player.openFile('/home/test/story.mp4', {'volume':50, 'mute': false});

Error volumen control

player.openFile("sample.wav",{volume:0});

I was looking in player.status with a console.log and output is volume is 0. But still plays at full volume.

Next / Previous Track

Any method for Previous track or Next track? Im wanting to go back to a previous track.

Thanks

Stuttering playback when accessing files from NAS remote share

I can play an mp3 but it suffers from "stuttering". The source is on a NAS box and I think that the access is not perfectly continuous. However if I play the same track using the html audio tag playback is fine.

Is there a buffering issue with mplayer?

I note that in the player.js file there is section:

    instance.on('exit', function() {
        if(Date.now() - startTime < 3000) {
            // Process is erroring too close to start up, abort.
            process.exit(1);
        }

This seems to indicate some timing issues, but with an exit.

I also noted from elsewhere that using mplayer in -slave mode might need some cache: mplayer -cache 1024 for instance.

No idea where to put that to test it though?

In my experiments I noted that directly playing mplayer in slave mode from acommand line will ony play a little bit of a track and then repeat in a loop until it gets some input such as a CR (enter/return) or other command. Of course I shouldn't really use the keyboard in slave mode, but hey just experimenting.

I don't see anywhere where this might be being generated or if it is really needed if stdin is being set up properly, but the effect is certainly what I seem to be getting.

I could be way off, but any thoughts or pointers would be welcome.

No README

How about a short readme with example usage?

complete example?

Can't for the life of me get this working. Do you have a drop-in example to start from?

Yes, I have mPlayer installed and works fine, tested both clicking media and in the terminal.

Thanks..

openURL

is there a way, to open a Url ?
only with the link which is written in the .pls file

*Edit: I'm sorry, i just realized that a url of a radio-stream is a file
So player.openFile('...') worked for me

Stop command sometime fail

Hello, it appears that sometime (rather often) the stop command fail.

COMMAND: stop []
stdout: A: 1.5 (01.5) of 0.0 (unknown) 9.3% 3%
stdout: A: 1.5 (01.5) of 0.0 (unknown) 9.2% 3%
stdout: A: 1.5 (01.5) of 0.0 (unknown) 9.2% 3%

Here is the failed command. The stream continue.

COMMAND: stop []
stdout: A: 0.5 (00.4) of 0.0 (unknown) 0.0% 2%
stdout:
EOF code: 4

Here is a success stop.

I'm testing with this stream http://cdn.nrjaudio.fm/audio1/fr/40101/aac_576.mp3?origine=fluxradios

Also it seems to works fine with mp3 however.

Changing the volume and playing a track seems to emit two track stopped events when tracks ends!

Hi,

I remotely set off a track to play and the program works fine. When the track ends it picks up the track stopped event and return a signal to the remote caller (via a websocket).

However, if I change the volume and play a track (order doesn't matter) then I get two track stopped events being emitted (which causes havoc at the remote caller end).

I've tried following the code at player.js and index.js but I'm struggling to understand how the code gets any signal from mplayer itself. There is a lot of code in the handlers section, but I can't follow it (too inexperienced I'm afraid.) my feeling is that the intialisation might be setting up one too many events (in an array).

Sorry I am not explaining myself very well. I can post my test code if you wish.

Added: e.g. I set the volume (doesn't do anything), openFile(a short excerpt mp3) then set volume. Then I wait 5 seconds (the firts track has finished), start a new track, set the volume. I get

Received: volume 30
Received: play test2.mp3
Received: volume 30
Track ended
Track ended
Track ended
Received: play test3.mp3
Received: volume 30
Track ended
Track ended

To my way of thinking there should only be one stop event after thetrack stops! Without the volume being set it's fine.I get just one stop event after the track ends. If I don't set a track playing and just set the volume (three times say) no stop event. it happens only when I start a track and change the volume.

Feature request: error event

Hi @noodny,

We had an issue whereby playback failed due to a corrupt file. It would be great if an error event was emitted or some sort of hook was provided so that we can skip to the next track - as far as I can tell there's no way to catch this scenario currently.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.