Advanced audio setups

Mopidy has very few audio configs, but the ones we have are very powerful because they let you modify the GStreamer audio pipeline directly. Here we describe some use cases that can be solved with the audio configs and GStreamer.

Custom audio sink

If you have successfully installed GStreamer, and then run the gst-inspect-1.0 command, you should see a long listing of installed plugins, ending in a summary line:

$ gst-inspect-1.0
... long list of installed plugins ...
Total count: 233 plugins, 1339 features

Next, you should be able to produce a audible tone by running:

gst-launch-1.0 audiotestsrc ! audioresample ! autoaudiosink

If you cannot hear any sound when running this command, you won’t hear any sound from Mopidy either, as Mopidy by default uses GStreamer’s autoaudiosink to play audio. Thus, make this work before you file a bug against Mopidy.

If you for some reason want to use some other GStreamer audio sink than autoaudiosink, you can set the audio/output config value to a partial GStreamer pipeline description describing the GStreamer sink you want to use.

Example mopidy.conf for using OSS4:

output = oss4sink

Again, this is the equivalent of the following gst-launch-1.0 command, so make this work first:

gst-launch-1.0 audiotestsrc ! audioresample ! oss4sink

Streaming through Icecast

If you want to play the audio on another computer than the one running Mopidy, you can stream the audio from Mopidy through an Icecast audio streaming server. Multiple media players can then be connected to the streaming server simultaneously. To use the Icecast output, do the following:

  1. Install, configure and start the Icecast server. It can be found in the icecast2 package in Debian/Ubuntu.

  2. Set the audio/output config value to encode the output audio to MP3 (lamemp3enc) or Ogg Vorbis (audioresample ! audioconvert ! vorbisenc ! oggmux) and send it to Icecast (shout2send).

    You might also need to change the shout2send default settings, run gst-inspect-1.0 shout2send to see the available settings. Most likely you want to change ip, username, password, and mount.

    Example for MP3 streaming:

    output = lamemp3enc ! shout2send async=false mount=mopidy ip= port=8000 password=hackme

    Example for Ogg Vorbis streaming:

    output = audioresample ! audioconvert ! vorbisenc ! oggmux ! shout2send async=false mount=mopidy ip= port=8000 password=hackme

    Example for MP3 streaming and local audio (multiple outputs):

    output = tee name=t ! queue ! audioresample ! autoaudiosink t. ! queue ! lamemp3enc ! shout2send async=false mount=mopidy ip= port=8000 password=hackme

Other advanced setups are also possible for outputs. Basically, anything you can use with the gst-launch-1.0 command can be plugged into audio/output.

Known issues

  • Changing track: As of Mopidy 1.2 we support gapless playback, and the stream does no longer end when changing from one track to another.
  • Previous/next: The stream ends on previous and next. See #1306 for details. This can be worked around using a fallback stream, as described below.
  • Pause: Pausing playback stops the stream. This is probably not something we’re going to fix. This can be worked around using a fallback stream, as described below.
  • Metadata: Track metadata is mostly missing from the stream. For Spotify, fixing #1357 should help. The general issue for other extensions is #866.

Fallback stream

By using a fallback stream playing silence, you can somewhat mitigate the known issues above.

Example Icecast configuration:


You can easily find MP3 files with just silence by searching the web. The silence.mp3 file needs to be placed in the directory defined by <webroot>...</webroot> in the Icecast configuration.