Playlist parsers

Liquidsoap supports various playlists formats. Those formats can be used for playlist sources, input.http streams and manually using request.create.

Supported formats

Most supported playlists format are strict, which means that the decoder can be sure that is has found a correct playlist for that format. Some other format, such as m3u, however, may cause false positive detections.

All formats are identified by their mime-type or content-type. Supported formats are the following:

  • Text formats:
    • audio/x-scpls: PLS format, strict
    • application/x-cue: CUE format, strict. This format’s usage is described below.
    • audio/x-mpegurl, audio/mpegurl: M3U, non strict
  • Xml formats:
    • video/x-ms-asf, audio/x-ms-asx: ASX, strict
    • application/smil, application/smil+xml, SMIL, strict
    • application/xspf+xml, XSPF, strict
    • application/rss+xml, Podcast, strict

Usage

Playlist files are parsed automatically when used in a playlist or input.http operator. Each of these two operators has specific options to specify how to pick up a track from the playlist, e.g. pick a random track, the first one etc.

Additionally, you can also manually parse and process a playlist using request.create and request.resolve and some programming magic. You can check the code source for playlist.reloadable in our standard library for a detailed example.

Special case: CUE format

The CUE format originates from CD burning programs. They describe the set of tracks of a whole CD and are accompanied by a single file containing audio data for the whole CD.

This playlist format can be used in liquidsoap, using a cue_cut operator. By default, the CUE playlist parser will add metadata from cue-in and cue-out points for each track described in the playlist, which you can then pass to cue_cut to play each track of the playlist. Something like:

cue_cut(playlist("/path/to/file.cue"))

You can find an example of using cue_cut with cue sheets here and a throughout explanation of how seeking in liquidsoap works there.

The metadata added for cue-in and cue-out positions can be customized using the following configuration keys:

settings.playlists.cue_in_metadata.set("liq_cue_in")
settings.playlists.cue_out_metadata.set("liq_cue_out")