Skip to content
An UPnP/DLNA MediaRenderer client
Branch: master
Clone or download
Latest commit 727d543 Jun 17, 2016
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore first commit Oct 21, 2014
LICENSE first commit Oct 21, 2014 added getPosition and getDuration Apr 19, 2015
index.js Add method : getVolume setVolume Jun 15, 2016
package.json 1.2.4 Jun 17, 2016


An UPnP/DLNA MediaRenderer client

This module allows you to control an UPnP/DLNA MediaRenderer directly (usually your TV set). It implements load, play, pause, stop and seek commands.

Events coming from the MediaRenderer (ie. fired from the TV remote) such as playing, paused, stopped can be listened to.

External subtitles are supported through DIDL-Lite metadata, but be aware that some MediaRenderers require the HTTP server serving the media file to return specific headers as illustrated in this gist. Also, some MediaRenderers don't support external subtitles at all.


$ npm install upnp-mediarenderer-client


var MediaRendererClient = require('upnp-mediarenderer-client');

// Instanciate a client with a device description URL (discovered by SSDP)
var client = new MediaRendererClient('');

// Load a stream with subtitles and play it immediately
var options = { 
  autoplay: true,
  contentType: 'video/avi',
  metadata: {
    title: 'Some Movie Title',
    creator: 'John Doe',
    type: 'video', // can be 'video', 'audio' or 'image'
    subtitlesUrl: ''

client.load('', options, function(err, result) {
  if(err) throw err;
  console.log('playing ...');

// Pause the current playing stream

// Unpause;

// Stop

// Seek to 10 minutes * 60);

client.on('status', function(status) {
  // Reports the full state of the AVTransport service the first time it fires,
  // then reports diffs. Can be used to maintain a reliable copy of the
  // service internal state.

client.on('loading', function() {

client.on('playing', function() {

  client.getPosition(function(err, position) {
    console.log(position); // Current position in seconds

  client.getDuration(function(err, duration) {
    console.log(duration); // Media duration in seconds

client.on('paused', function() {

client.on('stopped', function() {

client.on('speedChanged', function(speed) {
  // Fired when the user rewinds of fast-forwards the media from the remote
  console.log('speedChanged', speed);
You can’t perform that action at this time.