This is the multi-page printable view of this section. Click here to print.
Releases
1 - Release 9.0.0
Build date
2025-06-01
Release content
Product version
9.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest binary and shared library | ateliere-live-ingest-9.0.0-97acf8d.tar | 75c4247deb5e8bab282747a7ec8d9bb0021dd6c9270a9249fa0ced9d25dffdc0 |
| Rendering Engine binary and acl-libproductionpipeline shared library | ateliere-live-renderingengine-9.0.0-97acf8d.tar | b1e67d3fa8411944c84173b21e441f47589a1b7685097bb7af6781a50c1ec51b |
| Generic control panels and acl-libcontroldatasender shared library | ateliere-live-controlpanels-9.0.0-97acf8d.tar | 1a6e2d127377b1cfa08fb482be14093d47882238918c1f3a188d6db2f1c61879 |
| Include files | ateliere-live-dev-9.0.0-97acf8d.tar | 76984f03376aa9b9dc800bece92761509026a7aa67ab7029b8e9f4a1a95c9339 |
| System Controller | ateliere-live-systemcontroller-9.0.0-09f2653.tar | eae8198e7111cdef4dcdfae21020ccd14bc17b4e22495d5a0efe521df1d955ac |
Changelog
9.0.0
- The video mixer now features feedback loops, i.e. using the outputs of the Rendering Engine as inputs to the video mixer, based on the feedback input slot number
- New REST API endpoints for setting and getting the format of the Rendering Engines, i.e. which frame rate and resolution is used. This makes it possible to run productions with only media players, without any ingests
- The multiview tally support has been improved. Now all sources contributing to the program or preview output will be marked with a red or green border in all multiview streams
- The name of the
acl-websocketcontrolpanelapplication has been changed toacl-websocketcontrolproxyto better reflect what the application does - Control panels now reconnect automatically to the Rendering Engine they are connected to, in case the network connection gets temporarily broken and restored
- It is now possible to include an audio stream in the Multiview outputs. Any of the input or feedback audio sources can be used. Which (feedback) input slot to take the audio from is controlled using the REST API endpoints for multiviews
- It is now possible to have feedback streams in the Rendering Engine config connected to an input slot below 100. Earlier this was unsupported, in order to make a separation between ingested sources and feedbacks
- The underlying HTML rendering framework CEF (Chromium Embedded Framework) was updated to version 136
- Fix an issue where all control traffic would get stuck for 15 minutes in some rare situations due to non-clean shutdowns of Websocket control clients
- Fix a bug in the transition video node, to make the
factorparameter automatically jump to 0.0 and the program and preview to swap place when the parameter is set to 1.0 - Fix a bug where the Rendering Engine would crash in case an empty Javascript or URL was sent from the control API
- Fix a bug where the Rendering Engine would crash in some rare events with very lossy network connections
- Fix a bug where a Media Player would output 10 frames from the previous video and then get stuck in case it tries to load a file that is not found
- In future releases, the changes made to the System Controller config file in the
/etc/opt/ateliere_livedirectory will be kept when a newer version of the .deb is installed. However, when upgrading to 9.0.0 from a previous version, the old installation will still remove the file before a new default one is installed. A separate file with the.defaultextension will be installed, containing the default parameters for that release. This file will be overwritten when a new version is installed - Allow the parameter
feedback_input_slotto be omitted from the Rendering Engine config to turn it off, giving the same result as setting it to 0
8.0.2
- Fix a bug in
acl-websocketcontrolpanelwhere the application would crash in some situations when a client was disconnected
8.0.1
- Fix a bug where the automatic fade command in the audio faders would not reach their end value in certain situations
Known limitations
Media Player
Videos will be stretched in case the video played does not have the same aspect ratio as the Rendering Engine is using.
GPU performance
The GPU utilization in the Ingest status message is currently not working. Use intel_gpu_top and/or nvidia-smi instead.
MPEG-TS over UDP
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.
Connection events
ConnectionEvents of type EventType::kConnect are only sent from the ControlDataSender or ControlDataReceiver itself and not propagated from other components as the kDisconnect events are.
Drivers
You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.
Security
No known issues
2 - Release 8.0.0
Build date
2024-03-06
Release content
Product version
8.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest binary and shared library | ateliere-live-ingest-8.0.0-14fc64c.tar | 3974cb00db48ee763422a1d2b8787d95aa1dd4c168ea00cd6d233e8cccc7efb5 |
| Rendering Engine binary and acl-libproductionpipeline shared library | ateliere-live-renderingengine-8.0.0-14fc64c.tar | dee4f3058ddb8d009973269ce663b5652d1a236d778a9c909b4c6a164b91e34e |
| Generic control panels and acl-libcontroldatasender shared library | ateliere-live-controlpanels-8.0.0-14fc64c.tar | 0666a8749bdf917e2b7e18a93486da8fb871461681538b984733ef569bdc5769 |
| Include files | ateliere-live-dev-8.0.0-14fc64c.tar | e8787d6dc6d7533306f3a0276f8ced5eb80f7ca4859f3518bcf5719a619b50de |
| System Controller | ateliere-live-systemcontroller-8.0.0-1cbd095.tar | cdb70359c60c30aa90048584d495a448cda543b36b073d277a74395d6b9d53c7 |
Changelog
- The control command API has been completely rewritten and now supports synchronization of control panels and retrieving information from the Rendering Engine
- The control command API now have support for streaming the play head position of media player in real time
- The control command API can now be used to get audio loudness meters. Pre and post filter chain peak meters for each strip, and peak and EBU R 128 meters for each audio mixer output
- It is now possible to create, list and close HTML browsers and Media Players from the REST API, as was earlier only possible from the control command API
- The REST API and Prometheus metrics endpoint now expose duration metrics of the Rendering Engine. This is useful for monitoring the time resource usage of the Rendering Engine
- The video mixer has granted a new crop node, which can be used to crop an overlay video stream before compositing it over the background
- The views in the multiview no longer flashes to black when a frame is missing, instead a red triangle is shown in the bottom right corner as long as no new frames are delivered. The view will repeat the latest received frame to prevent the flashing to black
- SRT outputs (both output streams and multiviews) can have a custom SRT stream ID set from the REST API
- It is now possible to identify discontinuity error in the incoming MPEG-TS in ingested SRT sources by the continuity counter error metric in the REST API
- It is now possible to tweak the log file size and the number of log file rotations of the System Controller
- Fix issue in Rendering Engine where video frames would sometimes not be decoded in time, even if the incoming compressed video buffer had frames to be decoded
- Websocket ping-pong is now enabled in Websocket Control Panel to detect connection loss of clients
- The Pipeline now have metrics for the incoming message queue size for control commands
- Small performance improvement for Ingests with many concurrent video streams to Pipelines configured
- REST API endpoint
[DELETE] /pipelines/{uuid}/outputs/{output_uuid}/streamsnow returns HTTP status code 200 instead of 404 when no stream exists - REST API endpoint
[PUT] /pipelines/{uuid}/resetis deprecated and moved to[PUT] /pipelines/{uuid}/renderingengine/reset. The old URI will still work for this release for backwards compatibility, but will be removed in a future release - The system now has support for ingesting 25 FPS sources into 50 FPS productions
- Fix bug where an output would get stuck in a non-reversible state if it was configured as an audio only output and the user would then try to stop it and start it again as a source with video
- Fix bug where the
srt_modewould return an empty string in case a SRT source lost connection and reconnected - Fix issue where the Rendering Engine would stop producing output for ~250 milliseconds when an Output stream was stopped from the REST API
- Fix bug where the Rendering Engine would sometimes hang on shutdown when media players are started
- Fix a bug where the Rendering Engine would crash in case a HTML browser was closed too quickly after creating it
- Fix a bug where the Rendering Engine would not load a new URL in case a load command was sent too quickly after the HTML browser was created
- Fix issues with high CPU utilization in the Ingest
- Fix crash when shutting down the WebsocketControlPanel
- The TCPControlPanel has been removed in favour for the Websocket Control Panel
- All classes in the SDK are now moved into an Acl namespace
Known limitations
Media Player
Videos will be stretched in case the video played does not have the same aspect ratio as the Rendering Engine is using.
GPU performance
The GPU utilization in the Ingest status message is currently not working. Use intel_gpu_top and/or nvidia-smi instead.
MPEG-TS over UDP
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.
Connection events
ConnectionEvents of type EventType::kConnect are only sent from the ControlDataSender or ControlDataReceiver itself and not propagated from other components as the kDisconnect events are.
Drivers
You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.
Security
No known issues
3 - Release 7.0.0
Build date
2024-05-21
Release content
Product version
7.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest binary and shared library | agile-live-ingest-7.0.0-809031f.tar | 7532b16204bcf4d8e018284bbfd93606106132a2307428fcee098269c0117d86 |
| Rendering Engine binary and acl-libproductionpipeline shared library | agile-live-renderingengine-7.0.0-809031f.tar | a0e7ff5ef26dc6dc679d3db2fbdef65dd330baadce2e9ae0bb8abde88d09c1ca |
| Generic control panels and acl-libcontroldatasender shared library | agile-live-controlpanels-7.0.0-809031f.tar | 188f2ed50e9bf6726e02dc0a7a61c0ab99337890ce806a35dc3472580770291f |
| Include files | agile-live-dev-7.0.0-809031f.tar | 00e6b561cbf71275bbefb93d16f94cd7efb91f29204fff2823fd2a34982834ae |
| System Controller | agile-live-systemcontroller-7.0.0-6c26469.tar | 52618467f6417d12e77f3c03b012aa6444443cb523b562309318e7cf74e14890 |
Changelog
- Add support for customizing the video and audio mixers using a config file passed to the
acl-renderingengineapplication at startup - A new endpoint
[PUT] /pipelines/{uuid}/resethas been added to the REST API, which is used to make the Rendering Engine/Pipeline reset its runtime state back to what it was when the application started. This includes resetting audio strip mappings, resetting all parameters in all video graph nodes and closing all HTML browsers and media players - The REST API has been overhauled and improved, resulting in a version bump to
/api/v3. Major changes include removal of most of thecontrolreceviersconcept as well as improved format of the JSON responses of the control panel endpoints- The UUIDs of control receivers have now been removed. Instead exactly one
ControlDataReceiverinstance is connected to eachPipeline/MediaReceiver, meaning the Pipeline’s UUID is now used in place of the control receiver UUID when setting up control connections. - The C++ SDK has changed when creating
ControlDataReceiverandMediaStreamerinstances. Now they are grabbed/created via theMediaReceiverclass API. - The
ControlDataReceiverandMediaStreamers will now use their parentMediaReceiverWebSocket connection to the System Controller, reducing the overall number of network connections to the System Controller
- The UUIDs of control receivers have now been removed. Instead exactly one
- The EQ of the audio mixer has been reworked. It can now include up to 10 filters, where each filter can be configured to any of these types: lowpass, highpass, bandpass, lowshelf, highshelf, peak or notch. The audio quality of the already existing EQ filter types has been improved.
- The audio mixer (and audio router), video mixer, media players and HTML browsers can now be reset via the Control panel API.
- The quality of the deinterlacing algorithm of the Ingest has been improved
- The encoder of the Ingest now supports automatic reconfiguration when a format change occurs for the input source, without having to tear down and reconnect the stream via the REST API (Nvidia encoder only)
- The internal audio mixer has received a mute functionality, both for each input in an output bus, and for the master fader of each output bus.
- The internal audio mixer has a new automatic volume transition command, where a single command can be sent to fade the volume to a specified level over a set time
- Audio mixer outputs can now be set up as “post fader auxes”, to follow a certain audio mixer output, possibly removing some of the inputs from the aux mix (so called mix-minus)
- All Control Panel commands for the video mixer nodes are now prefixed with
videoto make them more coherent with the other commands which has the target module as the first keyword. The old way of having just the video node name as first keyword is still supported for backwards compatibility. - The REST API calls to list the Pipelines, Ingests and Control panels with the expand flag set to false will now return the name of the component together with the UUID, for easier mapping between name and UUID.
- The negotiated SRT latency, (i.e. max of the peer’s requested SRT latencies) can now be seen in the REST API for both outputs and SRT sources
- The multithreading performance of MediaStreamers has been improved, allowing more outputs to be set up from Rendering Engines
- The Ingest now supports sending an 8 bit incoming SRT sources as 10 bit HEVC to a production
- The System Controller now performs a version check on the major version of all components when they try to connect, and rejects those with another major version to prevent version mismatches
- Logging of important, successful events, such as stream/controlconnection setups and teardown has been improved
- Resolved an issue with outputs and multi-views where some SRT clients could cause the SRT connection to lock up and sometimes cause the Rendering Engine to freeze for up to two minutes
- SRT sources now have better drift detection and correction
- HTML browsers will no longer display an error message instead of the HTML page when the HTML page failed to load, e.g. if the server was not reachable. Use the logs for debugging why the HTML page is not shown instead
- Fix a bug where the Prometheus metrics endpoint in the System Controller would get stuck, reporting the same old values over and over again in some cases.
- The Prometheus metrics endpoint now stops reporting values for old metrics, whether they are temporarily or permanently gone
- Fix an issue where the lost_frames and dropped_frames counters were wrongly incremented for NDI sources when grabbing thumbnails
- Fix an issue where the TCP ports could lock up in the TCP control panel
- The default settings for the compressor has changed to make it inactive as default
- Logging of new and closed connections in acl-websocketcontrolpanel has been improved
- The Ingest will now return an error when trying to close an SRT source that is in use by a stream
- Fix a bug where the Rendering Engine would hang in some cases when a media player was closed
- Control Commands for the Media and HTML modules are now logged to the control command log
- All applications now shut down gracefully when SIGHUP is sent to them
- Fix bug where the UUID for the output was set to the UUID of the Pipeline for output stream metrics in the Prometheus exporter
- Fix bug where the sides of portrait mode HTML browsers would have video artifacts
- Fix bug where the RTT for Outputs and Multi-views was always reported as 0
- Fix bug where the video mixer could malfunction if the resolution of the Rendering Engine was changed between two productions
Known limitations
Media Player
Videos will be stretched in case the video played does not have the same aspect ratio as the Rendering Engine is using.
GPU performance
The GPU utilization in the Ingest status message is currently not working. Use intel_gpu_top and/or nvidia-smi instead.
MPEG-TS over UDP
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.
Drivers
You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.
Security
No known issues
4 - Release 6.0.0
Build date
2024-01-29
Release status
Type: Sixth production ready release
Release content
Product version
6.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest binary and shared library | agile-live-ingest-6.0.0-5d0d6e4.tar | cd21f5cf57a7ac5a4022d290c4badab87d768bafd8057c8142dc9397beb77086 |
| Rendering Engine binary and acl-libproductionpipeline shared library | agile-live-renderingengine-6.0.0-5d0d6e4.tar | 7aa15accad3a254a0f8a842cc41046f51d5e7a2b586489596831eb6310bf53f2 |
| Generic control panels and acl-libcontroldatasender shared library | agile-live-controlpanels-6.0.0-5d0d6e4.tar | 095ead70169afc0f4f5e2be00fc4507e787955cd4bfd93677a7e61779c0881e1 |
| Include files | agile-live-dev-6.0.0-5d0d6e4.tar | 2686768b00e38bb02fd211da981c55e1399604edbaef317601ea11ae82d31cf1 |
| System Controller | agile-live-systemcontroller-6.0.0-38a4fc7.tar | 86e58778cb5641ac1d7f2761ffabb3a69c51e24cbe2d41ed6b8df6093862f4b8 |
Warning
From this release the components will change from having their individual version numbers to have the same version number as the release (i.e. 6.0.0). This means the version of some components have changed to a lower number, while other have skipped a couple of major versions. In the end this makes it easier to verify all components in a system are from the same release.Changelog
- From this release Ateliere Live will be released as
.debpackages instead of an archive of binaries and shared libs. - To simplify compatibility verifications, all components inside Ateliere Live now have the same version number as the version of the release they belong to, in this release 6.0.0. This means some components have received an older version number compared to earlier and some components have skipped several major versions.
- The component -> System Controller communication has been changed from a request-response type of communication to a one-way communication, where the System Controller won’t send a response back and the component won’t expect a response back.
- More informative error messages from the System Controller in case requests fail
Ingest
- Support for ingesting SRT sources. Both caller and listener mode is supported, with or without passphrase. Currently AVC and HEVC video codecs are supported and AAC audio. New SRT sources can be set up using the REST API.
- Counters for
dropped_frames,lost_framesandduplicated_framesare now split into separate counters for audio and video calleddropped_audio_frames,dropped_video_frames,lost_audio_framesand so on - The NDI interface now supports interlaced NDI sources with individual fields
- The Ingest application now logs the enabled input interfaces more clearly and also outputs the API version of all interfaces supported on the machine.
Rendering Engine
- The Rendering Engine now supports playback of media files directly in the mixer itself. The player supports seeking as well as looping of the entire clip, or a section of the clip.
- The Rendering Engine can send information on the states of all media players to HTML pages. This way graphics can be shown for countdown until a clip ends, or to overlay such information to aid hosts in the studio.
- The generic control panel
acl-tcpcontrolpanelnow accepts multiple connections on a single port. As a result of this, the environment variable has changed name toACL_TCP_ENDPOINTwithout anSand only accepts a single endpoint. - Fix a crash when some invalid control commands was sent to the Rendering Engine.
Production Pipeline
- The visibility of the audio bars in the multi-views is now configurable per multi-view output.
Control Data Sender and Control Data Receiver
No changes
System Controller
- Fields are not correctly marked as “required” or “optional” in the OpenAPI specification served from the System Controller
- Fixed a bug where the metrics for
retransmitted_packetsandsent_byteson the GET requests to multi-view did not increment - The PSK is now checked for complexity. A too simple PSK (for instance just the same letter repeated 32 times) will not be accepted anymore
- Fix for CVE-2023-44487: DOS with HTTP/2
- The list of locations where the System Controller searches for the
acl_sc_settings.jsonfile has changed to just two locations:/etc/opt/agile_livefollowed by the current working directory. - The log file of the System Controller is now created with file permissions that let any user read it
- The public IP of Pipelines are now included in the REST API
Known limitations
Media Player
Videos will be stretched in case the video played does not have the same aspect ratio as the Rendering Engine is using.
GPU performance
The GPU utilization in the Ingest status message is currently not working. Use intel_gpu_top and/or nvidia-smi instead.
MPEG-TS over UDP
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.
Drivers
You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.
Security
No known issues
5 - Release 5.0.0
Build date
2023-10-09
Release status
Type: Fifth production ready release
Release content
Product version
5.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest and Rendering Engine binaries, headers, and shared libraries | agile-live-5.0.0-9d0ae4b.zip | 08681e43e592b7d347752457be7fadfbb1f09d9ba6145714c004003fcc45f666 |
| System Controller | agile-live-system-controller-5.0.0-1820bd9.zip | 826c99d8bc679ebe37762a4cfd408655807b19ac36419f826c9fbee02af1fe91 |
Library details
libacl-ingest.so
Version: 11.0.0
Library containing the core Ingest functionality used by the acl-ingest executable.
libacl-productionpipeline.so
Version: 12.0.0
Library containing the MediaReceiver, MediaStreamer and ControlDataReceiver classes, used to implement a Rendering Engine. Also used by the acl-renderingengine application
libacl-controldatasender.so
Version: 11.0.0
Library containing the ControlDataSender class, used to send control messages to a ControlDataReceiver component.
Changelog
- It is now possible to use hostnames instead of just IP addresses for ACL_SYSTEM_CONTROLLER_IP environment variable.
- HTTPS and client authentication are now enabled by default in the system
- The new environment variable
ACL_CUSTOM_CA_CERT_FILEmakes it possible to set a custom CA certificate to use for verifying the system controller’s certificate. This can be used in cases when the CA certificate cannot be added to the list of OS trusted CA certificates. - SRT logs are now printed to the components’ log files and not just to the terminal
Ingest 11.0.0
- SRT connections to Production Pipelines will now automatically try to reconnect in case the network link goes down.
Rendering Engine 3.0.0
- The Rendering Engine now features a built in HTML renderer using the Chromium web engine through Chromium Embedded Framework. The HTML renderer is capable of opening multiple “browsers”, connected to input slots of the operator’s choice, rendering HTML graphics hosted by HTTP servers or even loading regular webpages.
- A new chroma key node was added to make green screen effects possible.
- The internal audio mixer now features a high pass and a low pass filter
Production Pipeline 12.0.0
- The cadence and speed/quality balance can now be set for the MediaStreamer and Multi view outputs
- MediaStreamer now supports multiple output streams (e.g. both SRT and UDP, or multiple SRTs and UDP outputs with different settings), as long as they use the same encoding settings.
- Performance of the Production Pipeline has been improved. The load on the NvDec chip is reduced by up to ~50% and the load on the CUDA cores reduced by up to ~60% in certain conditions.
- The Multi View outputs now show peak meter audio bars for all views, which makes solving audio problems much easier, as one can see both the audio of the incoming and outgoing video streams.
- The Random Access Indicator (RAI) is now correctly set in the MPEG-TS output streams
- Outputs with SRT in caller mode will now start even if the connection was not successfully made. The SRT connection will try to connect until it succeeds, or is manually closed down. In case the network link is broken, the SRT caller will try to keep connecting until it succeeds or is manually closed down.
Control Data Sender 11.0.0 and Control Data Receiver 12.0.0
- The release now features a new
acl-websocketcontrolpanel, which works like the already existingacl-tcpcontrolpanel, but allows for multiple clients to connect via WebSocket to the control panel instead. - It is now possible to use hostnames instead of just IP addresses when connecting a Control Data Sender or Receiver to another Control Data Receiver.
- Fix bug where it was not possible to disconnect a Control Data Sender/Control Panel from a Receiver and connect it to another Receiver on another port.
System Controller 5.0.0
- The REST API now correctly flags parameters with a default value in the Swagger documentation. These values does not need to be passed in the JSON blob with the REST API call. Parameters without a default value are correctly flagged as required in the documentation.
- The Outputs part of the REST API has been updated to support multiple output streams from the same output component. The name of the REST API endpoints has been moved from
pipelines/{uuid}/outputs/{output_uuid}/streamtopipelines/{uuid}/outputs/{output_uuid}/streamsto reflect this. The POST request will return an id integer to identify the stream within the Output component. A new endpoint[DELETE] pipelines/{uuid}/outputs/{output_uuid}/streams/{stream_id}has been added to close a specific stream. All streams of an output can be closed with the old[DELETE] pipelines/{uuid}/outputs/{output_uuid}/streamsendpoint. - System controller now logs to file. Default log location is
/tmpwith the log file prefixed withacl-system-controller. - Requests to the REST API are now rate limited to prevent overloading the components and to mitigate DOS attacks.
- The IPBB cadence and speed/quality balance can now be specified for the encoder in both Output streams and Multiview output streams.
- Prometheus endpoint now stops reporting metrics for closed streams.
- Improve execution time of
[DELETE] streams/{stream_uuid} - Authentication has been added to the Prometheus endpoint.
- The parameters
ipandportin the[GET] pipelines/{uuid}/outputs/{output_uuid}/streamshas been corrected toremote_ipandremote_port. Their values are now reported correctly. - Security of the System Controller has been improved in several ways.
- Prometheus endpoint has been updated with some missing statistics
- The missing
audio_mappingparameter has been added to the[GET] ingests/{uuid}/streams/{stream_uuid}and[GET] pipelines/{uuid}/streams/{stream_uuid}endpoints. - The
sent_bytesparameter of the output statistics is now incremented as expected for both Multi View outputs and Output streams. - Fixed a bug where the System Controller application would crash when started with a filename as
-settings-pathparameter.
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.
MPEG-TS over UDP
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.
Drivers
You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.
Security
No known issues
6 - Release 4.0.0
Build date
2023-06-16
Release status
Type: Fourth production ready release
Release content
Product version
4.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest and Rendering Engine binaries, headers, and shared libraries | agile-live-4.0.0-d02f52d.zip | 9f95bfe78ab7d295268ad2de913ed18cda8b9407d977feb9afc7f5a738034a73 |
| System Controller | agile-live-system-controller-4.0.0-745ecee.zip | f19331fffa499db7d57d10c99af09b78e94fec5459188d6df832a009b0b92947 |
Library details
libacl-ingest.so
Version: 10.0.0
Library containing the core Ingest functionality used by the acl-ingest executable.
libacl-productionpipeline.so
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
libacl-controldatasender.so
Version: 9.0.0
Library containing the ControlDataSender class, used to send control messages to a ControlDataReceiver component.
Changelog
- 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_SIZEandACL_LOG_MAX_LOG_ROTATIONSto 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.
MediaReceiverAPI has a new methodremoveCustomMultiViewSourceInputto remove a custom feedback input earlier registered usinggetCustomMultiViewSourceInput.- 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-tcpcontrolpanelon 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
sendMultiRequestToReceiversis 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
/streamsendpoint now require anaudio_mappingto 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_framesfor Pipeline streams. It counts fully lost frames, not only broken frames, as thereceived_broken_framescounter. - The counter
lost_packetsin theGET /ingests/{uuid}/streamsendpoints has been removed in favor for thelost_packetsanddropped_packetsin the Pipeline. - Counter
queuing_video_frameshas changed name tovideo_frames_in_queue. - REST API now correctly returns the selected port when automatic port selection is requested (by setting the
local_portto 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.
MPEG-TS over UDP
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.
Drivers
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.
7 - Release 3.0.0
Build date
2023-01-23
Release status
Type: Third production ready release
Release content
Product version
3.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest and Rendering Engine binaries, headers, and shared libraries | acl-3.0.0-d4de107.zip | 4743f2c8c6fe74b09d04a0210747276fac7ef9fa0145a7ee51ec54de4def84dc |
| System Controller | acl-system-controller-3.0.0-10046c8.zip | 919f469ed773bb3ad65735d41dd0942e08b91bd23a317f7227ccdccbc2807437 |
Library details
libacl-ingest.so
Version: 9.0.0
Library containing the core Ingest functionality used by the acl-ingest executable.
libacl-productionpipeline.so
Version: 10.0.0
Library containing the MediaReceiver, MediaStreamer and ControlDataReceiver classes, used to implement a Rendering Engine. Also used by the acl-renderingengine application
libacl-controldatasender.so
Version: 9.0.0
Library containing the ControlDataSender class, used to send control messages to a ControlDataReceiver component.
Changelog
Ingest 9.0.0
- Ingesting interlaced sources is now supported both with the Intel and Nvidia encoders. De-interlacing is automatically applied to interlaced input, so no extra work is needed by the user of the REST API when setting up the stream compared to a progressive source. The implementation supports de-interlacing 50i sources into 50p.
- The Ingest now supports encoding JPEG thumbnails using Nvidia GPUs. For now, only the first Nvidia GPU will be used on multi-GPU systems.
- Earlier when encoding HEVC with the Intel encoder, the setup would fail in case any of the
fast,faster,goodorbetterspeed/quality settings were used, as these were not supported by the encoder. Now these settings are automatically changed to the closest supported setting, i.e.fastandgoodis changed tobalanced,fastertofastestandbettertobest. - The Intel JPEG encoder now supports encoding JPEGs with a width that is not evenly divisible by 16. Also requests for thumbnails with odd number of pixels in width/height will automatically be encoded with one extra pixel in width/height compared to the request, instead of failing the request.
- The Intel JPEG encoder now supports encoding thumbnails of interlaced sources.
Rendering Engine 1.0.0
No new features since last release.
Production Pipeline 10.0.0
- The network endpoints of the incoming streams from the Ingests are now closed after the Ingest has connected.
Control Data Sender 9.0.0 and Control Data Receiver 10.0.0
- Support for connecting multiple ControlDataSenders (or Receivers) to a single ControlDataReceiver is now working again.
- Improved verification of the established connection between ControlData components.
- Message delay can now be set per incoming connection to a ControlDataReceiver.
System Controller 3.0.0
- New version of the REST API, v2, which is served from
/api/v2. The API has been reorganized and cleaned up to make it easier to use. StreamsandControl Connectionsnow get their own unique UUIDs when created using the REST API. This UUID is then used to reference the connection when making changes to and closing the connection. The UUID is returned when the connection is created and is also shown when querying information from the components on both sides of the connection. The oldconnection_idconcept has been completely removed.- The endpoints related to
Control Connectionsare now on the top level and the same endpoints are used whether the connection is originating from a ControlDataSender or a ControlDataReceiver. BothControl ConnectionsandStreamsare now closed using their UUID and the correspondingDELETEendpoints. Also thePATCHendpoints use the UUID of the connection to identify the connection to make changes to. - The
OutputandControl Receiverendpoint has been moved in under thePipelineendpoint to better show their tight connection. When querying the Pipeline endpoint it will return itsOutputsandControl Receivers. - The parameter
idused for an Ingest’s sources has been changed tosource_id. - The parameters
resolution_xandresolution_yhave been changed towidthandheight. - The endpoint for
/componentshas been removed in favor for the/ingests,/pipelinesand/controlpanelsendpoints. - The thumbnail endpoint now has a new parameter
encoderwhere the user can explicitly request that a certain encoder should be used for encoding the thumbnail. Current options areintel_gpu,nvidia_gpuorauto, where the last option will make the Ingest select the best encoder that is supported on the hardware the Ingest is running on.
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.
Drivers
You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.
Audio channels
Only stereo audio is supported with two channels embedded per connected input.
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.
8 - Release 2.0.0
Build date
2022-11-17
Release status
Type: Second production ready release
Release content
Product version
2.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest and Rendering Engine binaries, headers, and shared libraries | acl_2.0.0-4ae95d4.zip | dacc86efa0c2c08b28658e4218abd4ba58f24381a37eba93f0dbac10d9702e2a |
| System Controller | acl_system_controller_2.0.0-85ac2cd.zip | 085465799bae8ceaa201ad462efedcdc19a2ea2f80e99c1332efc88ac0ce82dd |
Library details
libacl-ingest.so
Version: 8.0.0
Library containing the core Ingest functionality used by the acl-ingest executable.
libacl-productionpipeline.so
Version: 9.0.0
Library containing the MediaReceiver, MediaStreamer and ControlDataReceiver classes, used to implement a Rendering Engine. Also used by the acl-renderingengine application
libacl-controldatasender.so
Version: 8.0.0
Library containing the ControlDataSender class, used to send control messages to a ControlDataReceiver component.
Changelog
The supported OS has changed from Ubuntu 20.04 LTS to Ubuntu 22.04 LTS. Official support for Ubuntu 20.04 LTS is dropped from this release.
Ingest 8.0.0
- Changed to epoch aligned timestamps
- Improve duplicating and dropping of frames to cover up drifting cameras
- Expose counters for dropped, duplicated and lost frames per source in the REST API
- Fix a memory leak when generating thumbnails
- Interlaced sources are now shown in the REST API and correctly marked as interlaced
- Improved support for detecting connection and disconnection of SDI cables at runtime, as well as changes in the format of the sent SDI stream.
- Applications are now stopped by pressing
Ctrl-Cinstead of pressing enter to prevent accidental stopping - Thumbnails and source info are now cached for each source to improve response time in the REST API. This means that sources that are not connected to any production will only update its thumbnails and source info every ~5 seconds or so. Sources that are connected will update the info continuously.
- The field
activefor sources in the REST API was not working before and has now been removed in favor for a new fieldin_usewhich indicates if a source is currently being streamed somewhere or not. - Log files will now get a unique name by appending the date of creation to the filename
- Log files will now have the same log level as the terminal output
- Appending the
--helpflag to the ingest executable will print information about the binary and list the environment variables - A stack trace is now printed in case the application should crash
Rendering Engine 1.0.0
- First version of the Rendering Engine application
- Support for program, preview and cutting between them
- Support for fading between sources over a given time
- Support for graphics with key (alpha) by ingesting the fill and key (color and alpha) as two separate sources
- Support for fade to black
- Support for setting the audio volume per source
Production Pipeline 9.0.0
- Support for tally borders in the Multi-view generator with new API for setting and clearing the borders from the Rendering Engine in the
MediaReceiverclass. - Updated API for passing video memory to and from the Rendering Engine, now uses RAII classes for automatic memory handling. See upgrade guide for more details.
- The
MediaReceivernow passes themRenderingTimestampto the Rendering Engine, i.e. the timestamp when the frame was delivered. - Alignment is internally rounded to the nearest even frame time. This together with the changes in the Ingest results in that the frames delivered to the
RenderingEnginewill have rendering timestamps that are evenly devisable by the frame time. - PTS in
MediaStreamers are now calculated based on themRenderingTimestamp, instead of a newly taken timestamp when the frame was sent to theMediaStreamer. This will make the PTSes of the output streams equidistant, even if the Rendering Engine jitters slightly. - New class
PipelineSystemControllerInterfaceFactoryto help Rendering Engine implementors in creation ofSystemControllerConnections by reducing code duplication
Control Data Sender 8.0.0 and Control Data Receiver 9.0.0
- The control channel between
ControlDataSendersandControlDataReceiversare now encrypted by default. Read more about it in the security tutorial - The support for connecting multiple
ControlDataSendersorControlDataReceiversto anotherControlDataReceiveris temporarily disabled.
System Controller 2.0.0
- Added support for HTTPS communication with the REST API and encrypted connections between the components and the System Controller. Read about how to activate it in the security tutorial
- Components now automatically reconnects to the System Controller in case they loose connection to it. This means that the System Controller can be restarted during a broadcast and all components will automatically reconnect to it once it turns up again on the network. It also means that components can be started before the System Controller and get connected as soon as the System Controller is started
- REST API now features basic authentication. Read more about it in the security tutorial
- Streams (of audio and video) between Ingests and Production Pipelines are now automatically encrypted when set up by the System controller
- Control connections between Control Panels and Production Pipelines are now automatically encrypted when set up by the System controller
- Fix a bug where the System Controller would not search for the config file in all the directories listed in the documentation. Also make the application search in the application’s directory and not only the current working directory.
- New endpoint
[PATCH] /pipelines/{uuid}/streamconnections/{connection_id}to change the alignment of an already created stream during runtime. Note that changing the alignment will cause the audio and video of that stream to make a sudden jump and/or freeze for a moment, so it is not recommended to do this on stream connections that are on air - The endpoint
[POST] /streamnow has improved error messages in case the System Controller failed to start the stream. The endpoint also closes the Pipeline’s stream connection instead of leaving it open in case the Ingest failed to start the stream - The
[DELETE]endpoints for the specific components has been removed in favor for the general[DELETE] /components/{uuid}endpoint - Fix a bug where the System Controller would crash in some rare cases when a component is shut down at the same time as a REST request is using that component.
- Fix some false positive log outputs
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.
Drivers
You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.
Number of Control Senders per Control Receiver
For now the system is limited to only connect one Control Sender (or Receiver) to another Control Receiver. This means that, for now, it is only possible to connect a single Control Panel to a production.
Audio channels
Only stereo audio is supported with two channels embedded per connected input.
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.
9 - Release 1.0.0
Build date
2022-06-23
Release status
Type: First production ready release
Release content
Product version
1.0.0
Release artifacts
| Details | Filename | SHA-256 |
|---|---|---|
| Ingest binary, headers, and shared libraries | acl_v1.0.0-336067b-release.zip | f2beb75a0109403860d455bde14618e4e7a9bbf690b5a7ed79f743fb19224cef |
| Ingest binary, Headers, and shared libraries, debug build | acl_v1.0.0-336067b-debug.zip | e555ea542b84f73008efa0ab3769835e456c31f499ef88d6a315bb0506592d04 |
| System Controller | acl_system_controller_v1.0.0-0f2417f.zip | 82094afe07da10c81d96fab03babca1737ca48f57c2cde9584babebbe44db947 |
Library details
libacl-ingest.so
Version: 7.0.0
Library containing the IngestApplication class used to implement an Ingest component.
libacl-productionpipeline.so
Version: 8.0.0
Library containing the MediaReceiver, MediaStreamer and ControlDataReceiver classes, used to implement a Rendering Engine.
libacl-controldatasender.so
Version: 7.0.0
Library containing the ControlDataSender class, used to send control messages to a ControlDataReceiver component.
Changelog
Ingest 7.0.0
- New metrics are available for the Ingest streamconnections in the REST API that can be used to monitor the streams.
- Fixed bug where the Ingest would crash with a
std::runtime_errorif grabbing a thumbnail on hardware without an Intel CPU with integrated GPU. - Improved error messages for encoders and sources.
- Missing fields in the REST API for the Ingests have been added, such as
max_network_latency_msfor streamconnections. - Logs are now automatically flushed every 5 seconds.
- The class
StaticIngestSystemControllerhas been removed, please use theSystemControllerConnectionclass and the system controller instead.
Production Pipeline 8.0.0
- New metrics are available for the Pipeline streamconnections and Output in the REST API that can be used to monitor the streams.
- Fixed the AUD format in MEPG-TS output of the Pipelines when using HEVC, which earlier caused clicks in the audio channel and a lot of
Invalid NAL unit 4, skipping.errors when playing back the streams using ffmpeg. - Support for labels (so-called “Under Monitor Display”, UMD) in the multi-view outputs. The labels are set through the REST API when setting up multi-view outputs and can be changed at runtime.
- Missing fields in the REST API for the Pipelines have been added, such as
max_network_latency_ms,alignment_msandconvert_color_rangefor streamconnections. - Fixed DTS calculation for output streams in both the Multi-view generator and Output components.
- The network connections between a
ControlDataReceiverand otherControlDataReceiversare now using TCP as protocol instead of SRT, which means that the messages are delivered as soon as they arrive and that no control messages will be dropped due to to timeouts in the transport. - Fixed a minor CUDA memory leak in the multi-view generator that caused a slow, constantly growing GPU memory usage.
- Fixed CUDA memory corruption sometimes occurring when stopping and quickly restarting a multi-view output.
- Nvidia Ampere GPUs are now working with older CUDA drivers than version 510.
- Logs are now automatically flushed every 5 seconds.
- The classes
StaticMediaReceiverSystemControllerandStaticMediaStreamerSystemControllerhave been removed, please use theSystemControllerConnectionclass and the system controller instead.
Control Data Sender 7.0.0 and Control Data Receiver 8.0.0
- The network connections between a
ControlDataSenderandControlDataReceiversare now using TCP as protocol instead of SRT, which means that the messages are delivered as soon as they arrive and that no control messages will be dropped due to timeouts in the transport. - The classes
StaticControlDataSenderSystemControllerandStaticControlDataReceiverSystemControllerhave been removed, please use theSystemControllerConnectionclass and the System Controller instead.
System Controller 1.0.0
- Support for setting CORS and custom HTTP response headers in the configuration file.
- Improved validation of HTTP request payloads and improved error messages.
- New endpoint for deleting any type of component,
[DELETE] /component. - New, built-in Prometheus exporter, accessible through endpoint at
[GET] /metrics. - The version of the running system controller is now returned in each HTTP response in the
X-Binary-Versionheader.
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.
Drivers
You need to install the CUDA Toolkit on Ingest machines, even if they don’t have Nvidia cards.
MPEG-TS output
The timestamps in the MPEG-TS output are not equidistant, which might confuse some playback tools. Playback the stream using a tool that works for now, such as ffmpeg.
Pre-shared key
The pre-shared key used to authorize components in the System controller is currently hard-coded into the Ingest application. This means that the psk in the System controller’s example config file must be used, otherwise is it not possible to connect an Ingest to the system.
10 - Upgrade instructions
Upgrade to 9.0.0 from 8.0.0
- The
acl-websocketcontrolpanelapplication has changed name toacl-websocketcontrolproxy. Apart from this, the application works the same way as before.
System Controller
- Before connecting streams to a Pipeline the endpoint
[PUT] /pipelines/{uuid}/renderingengine/formatmust be called to set the required resolution and frame rate of the pipeline. Use[GET] /pipelines/{uuid}/renderingengine/formatto get the currently set format. The PUT endpoint can only be called when all inputs, outputs and control connections are closed. At startup the default format is set to 1920x1080 50 FPS.
Upgrade to 8.0.0 from 7.0.0
The control protocol has been changed. For more information see the new protocol description.
System Controller
- The endpoint
[POST] /pipelines/{uuid}/resethas been deprecated and moved to[POST] /pipelines/{uuid}/renderingengine/reset. The old endpoint is kept for backwards compatibility.
C++ SDK
- All C++ classes has been moved into the
Aclnamespace, make sure to prependAcl::where needed. - The callbacks
ControlDataSender::Settings::mConnectionStatusCallbackandIControlDataReceiver::Settings::mConnectionStatusCallbackhas been removed and replaced by a new callbackmConnectionEventCallback. With this the enum classConnectionTypeand structConnectionStatushas been removed and replaced by enum classEventTypeand structConnectionEvent. With the old callback only connection notifications from the directly connected components would be sent to the user. With this new event callback, connection event notifications are propagated from other components, not directly connected to the user. ControlDataSender::sendRequestToReceiversandIControlDataReceiver::sendStatusMessageToSenderandIControlDataReceiver::sendRequestToReceivershas parameter type of the request data from avector<uint8_t>to anstd::string. TheControlDataSender::sendRequestToReceiversalso has two new parameters for requester UUID, used to identify clients of the control panel in case there are multiple such, and the number of hops to send the message.- The
ControlDataSender::sendMultiRequestToReceiversandIControlDataReceiver::sendMultiRequestToReceiversmethods has been removed in favor for implementing multi message requests in the underlying protocol instead. IControlDataReceiverhas changed from a push to a pull-based implementation where themIncomingRequestCallbackwas removed and replaced by agetRequestsmethod where the application can ask theIControlDataReceiverfor all messages that should have been delivered by a specific time point. ThemPreviewIncomingRequestCallbackwas also removed without a replacement.- UUIDs now use a custom class instead of raw strings in the SDK.
Upgrade to 7.0.0 from 6.0.0
System Controller
- All REST API calls now must use the
/api/v3prefix - The UUID of the Control Receivers has been removed, use the UUID of the Pipeline instead in
[POST] /controlconnections - All endpoints starting with
/pipelines/{uuid}/controlreceivershave been removed. To get the statistics of the controlreceiver, see thecontrolreceiverpart of the response from the[GET] /pipelines/{uuid}?expand=truerequest. In this response theconnected_tohas been renamedoutgoing_connectionsand the list of incoming connections insidelistening_interfacehas been moved out of that object and namedincoming_connections - The parameter
connected_toin, among other endpoints,[GET] /controlpanels/{uuid}has been renamed tooutgoing_connections - The
statusJSON object for responses from controlreceivers, controlpanels and outputs has been removed and all parameters inside of it has been moved out
C++ SDK
ControlDataReceiverandMediaStreamerclasses have now been removed from the SDK and replaced by the interface classesIControlDataReceiverandIMediaStreamer. UseMediaReceiver::createMediaStreamerOutputto create newMediaStreamerinstances andMediaReceiver::getControlDataReceiverto get theControlDataReceiverinstance.getGitRevision()andgetBuildInfo()have been removed from the SDK. UsegetVersion()instead.MediaReceiver::Settingsnow have a new functionmResetCallbackthat must be set to a callback that should be called- A new parameter
const ControlDataReceiver::Settings& receiverSettingsis required when callingMediaReceiver::startto set up the internalControlDataReceiver.
Upgrade to 6.0.0 from 5.0.0
System Controller
- In endpoints
/ingests/{uuid}?expand=true,/ingests/{uuid}/sourcesand/ingest/{uuid}/sources/{source_id}these three metrics has been split into audio and video variants:acl_ingest_source_dropped_frameshas been split intoacl_ingest_source_dropped_audio_framesandacl_ingest_source_dropped_video_frames, metricacl_ingest_source_duplicated_framesis split intoacl_ingest_source_duplicated_audio_framesandacl_ingest_source_duplicated_video_frames; andacl_ingest_source_lost_framesis split intoacl_ingest_source_lost_audio_framesandacl_ingest_source_lost_video_frames. - In case the entropy of the PSK set in the System Controller was too low, the System Controller won’t start. Generate a new PSK and use that one.
- The System Controller does not longer search for the configuration file
acl_sc_settings.jsonin the directories/etc/acl_system_controller,/app,/service,/acl_system_controlleror/opt/acl_system_controller. Either put the file in the current working directory of the system controller application, in the directory/etc/opt/agile_live, or explicitly point at the directory of the config file using the flag--settings-path <PATH>when starting the System Controller.
Rendering Engine
- For the
acl-tcpcontrolpanelthe environment variableACL_TCP_ENDPOINTShas changed name toACL_TCP_ENDPOINTand only accept a single endpoint. This endpoint will now accept multiple connections.
C++ SDK
AlignedFrame::PixelFormathas been replaced withACL::PixelFormat, found in PixelFormat.h.ISystemControllerInterface::sendRequesthas been replaced withISystemControllerInterface::sendMessage, the System Controller will no longer send a response on messages. Since connection is over TCP, if the message could be sent, it has arrived properly to the System Controller, so there is no need for a response message that verifies that.
Upgrade to 5.0.0 from 4.0.0
System Controller
- Endpoints
/pipelines/{uuid}/outputs/{output_uuid}/streamhave been moved to/pipelines/{uuid}/outputs/{output_uuid}/streamsto indicate multiple streams for the same Output can be created. The POST request takes the same parameters as before, but returns an ID of the newly created stream, which is globally unique together with the UUID of the Output. As of now, it is only possible to start multiple streams if the encoder settings match for all streams. Use the new endpoint[DELETE] /pipelines/{uuid}/outputs/{output_uuid}/streams/{stream_id}to stop a stream with a given ID. - The response of
[GET] /pipelines/{uuid}/outputs/{output_uuid}/streamsdiffers from the old variant. In the new one not just a single active stream is presented, but a list ofactive_streams. - The
[POST] /pipelines/{uuid}/outputs/{output_uuid}/streamand[POST] /pipelines/{uuid}/multiviewsendpoints now support setting thepic_modeandspeed_quality_balanceto control the quality of the encoding. While they don’t have to be explicitly specified in the REST API request as they have default values (pic_mode_ipandbalanced), it might be desirable to manually specify them.
ProductionPipeline
MediaReceiver::starthas changed signature. It now takes aCUcontextas the second parameter, which should be a CUDA context reference to the device to run the CUDA operations on.- The
MediaReceiver::Settingsstruct has a new parametermAlignedFrameFreeStreamwhich should be a CUDA stream within the CUDA context passed to theMediaReceiver::startmethod, to use as the stream to make the asynchronous free on, after all the DeviceMemory pointers have been released. MediaStreamer::configurenow has a second parameter to aCUcontext, which is the CUDA context defining which device to run the MediaStreamer on.PipelineSystemControllerInterfaceFactoryconstructor now takes an extracustomCaCertFileparameter, pointing out an optional CA certificate file to use for validating certificates from the System Controller.
Upgrade to 4.0.0 from 3.0.0
System Controller
- The endpoint
POST /streamsnow require two additional parametersaudio_formatandaudio_mapping. The first one selects ifAAC-LCor the newOpuscodec should be used for audio encoding. AAC-LC has slightly higher quality, but is slower to encode. Opus has a lower latency and gives better quality at lower bitrates. The second parameter,audio_mappingtells the Ingest which audio channels to pick from the source and if they should be encoded as mono or stereo streams. (Stereo streams save bandwidth, but does not need to be used as stereo in the Rendering Engine). For example the mapping[4, [1, 2], 0]will result in 4 channels out in the Rendering Engine, where the channel with index 4 is output at index 0 and encoded as a mono channel, index 1 and 2 in the Ingest are encoded as stereo and output at channels 1 and 2 in the output and channel 0 in the input is encoded as mono and output to channel 3 in the output. Channel 4 in the input (and 5 and above) are ignored. To get the same behavior as in the previous release, passAAC-LCand[[0,1]]respectively foraudio_formatandaudio_mapping. - Metric
queueing_video_frameshas changed name tovideo_frames_in_queue. - In
POST /pipelines/{uuid}/outputs/{output_uuid}/streamandPOST /pipelines/{uuid}/multiviewsthe parametersipandportare removed and replaced by four parameters calledlocal_ip,local_port,remote_ipandremote_port. In MPEG-TS over SRT mode, their useage depends on the SRT mode. When in listener mode (srt_mode == listener) only thelocal_ipandlocal_portare used to set the address to listen to. Setlocal_portto 0, to make the OS automatically pick an available port. In SRT caller mode bothlocal_ip,local_portandremote_ip,remote_portare used. Theremote_*ones define the remote address to connect to and thelocal*ones the local address to bind to. To get the old behavior, where the local bind address is automatically chosen, setlocal_ipto0.0.0.0andlocal_portto 0 to automatically pick an unused port. For MPEG-TS over UDP mode, set the address to send the stream to using theremote_*parameters (Thelocal_*variants should be present but must be set to0.0.0.0and0, currently). - The output of the
GET /pipelines/{uuid}/outputs/{output_uuid}/streamandGET /pipelines/{uuid}/multiviewsendpoints have changed the layout. See the REST API documentation for more details. - The
video_kilobit_rateparameter inGET /pipelines/{uuid}/streams/{stream_uuid}has been removed. Use the same parameter in theGET /ingests/{uuid}/streams/{stream_uuid}endpoint instead. - The counter
lost_packetsin theGET /ingests/{uuid}/streams/{stream_uuid}endpoint has been removed in favor for thelost_packetsanddropped_packetsin the Pipeline.
ProductionPipeline
- The API of
ControlDataReceiver::IncomingRequesthas changed to get anstd::vectorof messages (std::vector<uint8_t>), to allow multiple messages to be delivered at the same time point. Just loop through the messages and handle them as before. - The settings for
mDebugVideoandmDebugAudiohas been removed fromMediaReceiver::Settings.
Upgrade to 3.0.0 from 2.0.0
System Controller
- The System Controller uses the new API prefix
/api/v2, so all calls must update to this API version. The old API/api/v1has been removed. - All calls to the Control Receiver and Output endpoints must be updated, as these have been moved in under the
/pipelinesendpoint. See the REST API reference for details. - When setting up Control Connections, the old
[POST] /controlpanels/{uuid}/controlconnectionsand[POST] /controlpanels/{uuid}/controlconnectionsendpoints have been replaced with a single endpoint[POST] /controlconnections. The sending side component (whether a Control Panel or a Control Receiver) is passed as a parameter in the JSON HTTP body. Delete endpoints forcontrolconnectionsformerly under Control Panel and Control Receiver, have been replaced with a single endpoint[DELETE] /controlreceivers/{uuid}, which will close both sides of the connection. - When closing streams, the
[DELETE] /ingests/{uuid}/streamconnections/{connection_id}and[DELETE] /pipeline/{uuid}/streamconnections/{connection_id}have been replaced by a single endpoint[DELETE] /streams/{uuid}, which will close down both sides of the Stream. - The endpoints for getting information from either the Ingest or Pipeline end of a Stream has been moved from
[GET] /ingests/{uuid}/streamconnections/{connection_id}and[GET] /pipeline/{uuid}/streamconnections/{connection_id}to[GET] /ingests/{uuid}/streams/{stream_uuid}and[GET] /pipeline/{uuid}/streams/{stream_uuid}, wherestream_uuidis the system-wide, unique identifier of the stream and is the same UUID on both the Ingest and Pipeline side of the connection in contrast to the oldconnection_idwhich was different in the Ingest and the Pipeline. - The endpoint for changing the alignment of a stream has been moved from
[PATCH] /pipelines/{uuid}/streamconnections/{connection_id}to[PATCH] /streams/{uuid}. - The parameter
idreferring to a source has changed name tosource_idin[POST] /streamsand in responses from the Ingest when querying for information on the Sources or Streams. - The parameters
resolution_xandresoulution_yhave changed name towidthandheightin several endpoints, among others the[POST] /streamsand[POST] /ingests/{uuid}/sources/{source_id}/thumbnail. - The thumbnails endpoint has been moved from
[POST] /ingests/{uuid}/thumbnailto[POST] /ingests/{uuid}/sources/{source_id}/thumbnail, passing thesource_idparameter in the path instead of the JSON HTTP body. - The new
encoderparameter must be specified when requesting thumbnails using the[POST] /ingests/{uuid}/sources/{source_id}/thumbnailendpoint. Set it toautounless a specific implementation is required.
Upgrade to 2.0.0 from 1.0.0
System Controller
- Make sure to generate a new PSK (pre-shared key) for the
acl_sc_settings.jsonfile. This will be used to authorize components connecting to the System controller. All components connecting to the System controller must use the same PSK set using the environment variableACL_SYSTEM_CONTROLLER_PSK. In case a component is started without the environment variable it will log an error and stop. Read more about this in the Security tutorial.
ProductionPipeline
- The API of the former struct
AlignedData::DataFramehas changed.- The namespace
AlignedDatahas been removed and the struct itself has been renamed toAlignedFrame. The enumsCompressedVideoFormatandPixelFormatand typedefAudioSampleRowhave been moved inside the struct. - The field
mPTShas been removed and replaced by two new fieldsmCaptureTimestampandmRenderingTimestamp, where the first is the TAI timestamp in mircoseconds since the UNIX epoch when the frame was captured by the Ingest and the second one is the timestamp when the frame was delivered to the Rendering Engine from theMediaReceiver. Both these timestamps are rounded to the nearest even frame step since the UNIX epoch, which should make it easier to group frames with the same rendering time. ThemRenderingTimestampis also used by theOutputStreamerto calculate the timestamps for the outgoing streams, so in case the Rendering Engine creates newAlignedFrameinstances, make sure this value is incremented correctly for each frame that is put to theOutputStreamer. - The CUDA pointer
mVideoDataCudaPtrhas been removed in favor for anstd::shared_ptrto an RAII class calledDeviceMemorythat keeps track of the CUDA memory pointer adn releases the memory automatically once not longer used by anyone. This makes it possible for the Rendering Engine to make copies of the shared pointer and then discard theAlignedFrameit was delivered with, in order to, for instance, cache the video frame or to handle video and audio data separately. Please do remember that theDeviceMemoryfrom theAlignedFrames delivered by theMediaReceiveris read-only and should never be changed by any CUDA kernel, as this memory is also used by the multi-view generator to generate the multi-view outputs. The Rendering Engine might copy the shared pointer and keep it at long as it wants to, but never change the content of theDeviceMemoryor write to the CUDA memory pointed to by it.AlignedFrames(andDeviceMemoryinstances made outside of anAlignedFrame) created by the Rendering Engine can of course be changed and used freely.
- The namespace