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.