Dear all, After several beta versions, a release candidate and lots of local tests... Samuel, Romain and I are proud to announce the release of liquidsoap 1.0.0!
Although many people already use liquidsoap in various production settings, this is an important milestone for the project. We consider this version stable and well designed, we'll maintain it as it is, doing our best to ensure backward compatibility. Of course, we also already have several important ideas for the future, but we'll take a break before starting to move towards 2.0 ;) As usual, download from our sourceforge page: http://sourceforge.net/projects/savonet/ We hope you'll enjoy it. Don't hesitate to spread the word, and don't forget to register into the Flows which is absurdly Franco-French at the moment (http://savonet.sourceforge.net/flows.html). ** Background Liquidsoap is a programming language for multimedia stream processing, mainly used in building complex netradios. This design makes it a flexible tool: we believe that liquidsoap is easy to get started with for a simple project, but the programmability and the many features make it possible to extend your system beyond what any other tool can do in that domain. ** History & Credits Not counting a demo in 2004 at ENS Lyon, Liquidsoap's first release was the 0.2.0 in 2005. The 0.3.0 line brought the first stable versions, used in productions with uptimes of months. In 2009, we started the 0.9.0 line, determined to bring what we considered to be the missing features for 1.0.0: per-source stream types (mono in one source, stereo in the other, video in yet another) and clocks. The first 1.0.0 beta version came up in Sept 2010, and we've mostly been stabilizing since then -- although a few important features were also introduced, notably the seek support, v4l input, minimal HTTP & icecast server capabilities, OSC support. Liquidsoap's main developers are David Baelde, Romain Beauxis and Samuel Mimram. But the project has benefited from the contributions of many more people, including Vincent Tabard, Julien Cristau, Stéphane Gimenez, and many more from year when liquidsoap was a students' project at ENS Lyon. We'd also like to thank the many people hacking liquidsoap scripts, building tools on top of it, who bring valuable feedback and ideas. ** Changelog This is the changelog for 1.0.0 only. If you're migrating from a version of liquidsoap older than the beta3, don't forget to check the full CHANGES file for migration tips! 1.0.0 (08-10-2011) ================== 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. Cheers! -- David for the Savonet team ------------------------------------------------------------------------------ All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2dcopy2 _______________________________________________ Savonet-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/savonet-users
