Release 4.0.0

Agile Live 4.0.0 release information

Build date


Release status

Type: Fourth production ready release

Release content

Product version


Release artifacts

Ingest and Rendering Engine binaries, headers, and shared librariesagile-live-4.0.0-d02f52d.zip9f95bfe78ab7d295268ad2de913ed18cda8b9407d977feb9afc7f5a738034a73
System Controlleragile-live-system-controller-4.0.0-745ecee.zipf19331fffa499db7d57d10c99af09b78e94fec5459188d6df832a009b0b92947

Library details

Version: 10.0.0

Library containing the core Ingest functionality used by the acl-ingest executable.

Version: 11.0.0

Library containing the MediaReceiver, MediaStreamer and ControlDataReceiver classes, used to implement a Rendering Engine. Also used by the acl-renderingengine application

Version: 9.0.0

Library containing the ControlDataSender class, used to send control messages to a ControlDataReceiver component.


  • The system now requires Chrony as the NTP client for time synchronization. See NTP instructions for more details. The applications will not start if Chrony reports an drift greater than 5 ms.
  • New environment variables ACL_LOG_MAX_FILE_SIZE and ACL_LOG_MAX_LOG_ROTATIONS to control the number and size of the rotated log files for the applications
  • Fix parsing of boolean environment variables

Ingest 10.0.0

  • Support for transporting up to 16 channels of audio to the production, where a subset of the channels can be selected.
  • Added support for using Opus as audio codec in transport to the Production Pipeline. This codec has a lower delay compared to the existing AAC codec. The user can now select codec per connected stream.
  • Improved handling of NDI sources.
  • Handle cases when SDI sources deliver one extra or one too few audio sample.
  • The built-in MediaSourceGenerator now has a lower audio level of -20 LUFS.

Rendering Engine 2.0.0

  • New audio mixer implementation with per-input-strip three-band parametric equalizer, compressor and panning.
  • New automatic transition types: left and right wipe
  • Add support for picture-in-picture effects. Currently the rendering engine support two separate picture-in-picture effects with an additional graphic effect on top.
  • All control commands executed by a rendering engine is now written to a log file in /tmp
  • Fix bug where disconnecting a source would leave the last frame frozen in the input slot with corrupted audio.

Production Pipeline 11.0.0

  • It is now possible to include input slots where no stream has been connected yet to a multi-view output. The view will be empty until a source has been connected to that input slot, with the label visible.
  • Views in the multi-view will remain after the corresponding input slot has been disconnected, showing a black frame with the label. The video will automatically turn up again when another stream is connected to the same input slot.
  • Fix bug where the multi-view output would stop sending video when none of the sources in the multi-view were connected.
  • Add support for SRT in caller mode for multi-view outputs and MediaStreamer outputs.
  • Add support for setting the SRT latency and an optional passphrase for the multi-view outputs and MediaStreamer outputs.
  • MediaReceiver API has a new method removeCustomMultiViewSourceInput to remove a custom feedback input earlier registered using getCustomMultiViewSourceInput.
  • Improved latency of video decoder with ~1 frame.

Control Data Sender 9.0.0 and Control Data Receiver 10.0.0

  • Fix application crash with acl-tcpcontrolpanel on connection failure.
  • Updated control command protocol for video commands, where the first word addresses the node in the graph to make the change to. This allows for the same node to be used multiple times. See Rendering Engine commands for more details on the new protocol.
  • Updated API where multiple, separate control commands can be sent in the same message, guaranteed to be delivered to the Rendering Engine at the same time point. The new method sendMultiRequestToReceivers is used to send such messages. The old API for sending just a single control command per message is unchanged.
  • Raise the maximum control message length to 65535 bytes.

System Controller 4.0.0

  • Expose a number of new metrics from the components for system monitoring in the REST API and Prometheus endpoint, including average/min/max encode and decode durations per stream, frame counters for video and audio in multiple locations, statistics for outgoing output streams and round trip time and measured bandwidth on the contribution links.
  • The POST /streams endpoint now require an audio_mapping to know which audio channels to transport to the production. Use "[[0,1]]" for the same behavior as in previous versions (i.e. transport only channels 0 and 1, encoded as stereo).
  • New counter lost_frames for Pipeline streams. It counts fully lost frames, not only broken frames, as the received_broken_frames counter.
  • The counter lost_packets in the GET /ingests/{uuid}/streams endpoints has been removed in favor for the lost_packets and dropped_packets in the Pipeline.
  • Counter queuing_video_frames has changed name to video_frames_in_queue.
  • REST API now correctly returns the selected port when automatic port selection is requested (by setting the local_port to 0), instead of returning the port number as 0.
  • REST API now show if sources are active or inactive, instead of hiding inactive sources (a source is active if it is ready to be used, as opposed to an inactive source, which has been seen earlier, but not any longer)
  • Fix bug where the wrong port numbers of Control Connections would be shown in REST-API for port numbers automatically assigned by the OS.

Known limitations

GPU performance

The GPU utilization in the Ingest status message is currently not working. Use intel_gpu_top and/or nvidia-smi instead.


For Outputs and multi-view outputs it is currently not possible to bind to a specific IP and port with MPEG-TS over UDP, even if local_ip and local_port are exposed in the REST API.


You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.

Security issues

There is no rate limiting implemented in any of the components. Should the application be running in a network where ports are accessible to unauthorized users, there is a risk of a denial of service (DOS). The network should be configured with firewall rules closing out unauthorized users.

Encryption (HTTPS) is not enabled by default in acl-system-controller. This means that pre-shared keys (PSK) used for encrypted communication between components and the System Controller will be exchanged in the clear and could be revealed.

Client authentication is not enabled by default in acl-system-controller so anyone with access to HTTP on the machine hosting acl-system-controller will have access to the REST API.

Even when client authentication is enabled, there is no enforcement of the length or format of the password. Also note that HTTPS should be enabled when using client authentication since the credentials would otherwise be sent in clear text.

It is strongly recommended to enable both HTTPS and client authentication.