Skip to content

Releases: savonet/liquidsoap

Liquidsoap 2.0.3

12 Feb 00:21
Compare
Choose a tag to compare

giphy

This is the third Liquidsoap bugfix release of the 2.0.x release branch. This release was focused on long-term concerns regarding memory consumptions, crossfade transitions and metadata issues. Overall, it follows a trend of stabilization of the 2.0.x features and we're happy to see adoption expanding and users reporting issues and usages that are more and more specialized.

Specific things to focus on for this release:

  • We spent quite a while investigating issues related to memory consumption. It turns out that those seem to be mostly related to finer-tweaking of the OCaml memory management unit, called the garbage collector (GC). Details about our findings with some hints about how to change the settings there are here and here
  • The default buffer size for input.harbor has been increased to 12s to make it possible to use it with crossfade transition out of the box. Make sure to drop if while upgrading if you rely on a smaller buffer.
  • The API for fetching and manipulating date and time has been cleaned up to make it more user friendly. Details are here. Make sure to check out this link if you are using time.utc() or time.now()
  • The logic behind metadata being passed when switching between sources has been fixed. This could impact your running code if you relied on a broken implementation before. See #2138

This is mostly it! 🎉 Again, we want to thank all our users, contributors and supporters. We would never be able to keep improving the quality of the software without y'all patient testing, reporting and follow-ups! Merci!

Liquidsoap 2.0.2

29 Dec 14:55
Compare
Choose a tag to compare

This is the second bugfix release of the liquidsoap 2.0.x branch. It contains important fixes and a couple of enhancements. Update is recommended with a little bit of testing before.

Noticeable new features are:

  • We now show highlighted code excerpts on errors, which should help finding out which part of a script are not working
  • We export the last_metadata of a source, which can be used to make transitions between sources easier.

Noticeable bug fixes are:

  • Fixed a segfault in ocaml-lame. Make sure to install version 0.3.5
  • Fixed a memory leak when using muxing operators.
  • Fixed last metadata not showing up in some switches or fallback
  • Fixed input.rtmp deadlocking on shutdown
  • Fixed %ffmpeg copy encoder crashing when switching sources.

We believe that this release is bringing liquidsoap 2.0.x to a great level of stability and have worked on it with a couple of partners implementing it for their streaming systems. We suggest to upgrade whenever possible. However, because of the changes in metadata behavior with switches, it might be good to do some minimal testings beforehand. If anything, though, the change in behavior should bring liquidsoap back where most users would expect it to be.

As usual, we want to warmly thank all users, bug reporters and contributors for their invaluable help and patience working with us on this release!

Full Changelog:

2.0.2 (28-12-2021)

New:

  • Show code excerpts on errors (#2086)
  • Added on_get_ready callback to sources, to be
    executed after a source's has initialized.
  • Added flush_and_skip telnet command to request.dynamic
    to empty the request's queue before skipping the current
    track, forcing a full reload.
  • Added last_metadata method on sources to return the
    last metadata produced by the source.

Fixed:

  • Fixed ffmpeg copy encoder crash when switching between
    streams.

  • Fixed unbound buffer in muxing operators (#2054)

  • Return correct positions when parsing strings (#2095)

  • Deadlock when shutting down with input.rtmp (#2089)

  • Add timeout to srt operations (#2082)

  • Fixed request.queue queue telnet command returning
    nothing (#2088)

  • Fixed single quotes being escaped in json stringify.
    (#2120)

  • Fixed frame caching issues when no initial break was
    present in the memoized frame. (#2109. AzuraCast/AzuraCast#4825)

  • Fixed replay_metadata not replaying metadata from active sources
    (#2109)

    Note:
    For source compilation, please use the liquidsoap-2.0.2-1.tar.bz2 tarball. The liquidsoap-2.0.2.tar.bz2 tarball will be replaced by this one shortly.

Liquidsoap 2.0.1

27 Nov 17:27
Compare
Choose a tag to compare

Just a couple of days shy of the 2 months mark since the first Liquidsoap 2.x, we are please to release the first 2.0.1 bug fix release from this branch!

This release includes a couple of new features but, mostly, some important fixes for the issues that have been reported from our patient and wonderful users. This includes important fixes with our ffmpeg bindings (not included in the Liquidsoap ChangeLog), a rather intricate issue that looked like a memory leak (#2054, #1740), some issues with transition in switches and fallback eating track marks (#1999) and more.

We recommend upgrading to this version from 2.0.0 and believe that it should be pretty safe to do so.

Changelog:

New:

  • Added time.predicate to parse time predicates at runtime.
  • Added support for ffmpeg filter commands, unify video.add_text.ffmpeg
    with other operators, make it the default when available. (#2050)

Changed:

  • Removed encode_metadata option in input.file.hls as it does nothing with
    the main encoder for HLS format, %ffmpeg (#2023)
  • Converted output.icecast optional parameters to nullable.

Fixes:

  • Fixed switch-based sources not respecting track boundaries when
    using default transitions with one track only per selected source. (#1999)
  • Fixed playlist annotation. (#2005)
  • Raise a proper runtime exception when string.escape fails. (#2010)
  • Account for internal caching in request.dynamic.list's queue and set_queue methods.
  • Keep buffering for crossfade when new source has track mark but is still ready.
  • Added missing output start/stop commands.
  • Fixed perms, dir_perms and append not bring honored when delegating file output
    to the encoder.
  • Fixed base directory not being created when delegating file output to the encoder.
    (#2069)
  • Use process.quote in process calls (#2031)

Liquidsoap 2.0.0

04 Oct 15:17
Compare
Choose a tag to compare

It is with great excitement and some ~2 years of anticipation that we have the pleasure to announce the release of Liquidsoap 2.0.0!

giphy

🤔 What is liquidsoap?

Liquidsoap is a statically-typed, type-inferred, functional scripting language equipped with specialized operators to build audio and video stream automation.

The liquidsoap language offers all the flexibility and expressivity of a fully featured programming language to help build your media streams.

Using liquidsoap, one can very quickly stand up a media streaming platform that can rotate files from playlists, accept live DJ input, mux audio and video, encode (or not!) and send the resulting data to youtube, icecast, HLS and more..

✅ Why liquidsoap?

While there are many tools that offer competing features, the real difference with liquidsoap is its scripting language.

Setting up tools using configuration files is often easier and more straight forward, however, when it comes to the finer details, such as inserting jingles between shows, defining crossfades between tracks and more, potentially, each project has its own set of expectations, and this is where liquidsoap becomes really useful!

⚡️ What's new in Liquidsoap 2.0.0? ⚡

Liquidsoap 2.0.0 brings major improvements in two areas:

📽️ Video support via ffmpeg

While video has been supported for a while, audio remained the primary target of the software. This is all changed now! In keeping with the tradition of focusing on what we do well and delegating to others what they have expertise on, we implemented a tight integration of the remarkably awesome ffmpeg API.

This has brought to liquidsoap all the exciting features of ffmpeg, including support for multiple input and output formats, filters and also support for end-to-end encoded content, which allows liquidsoap, when possible, to stream content without having to re-encode it, a long requested user feature.

Our aim with the ffmpeg integration is to become a scripting language built on top of ffmpeg in such ways that, if something is possible with the ffmpeg command-line, it should be possible with liquidsoap.

Meanwhile, the scripting language also provides functionalities based on ffmpeg that are either hard or impossible to implement using the command-line executable, such as fully typed, composable ffmpeg filter operators and shared encoding

⚙️ Expanded language features

With this release, the liquidsoap language is expanded, introducing multiple features much needed for the comfort of the programmer such as:

  • Module and records, allow to attach method to variables
  • Exception handling
  • Support for structured data, tuples and etc.

Along with these changes, we have released The Liquidsoap Book, which we hope will help users of all skill level to work with the liquidsoap language and streaming projects.

But we are not stopping here! We have even more exciting features in store for the liquidsoap language, some of them already committed to the main development branch.

🚸 Roadmap and versioning

Our roadmap consists of:

🚧 Bugfix releases

While we are satisfied with the current 2.0.0 release and believe it is safe to use for production-ready work, software projects are never free of bugs so we will keep improving on the current stable branch.

Stable releases are numbered using the patch part of their version, i.e. 2.0.x. However, when it comes to liquidsoap, it is important to keep in mind that some of our operators have complex behavior and interactions with each other. While we do our best to maintain backward compatibility between bugfix versions, we always recommend to test them in a staging area before pushing them to production.

Our workflow for reporting bugs is via github's issues tracker. This is our preferred way to keep track of issues, discuss them and mark them as fixed. If you have questions related to setting up your script, installing liquidsoap and etc, you can also start a discussion. In some cases, issues get transferred to discussions as we see fit and, also, discussions can in fact lead to reporting an associated issue.

We do encourage all reports as we find a lot of value in our users feedback. We try to respond to all of them diligently but we also appreciated your patience.

💡 Future major release

While we were busy stabilizing the current stable branch, we couldn't resist working on new features! So far, it looks like the next major release will focus on expanding the language's capabilities with features such as:

  • Support for variable in encoders
  • Generalized extraction patterns
  • First-class module system
  • Vastly improved support for json parsing and rendering
  • Type-system flexibility improvements

A vision that we have is to bring the liquidsoap language to the same flexibility and type-safety as languages such as TypesScript but with inferred types so you never have to write them (99% of the time..)! 🙂

🚀 Need help?

If you need help with your liquidsoap project, you can join our online chat room, which is currently hosted on slack. We also provide professional support. Holler at us if you are in such need we'd love to see how we can help as well!

⚠️ Windows users

Please note that the windows build does not support our regular encoders (lame, ogg, etc.) along with ffmpeg (they are compiled statically and some of the symbols are conflicting). Since ffmpeg provides the same encoders and more, we have decided to only enable ffmpeg on this build. Please, refer to the documentation here to see how to use ffmpeg to encode in various formats.

Liquidsoap 2.0.0-rc1

01 Sep 18:38
Compare
Choose a tag to compare
Liquidsoap 2.0.0-rc1 Pre-release
Pre-release

Liquidsoap 2.0.0-rc1 is out!

The 2.0.0 release branch brings important and fundamental changes to liquidsoap, in particular:

  • First-class support of video
  • Tight integration with ffmpeg, encoders, decoders, filters and more
  • Enhanced language features making the script language a fully-featured language
  • A fully featured book to learn about the language

About this release

This is the first release candidate for the 2.0.0 release branch. This release means that we are satisfied with the current stability of the branch and are looking at releasing a final version soon.

As a result, the repository's main branch has been versioned to 2.1.0 and we have forked off a 2.0.0-rc1 branch. This branch will only get bug fixes and we shall keep releases of the 2.0.x series for bug fixes in the future.

This release is also the first to make it to the opam repository. This means that users installing liquidsoap without a specific version will get 2.0.0~rc1 installed. While this version may not be entirely free of bugs (are there any such thing?), we believe that it is ready for larger consumption and, also, that this will accelerate the release process by exposing more and more users to it, helping us to shape it to its final form.

If you absolutely need to make sure you installed a given version, please update your scripts using opam to install a fixed version, i.e.:

opam install liquidsoap.1.4.4

This is actually a good practice for any automated liquidsoap opam install that depends on a specific version.

We want to thank all our users for their critical help in testing, reporting, working with us and trusting us through this release process. We can't wait to have the final 2.0.0 version out!

Personal note

This release was delayed as one of our developers was being displaced due to hurricane Ida's path of destruction through Southern Louisiana. While New Orleans is often the focus of the world's attention (and usually not for so long), this catastrophic event has impacted a lot of smaller communities around southern Louisiana that usually get little or no focus. While this open-source project is provided free of charge, if you feel so inclined to make a donation as a form of appreciation, we suggest they can be send to:

Liquidsoap 2.0.0-beta3

11 Aug 15:58
Compare
Choose a tag to compare
Pre-release

This is the third and, hopefully, last beta for the upcoming 2.0.0 major release!

The 2.0.0 release branch brings important and fundamental changes to liquidsoap, in particular:

  • First-class support of video
  • Tight integration with ffmpeg, encoders, decoders, filters and more
  • Enhanced language features making the script language a fully-featured language
  • A fully featured book to learn about the language

Since the second beta, we have pushed a bunch of bug fixes, thanks to our early testers and reporters. We try to avoid breaking changes but we also introduced some new features too:

  • Parametrization of request-based sources such as playlist, request.dynamic etc. has been simplified to be able to simply set a prefetch argument to tell the operator to queue a certain number of requests in advance. Methods have been added to the operator to also allow advanced use, queue inspection, manual push and etc.
  • Settings are now fully typed via a top-level settings module. Typically, set("log.level", 4) becomes settings.log.level.set(4). This is fully backward compatible too!
  • The ffmpeg decoder can now be used to decode images so, if you are planning to implement video streams using static images, all you should need is the ffmpeg binding.

Next, we are planning of ending the beta release cycle to keep fixing bugs without introducing major changes so we can start looking at release candidates. Once liquidsoap 2.0.0 is out, we will resume adding new features.

Again, we want to thank all y’all for y’all patience testing, reporting and contributing, this is an immense help for us, we wouldn’t be able to do all this work without y’all!

Liquidsoap 2.0.0-beta2

05 Jul 16:25
Compare
Choose a tag to compare
Pre-release

A little over a year after introducing support for abstract internal frame content in #1237, we’re happy to announce that the second beta of liquidsoap 2.0.0 is now available: https://github.com/savonet/liquidsoap/releases/tag/v2.0.0-beta2

This journey, which started over a year and a half ago at FOSDEM is now bringing liquidsoap to a new level. One can now do things that were previously thought as impossible or very hard to implement. This includes:

  • Taking advantage of a fully-featured language with modules, exceptions, nullable values and more.
  • Mixing encoded and raw content, sharing encoders, leveraging most of FFmpeg’s supported encoders/decoders/filters
  • Streaming video efficiently

With this second beta, we are solidifying the current code, although with perhaps one more disrupting change in the pipes (see below). We encourage any interested user to migrate their script and report any issue as we aim to:

  • Maintain compatibility with migrated scripts for the final version as much as possible
  • Provide production-ready stability as quickly as possible

To this end, we try our best to be responsive to any bug report concerning the 2.0.0 release branch. In order to help migrating scripts, we have started a migration page with tips about what needs to be changed and will update it as we get reports from our users.

We are in the process of updating our online documentation so you should already see some improvements there. Also, we now have a fully featured Liquidsoap book that provides a lot more details and background information about liquidsoap and streaming in general.

This release also introduces new CI-based APK package builds for alpine for the x86_64 and aarch64 architectures as well as a docker images for Alpine linux. These images are 5x smaller than our default production images!

Liquidsoap 2.0.0-beta1

04 Jun 00:24
Compare
Choose a tag to compare
Pre-release

This is the first beta release of liquidsoap 2.0!

The 2.0.0 release branch brings important and fundamental changes to liquidsoap, in particular:

  • First-class support of video
  • Tight integration with ffmpeg, encoders, decoders, filters and more
  • Enhanced language features making the script language a fully-featured language

This release is the first beta release, which means that we believe that we are done with most of the fundamental changes and are now considering stabilizing the existing core. We are encouraging users to test it, with the confidence that, once their scripts are adapted to the new changes, they will work with the final release with very little changes and that we will be reactive to bug reports so we can move toward a final release quicker.

This release also comes with the first version of the Liquidsoap book!! 🎉

The book covers the Liquidsoap language, in version 2.0.0, with a view to stream generation, from the basics to advanced use cases. We believe that it'll be a great companion while switching to or working on learning about the 2.0.0 release.

It is available:

Windows users: Please note that the windows build does not support our regular encoders (lame, ogg, etc.) along with ffmpeg (they are compiled statically and some of the symbols are conflicting). Since ffmpeg provides the same encoders and more, we have decided to only enable ffmpeg on this build. Please, refer to the documentation here to see how to use ffmpeg to encode in various formats.

Liquidsoap 2.0.0-alpha1

29 Mar 21:09
Compare
Choose a tag to compare
Pre-release

This is the first alpha release of liquidsoap 2.0!

This release features important and fundamental changes, in particular:

  • First-class support of video
  • Deep integration with ffmpeg, encoders, decoders, filters and more
  • Enhanced language features making the script language a fully-featured language

We are currently working on updating the documentation. The online one might be out of sync for a bit as we progressively iterate through the changes.

We presented some of the changes during the liquidshop back in January. You can view the video online here. The slides, with examples, are available here

Feel free to try this release and report any issue that you encounter with it. We are pretty excited to get this version ready for a full release as soon as we can!

Liquidsoap 1.4.4

01 Mar 21:58
Compare
Choose a tag to compare

1.4.4 (27-02-2021)

New:

  • Added process.quote to quote process' arguments (#1215)

Changed:

  • Fetch mime type using curl first when available.
  • Make override metadata name case-sensitive in amplify (#1323)

Fixed:

  • Remote file resolution when passing URLs with spaces (#1410)
  • Fixed empty {http,https} body (#1417)
  • Fixed input.harbor shoutcast client connection (#1353)
  • Fixed exception reporting when output fails to start (#1372)
  • Fixed random track selection (#1468)
  • Fixed playlist request leak when using reload="watch" with inotify on a folder (#1451)
  • Deadlock when LO server thread crashes (#1409)