Upgrade instructions
Agile Live upgrade instructions
Upgrade to 7.0.0 from 6.0.0
System Controller
- All REST API calls now must use the
/api/v3
prefix - 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}/controlreceivers
have been removed. To get the statistics of the controlreceiver, see thecontrolreceiver
part of the response from the[GET] /pipelines/{uuid}?expand=true
request. In this response theconnected_to
has been renamedoutgoing_connections
and the list of incoming connections insidelistening_interface
has been moved out of that object and namedincoming_connections
- The parameter
connected_to
in, among other endpoints,[GET] /controlpanels/{uuid}
has been renamed tooutgoing_connections
- The
status
JSON object for responses from controlreceivers, controlpanels and outputs has been removed and all parameters inside of it has been moved out
C++ SDK
ControlDataReceiver
andMediaStreamer
classes have now been removed from the SDK and replaced by the interface classesIControlDataReceiver
andIMediaStreamer
. UseMediaReceiver::createMediaStreamerOutput
to create newMediaStreamer
instances andMediaReceiver::getControlDataReceiver
to get theControlDataReceiver
instance.getGitRevision()
andgetBuildInfo()
have been removed from the SDK. UsegetVersion()
instead.MediaReceiver::Settings
now have a new functionmResetCallback
that must be set to a callback that should be called- A new parameter
const ControlDataReceiver::Settings& receiverSettings
is required when callingMediaReceiver::start
to set up the internalControlDataReceiver
.
Upgrade to 6.0.0 from 5.0.0
System Controller
- In endpoints
/ingests/{uuid}?expand=true
,/ingests/{uuid}/sources
and/ingest/{uuid}/sources/{source_id}
these three metrics has been split into audio and video variants:acl_ingest_source_dropped_frames
has been split intoacl_ingest_source_dropped_audio_frames
andacl_ingest_source_dropped_video_frames
, metricacl_ingest_source_duplicated_frames
is split intoacl_ingest_source_duplicated_audio_frames
andacl_ingest_source_duplicated_video_frames
; andacl_ingest_source_lost_frames
is split intoacl_ingest_source_lost_audio_frames
andacl_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.json
in the directories/etc/acl_system_controller
,/app
,/service
,/acl_system_controller
or/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-tcpcontrolpanel
the environment variableACL_TCP_ENDPOINTS
has changed name toACL_TCP_ENDPOINT
and only accept a single endpoint. This endpoint will now accept multiple connections.
C++ SDK
AlignedFrame::PixelFormat
has been replaced withACL::PixelFormat
, found in PixelFormat.h.ISystemControllerInterface::sendRequest
has 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}/stream
have been moved to/pipelines/{uuid}/outputs/{output_uuid}/streams
to 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}/streams
differs 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}/stream
and[POST] /pipelines/{uuid}/multiviews
endpoints now support setting thepic_mode
andspeed_quality_balance
to 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_ip
andbalanced
), it might be desirable to manually specify them.
ProductionPipeline
MediaReceiver::start
has changed signature. It now takes aCUcontext
as the second parameter, which should be a CUDA context reference to the device to run the CUDA operations on.- The
MediaReceiver::Settings
struct has a new parametermAlignedFrameFreeStream
which should be a CUDA stream within the CUDA context passed to theMediaReceiver::start
method, to use as the stream to make the asynchronous free on, after all the DeviceMemory pointers have been released. MediaStreamer::configure
now has a second parameter to aCUcontext
, which is the CUDA context defining which device to run the MediaStreamer on.PipelineSystemControllerInterfaceFactory
constructor now takes an extracustomCaCertFile
parameter, 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 /streams
now require two additional parametersaudio_format
andaudio_mapping
. The first one selects ifAAC-LC
or the newOpus
codec 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_mapping
tells 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-LC
and[[0,1]]
respectively foraudio_format
andaudio_mapping
. - Metric
queueing_video_frames
has changed name tovideo_frames_in_queue
. - In
POST /pipelines/{uuid}/outputs/{output_uuid}/stream
andPOST /pipelines/{uuid}/multiviews
the parametersip
andport
are removed and replaced by four parameters calledlocal_ip
,local_port
,remote_ip
andremote_port
. In MPEG-TS over SRT mode, their useage depends on the SRT mode. When in listener mode (srt_mode == listener
) only thelocal_ip
andlocal_port
are used to set the address to listen to. Setlocal_port
to 0, to make the OS automatically pick an available port. In SRT caller mode bothlocal_ip
,local_port
andremote_ip
,remote_port
are 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_ip
to0.0.0.0
andlocal_port
to 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.0
and0
, currently). - The output of the
GET /pipelines/{uuid}/outputs/{output_uuid}/stream
andGET /pipelines/{uuid}/multiviews
endpoints have changed the layout. See the REST API documentation for more details. - The
video_kilobit_rate
parameter 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_packets
in theGET /ingests/{uuid}/streams/{stream_uuid}
endpoint has been removed in favor for thelost_packets
anddropped_packets
in the Pipeline.
ProductionPipeline
- The API of
ControlDataReceiver::IncomingRequest
has changed to get anstd::vector
of 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
mDebugVideo
andmDebugAudio
has 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/v1
has been removed. - All calls to the Control Receiver and Output endpoints must be updated, as these have been moved in under the
/pipelines
endpoint. See the REST API reference for details. - When setting up Control Connections, the old
[POST] /controlpanels/{uuid}/controlconnections
and[POST] /controlpanels/{uuid}/controlconnections
endpoints 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 forcontrolconnections
formerly 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_uuid
is 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_id
which 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
id
referring to a source has changed name tosource_id
in[POST] /streams
and in responses from the Ingest when querying for information on the Sources or Streams. - The parameters
resolution_x
andresoulution_y
have changed name towidth
andheight
in several endpoints, among others the[POST] /streams
and[POST] /ingests/{uuid}/sources/{source_id}/thumbnail
. - The thumbnails endpoint has been moved from
[POST] /ingests/{uuid}/thumbnail
to[POST] /ingests/{uuid}/sources/{source_id}/thumbnail
, passing thesource_id
parameter in the path instead of the JSON HTTP body. - The new
encoder
parameter must be specified when requesting thumbnails using the[POST] /ingests/{uuid}/sources/{source_id}/thumbnail
endpoint. Set it toauto
unless 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.json
file. 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::DataFrame
has changed.- The namespace
AlignedData
has been removed and the struct itself has been renamed toAlignedFrame
. The enumsCompressedVideoFormat
andPixelFormat
and typedefAudioSampleRow
have been moved inside the struct. - The field
mPTS
has been removed and replaced by two new fieldsmCaptureTimestamp
andmRenderingTimestamp
, 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. ThemRenderingTimestamp
is also used by theOutputStreamer
to calculate the timestamps for the outgoing streams, so in case the Rendering Engine creates newAlignedFrame
instances, make sure this value is incremented correctly for each frame that is put to theOutputStreamer
. - The CUDA pointer
mVideoDataCudaPtr
has been removed in favor for anstd::shared_ptr
to an RAII class calledDeviceMemory
that 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 theAlignedFrame
it was delivered with, in order to, for instance, cache the video frame or to handle video and audio data separately. Please do remember that theDeviceMemory
from theAlignedFrame
s delivered by theMediaReceiver
is 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 theDeviceMemory
or write to the CUDA memory pointed to by it.AlignedFrames
(andDeviceMemory
instances made outside of anAlignedFrame
) created by the Rendering Engine can of course be changed and used freely.
- The namespace