Skip to content

Liquidsoap Rolling Release 2.3.x

Pre-release
Pre-release
Compare
Choose a tag to compare
@github-actions github-actions released this 22 Jul 13:58
· 3 commits to main since this release
ccbd0ef

This release is a pre-release of the 2.3.x release branch of liquidsoap. It is provided to allow for early testing of the 2.3.0 release before it is officially published.

You can use it to install the latest stable code before it is published and test/prepare your production environment for it.

Please consider the code publishing here as in alpha release stage!

⚠️ Warning ⚠️
Assets in this release will be deleted. If you are looking for permanent links to release assets, please head over to https://github.com/savonet/liquidsoap-release-assets/releases

For more details about our release process, please checkout https://github.com/savonet/liquidsoap#release-details

2.3.0 (unreleased)

New:

  • Rewrote the streaming API to work with immutable frame content. This
    should greatly impact impredictable side-effect of the previous models w.r.t.
    track marks, content sharing and more. This also impacts multiple operators
    behavior. Mostly, things should be roughly the same with differences around
    behaviors related to track marks (source.on_track and etc). See @todo@ for
    more details (#3577)
  • Added script caching layer for faster script startup time. See: our blog post
    for details (#3924, #3949, #3959 and #3977)
  • Rewrote the clock/streaming loop layer. This prepares our streaming system to
    support multicore when the OCaml compiler is mature enough to allow it. Clocks
    are now attached to sources via their clock methods. Returned value is a stripped
    down clock variable. Users can use the clock function to retrieve the full
    methods, e.g. s = sine(); c = clock(s.clock). This value has advanced functions
    for clock control such as start/stop, ticks and self_sync to check for
    self-sync. See @todo@ for more details. (#3781)
  • Allow frames duration shorter than one video frames, typically values under 0.04s.
    Smaller frames means less latency and memory consumption at the expense of
    a higher CPU usage. See @todo@ for more details (#3607)
  • Change default frame duration to 0.02s (#4033)
  • Optimized runtime (#3927, #3928, #3919)
  • Added finally to execute code regardless of whether or not an exception is raised
    (see: #3895 for more details).
  • Removed gstreamer support. Gstreamer's architecture was never a good fit for us
    and created a huge maintenance and debugging burden and it had been marked as
    deprecated for a while. Most, if not all of its features should be available using
    ffmpeg. (#4036)
  • Add video.canvas to make it possible to position video elements independently
    of the rendered video size (#3656, blog post)
  • Add cover manager from an original code by @vitoyucepi (#3651)
  • Added non-interleaved API to %ffmpeg encoder, enabled by default when only
    one stream is encoded.
  • Allow trailing commas in record definition (#3300).
  • Add metadata.getter.source.float (#3356).
  • Added optional main_playlist_writer to output.file.hls and
    derivated operator (#3484)
  • Added is_nan, is_infinite, ceil, floor, sign and round (#3407)
  • Added %track.drop to the %ffmpeg encoder to allow partial encoding
    of a source's available tracks (#3480)
  • Added let { foo? } = ... pattern matching (#3481)
  • Add metadata.replaygain method to extract unified replay gain value from metadata (#3438).
  • Add compute parameter to file.replaygain to control gain calculation (#3438).
  • Add compute parameter to enable_replaygain_metadata to control replay gain calculation (#3438).
  • Add copy: protocol (#3506)
  • Add file.touch.
  • Add support for sqlite databases (#3575).
  • Add string.of_int and string.spaces.
  • Add list.assoc.nullable.
  • Add source.cue (#3620).
  • Added atomic file write operations.

Changed:

  • Mute SDL startup messages (#2913).
  • int can optionally raises an error when passing nan or infinity, int(infinity)
    now returns max_int and int(-infinity) returns min_int. (#3407)
  • Made default font a setting (#3507)
  • Changed internal metadata format to be immutable (#3297).
  • Allow a getter for the offset of on_offset and dropped the metadata
    mechanism for updating it (#3355).
  • Disable output paging when TERM environment variable is not set.
  • Allow running as root user inside docker container by default (#3406).
  • Run check_next before playlist's requests resolutions (#3625)
  • Set force to true by default in file.copy to make operator behave
    as expected.
  • BREAKING: Float comparison now follows the expected specs, in particular: nan == x is always false and
    nan != x is always true. Use float.is_nan to test if a float is nan.
  • BREAKING: replaygain no longer takes ebu_r128 parameter (#3438).
  • BREAKING: assume replaygain_track_gain always stores volume in dB (#3438).
  • Added parents option of file.mkdir (#3600, #3601).
  • Added forced_major_collections record field to the result of runtime.gc.stat() and
    runtime.gc.quick_stat() (#3783).
  • Changed the port for the built-in Prometheus exporter to 9599 (#3801).
  • Add support for caching LV2 and LADSPA plugins (#3959).

Fixed:

  • Fixed type generalization on values returned from function applications. Most notably,
    this should help with HTTP endpoint registration (#3303, fixed in #4030)