Media Player Interfaces

From XMMS2
Jump to: navigation, search

Mpris.png

This page is an attempt at bringing together information about various works in progress to produce a common media player control interface. Note that in the context of this page, interface refers to interface in the sense of an API, not an interface through which a user interacts with a program.

Note about the mailing list mpris at videolan dot org: It should be an as LOW traffic list as possible and used only to coordinate the work, and when developers disagree on a part of the spec. Otherwise, please use this wiki page.

Contents

Background

Overview

In August 2005, Milosz Derezynski (deadchip) and Frederic Fondriest (ciberfred) were working on defining an interface for remotely controlling BMPx (as opposed to using the BMPx GUI) over DBUS:

<ciberfred> hey deadchip , one things i'm currently thinking, we could do
something with dbus to uniformize call functions, so each player could share
same 'dbus-commands'
<~deadchip> ah
<~deadchip> yeah
<~deadchip> that would be a very good idea
<ciberfred> it could be better to let user choose the daemon they wants :)
<ciberfred> like xmms2, bmpx, or lamip or well mpd or others
<~deadchip> yeah
<~deadchip> that is really good
<ciberfred> so binaries commands audio could send informations from user
to theses daemons without need to re-code somethings different but similare for
another audio player

Thus MPRIS (Media Player Remote Interface Specification) was born - a fairly generic interface with commands that could be applied to control a wide range of media players. However, even though the phrase 'Media Player' is present in MPRIS, the specification was developed with the assumption that it would be applied to audio players.

About MPRIS

  • Defines commands for controlling a media player (play, pause, stop, etc).
  • Defines signals that notify clients of certain events on the media player.
  • Does NOT define audio or video data streaming protocols.
    • That is, a client can't request audio or video stream data over MPRIS

Chalyx

Meanwhile, Sham Chukoury (eleusis) was working on an XMMS2 client named HaX (now known as Chalyx). At some point, he decided it would be a great idea to be able to have a single client that could control multiple players, such as XMMS2, MPD and maybe even BMPx. So he made an API comparison table.

Most of the actions defined in the table were eventually defined in the Service abstract class in Chalyx (and subsequently XMMS2 and MPD service modules were developed). As such, any client that uses the Chalyx library (such as Kjell and Insanity) is able to control both XMMS2 and MPD. The design of Chalyx permits the development of additional 'service' modules to allow clients to control other music player backends.

VLC

Fast forward to November 2006 and Rafaël Carré from the VLC project decided to implement a DBUS control interface for VLC. He discovered MPRIS and decided to adapt it to his needs. Rafaël also decided to mail other media player projects to revive the spirit of MPRIS, and all hell broke loose across 10 different mailing lists. Then, Mirsal Ennaime tried to bring the project back from the grave, with Rafaël Carré and BMPx developers.

Current

Discussion
Discussion was proceeding on the vlc-devel mailing list. (see specific thread linked below) Milosz has proposed to set up an mpris-devel mailing list hosted by BMPx.
A dedicated mpris at videolan.org mailing list is set up, it should be an as LOW traffic list as possible and used only to coordinate the work and when developpers disagree on a part of the spec. Otherwise, please use this wiki page.

DBUS

Advantages
  • Widespread
Disadvantages
  • Doesn't work well over TCP? (e.g. compare with MPD's & XMMS2's support for tcp sockets)

Projects involved

XMMS2

For XMMS2, a proxy could be developed to translate between DBUS and XMMS2's own IPC mechanism. (Anders may have already done some work on this)

BMPx

VLC

Amarok

Audacious

Dragon player

Exaile

API Comparison

The spec

MPRIS

See Also

Personal tools