Upgrade instructions
Ateliere Live 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