NTP
Agile Live NTP instructions
This page describes the steps needed to install and configure the base platform.
Agile Live has a few dependencies on third party software that have to be installed separately first. Which ones are needed depends on the component of Agile Live that you will be running on the specific system.
A machine running the Ingest needs the following:
A machine running the Rendering Engine only needs a subset:
A machine running control panels needs yet fewer:
For video encoding and decoding on NVidia GPUs you need Nvidia CUDA Toolkit installed. It must be installed on Ingest machines even if they don’t have Nvidia cards.
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
sudo apt -y install cuda
You need to reboot the system after installation. Then check the installation by running nvidia-smi
. If installing more dependencies, it is ok to proceed with that and reboot once after installing all parts.
All machines running the Ingest application need the Intel oneAPI Video Processing Library (oneVPL) installed. It is used for encoding and thumbnail processing on Intel GPUs and is required even for Ingests which will not use the Intel GPU for encoding. Install oneVPL by running:
sudo apt install -y gpg-agent wget
# Download and run oneVPL offline installer:
# https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#onevpl
VPL_INSTALLER=l_oneVPL_p_2023.1.0.43488_offline.sh
wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e2f5aca0-c787-4e1d-a233-92a6b3c0c3f2/$VPL_INSTALLER
chmod +x $VPL_INSTALLER
sudo ./$VPL_INSTALLER -a -s --eula accept
# Install the latest general purpose GPU (GPGPU) run-time and development software packages
# https://dgpu-docs.intel.com/driver/client/overview.html
wget -qO - https://repositories.intel.com/graphics/intel-graphics.key | \
sudo gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/graphics/ubuntu jammy arc' | \
sudo tee /etc/apt/sources.list.d/intel.gpu.jammy.list
sudo apt update
sudo apt install -y ffmpeg intel-media-va-driver-non-free libdrm2 libmfx-gen1.2 libva2
# Add VA environment variables
if [[ -z "${LIBVA_DRIVERS_PATH}" ]]; then
sudo sh -c "echo 'LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri' >> /etc/environment"
fi
if [[ -z "${LIBVA_DRIVER_NAME}" ]]; then
sudo sh -c "echo 'LIBVA_DRIVER_NAME=iHD' >> /etc/environment"
fi
# Give users access to the GPU device for compute and render node workloads
# https://www.intel.com/content/www/us/en/develop/documentation/installation-guide-for-intel-oneapi-toolkits-linux/top/prerequisites/install-intel-gpu-drivers.html
sudo usermod -aG video,render ${USER}
# Set environment variables for development
echo "# oneAPI environment variables for development" >> ~/.bashrc
echo "source /opt/intel/oneapi/setvars.sh > /dev/null" >> ~/.bashrc
You need to reboot the system after installation. If installing more dependencies, it is ok to proceed with that and reboot once after installing all parts.
If the Ingest shall be able to use Blackmagic DeckLink SDI cards, the drivers need to be installed.
Download https://www.blackmagicdesign.com/se/support/family/capture-and-playback (Desktop Video).
Unpack and install (Replace all commands with the version you downloaded):
sudo apt install dctrl-tools dkms
tar -xvf Blackmagic_Desktop_Video_Linux_12.7.tar.gz
cd Blackmagic_Desktop_Video_Linux_12.7/deb/x86_64
sudo dpkg -i desktopvideo_12.7a4_amd64.deb
For machines running Ingests, you need to install the NDI library and additional dependencies:
## Install library
sudo apt -y install avahi-daemon avahi-discover avahi-utils libnss-mdns mdns-scan
wget https://downloads.ndi.tv/SDK/NDI_SDK_Linux/Install_NDI_SDK_v5_Linux.tar.gz
tar -xvzf Install_NDI_SDK_v5_Linux.tar.gz
PAGER=skip-pager ./Install_NDI_SDK_v5_Linux.sh <<< y
cd NDI\ SDK\ for\ Linux/lib/x86_64-linux-gnu/
NDI_LIBRARY_FILE=$(ls libndi.so.5.*.*)
cd ../../..
sudo cp NDI\ SDK\ for\ Linux/lib/x86_64-linux-gnu/${NDI_LIBRARY_FILE} /usr/lib/x86_64-linux-gnu
sudo ln -fs /usr/lib/x86_64-linux-gnu/${NDI_LIBRARY_FILE} /usr/lib/x86_64-linux-gnu/libndi.so
sudo ln -fs /usr/lib/x86_64-linux-gnu/${NDI_LIBRARY_FILE} /usr/lib/x86_64-linux-gnu/libndi.so.5
sudo ldconfig
sudo cp NDI\ SDK\ for\ Linux/include/* /usr/include/.
When installing version 5.0.0 or earlier, please refer to this guide for this step.
All systems that run an Ingest, Rendering Engine or Control Panel need chrony as NTP client.
The systemd-coredump
package is also really handy to have installed to be able to debug core dumps later on, but is technically optional.
These packages can be installed with the apt package manager:
sudo apt -y update && sudo apt -y upgrade && sudo apt -y install chrony systemd-coredump
To prepare the system for Agile Live, the NTP client must be configured correctly by following this guide, and some general Linux settings shall be configured by following this guide. Also, CUDA should be prevented from automatically installing upgrades by following this guide.
When installing version 5.0.0 or earlier, please refer to this guide for this step.
The following Agile Live .deb packages are distributed:
All binaries will be installed in the directory /opt/agile_live/bin
. Libraries are installed in /opt/agile_live/lib
. Header files are installed in /opt/agile_live/include
.
To install the Ingest application, install the following .deb-packages:
sudo apt -y install ./acl-ingest_<version>_amd64.deb ./acl-libingest_<version>_amd64.deb
To install the Rendering Engine application, install the following .deb-packages:
sudo apt -y install ./acl-renderingengine_<version>_amd64.deb ./acl-libproductionpipeline_<version>_amd64.deb
To install the generic Control Panel applications acl-manualcontrolpanel
, acl-tcpcontrolpanel
and acl-websocketcontrolpanel
, install the following .deb-packages:
sudo apt -y install ./acl-controlpanels_<version>_amd64.deb ./acl-libcontroldatasender_<version>_amd64.deb
To install the acl-dev package containing the header files needed for building your own applications, install the following .deb-package:
sudo apt -y install ./acl-dev_<version>_amd64.deb
The Ingest component is a binary which ingests raw video input sources such as SDI or NDI, timestamps, processes, encodes and originates transport to the rest of the platform.
Settings for the ingest binary are added as environment variables. There is one setting that must be set:
ACL_SYSTEM_CONTROLLER_PSK
shall be set to the same as in the settings file of the System ControllerAlso, there are some parameters that have default settings that you will most probably want to override:
ACL_SYSTEM_CONTROLLER_IP
and ACL_SYSTEM_CONTROLLER_PORT
shall be set to the location where the System Controller is hostedACL_INGEST_NAME
is optional but is well used as an aid to identify the Ingest in the REST interface if multiple instances are connected to the same System ControllerYou may also want to set the log location by setting ACL_LOG_PATH
. The log location defaults to /tmp/
.
--help
flag, e.g. ./acl-ingest --help
.As an example, from the installation directory, the Ingest is started with:
ACL_SYSTEM_CONTROLLER_IP="10.10.10.10" ACL_SYSTEM_CONTROLLER_PORT=8080 ACL_SYSTEM_CONTROLLER_PSK="FBCZeWB3kMj5me58jmcpmEd3bcPZbp4q" ACL_INGEST_NAME="My Ingest" ./acl-ingest
If started successfully, it will display a log message showing that the Ingest is up and running.
It may be useful to run the Ingest SW as a service in Ubuntu, so that it starts automatically on boot and restarts if it terminates abnormally. In Ubuntu 22.04 systemd
manages the services. Here follows an example of how a service can be configured, started and monitored.
First create a “service unit file”, named for example /etc/systemd/system/acl-ingest.service
and put the following in it:
[Unit]
Description=Agile Live Ingest service
[Service]
User=<YOUR_USER>
Environment=ACL_SYSTEM_CONTROLLER_PSK=<YOUR_PSK>
ExecStart=/bin/bash -c '\
source /opt/intel/oneapi/setvars.sh; \
exec /opt/agile_live/bin/acl-ingest'
Restart=always
[Install]
WantedBy=multi-user.target
Replace <YOUR_USER>
with the user that will be executing the Ingest binary on the host machine. The Environment
attribute should be set in the same way as described above for manually starting the binary.
After saving the service unit file, run:
sudo systemctl daemon-reload
sudo systemctl enable acl-ingest.service
sudo systemctl start acl-ingest
The service should now be started. The status of the service can be queried using:
sudo systemctl status acl-ingest.service
The production pipeline component and the rendering engine component are combined into one binary named acl-renderingengine
and terminates transport of media streams from ingests, demuxes, decodes, aligns according to timestamps and clock sync, separately mixes audio and video (including HTML-based graphics insertion) and finally encodes, muxes and originates transport of finished mixed outputs as well as multiviews.
It is possible to run just one production pipeline if doing direct editing (the “traditional way”, in the stream) or to use two pipelines in order to set up a proxy editing workflow. In the latter case, there is one designated for the Low Delay flow which will be used for quick feedbacks on the editing commands and one designated for High Quality flows which will produce the final quality stream to broadcast to the viewers. The Production Pipeline is simply called a “pipeline” in the REST API. The rendering engine is not managed through the REST API but rather through the control command API from the control panels.
Settings for the production pipeline binary are added as environment variables. There is one setting that must be set:
ACL_SYSTEM_CONTROLLER_PSK
shall be set to the same as in the settings file of the System ControllerAlso, there are some parameters that have default settings that you will most probably want to override:
ACL_SYSTEM_CONTROLLER_IP
and ACL_SYSTEM_CONTROLLER_PORT
shall be set to the location where the System Controller is hostedACL_RENDERING_ENGINE_NAME
is needed to identify the different production pipelines in the REST API and shall thus be set uniquely and descriptivelyACL_MY_PUBLIC_IP
shall be set to the IP address or hostname where the ingest shall find the production pipeline. If the production pipeline is behind a NAT or needs DNS resolving, setting this variable is necessaryDISPLAY
is needed but may already be set by the operating system. If not (because the server is headless) it needs to be set.DISPLAY
environment variable, run an instance of Xvfb
to provide the virtual “display” to point towards. E.g. start Xvfb by running Xvfb -ac :99 -screen 0 1280x1024x16
, and when starting the Rendering Engine set DISPLAY=:99
. It is recommended to start Xvfb
as a service on headless machines.You may also want to set the log location by setting ACL_LOG_PATH
. The log location defaults to /tmp/
.
Here is an example of how to start two instances (one for Low Delay flow and one for High Quality Flow) of the acl-renderingengine application and name them accordingly so that you and the GUI can tell them apart. First start the Low Delay instance by running:
ACL_SYSTEM_CONTROLLER_IP="10.10.10.10" ACL_SYSTEM_CONTROLLER_PORT=8080 ACL_SYSTEM_CONTROLLER_PSK="FBCZeWB3kMj5me58jmcpmEd3bcPZbp4q" ACL_RENDERING_ENGINE_NAME="My LD Pipeline" ./acl-renderingengine
Then start the High Quality Rendering Engine in the same way:
ACL_SYSTEM_CONTROLLER_IP="10.10.10.10" ACL_SYSTEM_CONTROLLER_PORT=8080 ACL_SYSTEM_CONTROLLER_PSK="FBCZeWB3kMj5me58jmcpmEd3bcPZbp4q" ACL_RENDERING_ENGINE_NAME="My HQ Pipeline" ./acl-renderingengine
acl-tcpcontrolpanel
is a control panel application that starts a TCP server on a configurable set of endpoints and relays control commands over a control connection if one has been set up. It is preferably run geographically very close to the control panel whose control commands it will relay, but can alternatively run close to the production pipeline that it is connected to. To start with, it is easiest to run it on the same machine as the associated production pipeline.
Settings for the tcp control panel binary are added as environment variables. There is one setting that must be set:
ACL_SYSTEM_CONTROLLER_PSK
shall be set to the same as in the settings file of the System ControllerAlso, there are some parameters that have default settings that you will most probably want to override:
ACL_SYSTEM_CONTROLLER_IP
and ACL_SYSTEM_CONTROLLER_PORT
shall be set to the location where the System Controller is hostedACL_CONTROL_PANEL_NAME
can be set to make it easier to identify the control panel through the REST APIACL_TCP_ENDPOINT
from release 6.0.0 on, contains the IP address and port of the TCP endpoint to be opened, written as <ip>:>port>
. Several clients can connect to the same listening port. In release 5.0.0 and earlier, instead use ACL_TCP_ENDPOINTS
, a comma-separated list of endpoints to be opened, where each endpoint is written as <ip>:>port>
You may also want to set the log location by setting ACL_LOG_PATH
. The log location defaults to /tmp/
.
As an example, from the installation directory, the tcp control panel is started with:
ACL_SYSTEM_CONTROLLER_IP="10.10.10.10" ACL_SYSTEM_CONTROLLER_PORT=8080 ACL_SYSTEM_CONTROLLER_PSK="FBCZeWB3kMj5me58jmcpmEd3bcPZbp4q" ACL_TCP_ENDPOINT=0.0.0.0:7000 ACL_CONTROL_PANEL_NAME="My TCP Control Panel" ./acl-tcpcontrolpanel
acl-websocketcontrolpanel
is a control panel application that acts as a websocket server, and relays control commands that come in over websockets that are opened typically by web-based GUIs.
The basic settings are the same as for the tcp control panel. But to specify where the websocket server shall open an endpoint, use this environment variable:
ACL_WEBSOCKET_ENDPOINT
is the endpoint to listen for incoming messages on. On the form <ip>:<port>
You may also want to set the log location by setting ACL_LOG_PATH
. The log location defaults to /tmp/
.
An example of how to start it is the following:
ACL_SYSTEM_CONTROLLER_IP="10.10.10.10" ACL_SYSTEM_CONTROLLER_PORT=8080 ACL_SYSTEM_CONTROLLER_PSK="FBCZeWB3kMj5me58jmcpmEd3bcPZbp4q ACL_WEBSOCKET_ENDPOINT=0.0.0.0:6999 ACL_CONTROL_PANEL_NAME="My Websocket Control Panel" ./acl-websocketcontrolpanel
acl-manualcontrolpanel
is a basic Control Panel application operated from the command line.
The basic settings are the same as for the other generic control panels but it does not open any network endpoints for input, instead the control commands are written in the terminal. It can be started with:
ACL_SYSTEM_CONTROLLER_IP="10.10.10.10" ACL_SYSTEM_CONTROLLER_PORT=8080 ACL_SYSTEM_CONTROLLER_PSK="FBCZeWB3kMj5me58jmcpmEd3bcPZbp4q ACL_CONTROL_PANEL_NAME="My Manual Control Panel" ./acl-manualcontrolpanel
Agile Live NTP instructions
Recommended changes to various Linux settings
Recommended changes to the unattended upgrades
Installation instructions parts of the base platform for older releases