Skip to content

Liquidsoap 1.0.0

Compare
Choose a tag to compare
@smimram smimram released this 13 Jan 11:58

Finally, the 1.0.0 release! It brings several important fixes, but also some nice novelties. The most outstanding difference concerns output.icecast(): its restart and restart_delay parameters are gone, replaced by a new on_stop handler which is called on every error (failed connection or disconnection) and returns the new restart delay. The on_error handler receives a string describing the error which enables user-friendly reporting, adaptative
delays, etc. Note that on_error defaults to fun(_)->3. which is equivalent to having restart=true, restart_delay=3. in previous versions, NOT the same as the former restart=false default. As a result, Liquidsoap won't fail to startup if an initial connection attempt fails.

Fixes:

  • LS-532,527: avoid freeze after errors in streaming threads or source
    initialization routines
  • LS-542: race condition in playlist*() breaking randomness
  • LS-489: double expiration lead to illegal queue length and freeze of
    request-based sources
  • Avoid multiple simultaneous reloading in playlist*(),
    thanks to Fabio Costa for his help on this one!
  • Pass charset information to icecast server to avoid encoding bugs
  • LS-555: timeout for icecast connection attempts
  • LS-559: permanent stop after disconnection on Ogg streams
  • LS-565: efficient and crash-free error handling in input.http/harbor()
    when the input stream has an invalid number of channels
  • LS-431: proper handling of duration in blank() avoids abusive empty tracks
  • LS-556: rework conversion operators, optimizations used to be unsafe & broken
  • LS-574: silent MIDI synthesis operators
  • LS-396: drop*()'s types reflect that they don't support variable arities
  • LS-442: allow comments not terminated by newline at end of file

New:

  • on_error handler in output.icecast(), see above
  • New msg param in %mp3 for marking frame headers, defaults to version string
  • output.file(): new on_close parameter, may be used to write exact duration
  • %mp3.vbr/abr for variable bitrate MP3, %mp3 is now a synonym of %mp3.cbr
  • MP3 encoders now support ID3v2 tags
  • input.http(): new "status" command
  • LS-556: mux_mono() for adding a single audio channel into a stream
  • video.add_text() using libgd (gd4o) for environments without X
    Dependency on graphics can be disabled (to work around erreneous detection)
  • script language: add infix operator mod (patch by Fabio Costa)
  • delay() now has an "initial" parameter
  • LS-557: "server.timeout" setting can now be disabled by setting it to -1
  • LS-532: source.init() for selective init with a way to handle errors,
    plus settings "clock.allow_streaming_errors" and "init.force_stat" (or
    --force-start on the command line) for easing dynamic uses of liquidsoap
    Enhancements:
  • Panic crash to avoid frozen liquidsoap after duppy crashes
  • Text-to-speech: festival and sox are now only runtime dependencies
  • LS-475,516: better support for dynamic URL change in input.http()
  • LS-484: display user-friendly error messages in interactive mode
  • LS-308: use seconds internally in request sources, avoid overflow and
    display more user-friendly debug messages
  • Cleanup visu.volume() and video.vis_volume()
  • LS-573: replace " " by "_" in identifiers to make them valid in the server
  • Script syntax: unary minus now usable without parenthesis after semicolon
  • Two generic queues by default, to avoid deadlocks in advanced situations
  • Documentation, build & install system, etc.