CDI SDK
SDK for transporting chunks of data reliably and with low latency using a polled mode network driver.
Loading...
Searching...
No Matches
CDI Audio, Video and Metadata (CDI-AVM) API Home Page

Introduction

The Cloud Digital Interface Audio, Video and Metadata (CDI_AVM) is the library which implements the low-latency reliable transport of audio, video and metadata between EC2 instances within the Amazon network.

The AVM interface of the CDI SDK is intended mainly for interoperabilty among vendors while remaining extensible. To better encourage interoperability, a constrained set of audio, video, and ancillary data formats is supported. Audio, for example, is always 24 bit linear PCM in big endian format. Ancillary data follows IETF RFC 8331. Video similarly has a narrow set of supported parameters. Together, these comprise the CDI baseline profile.

Extensibility is addressed through a generic configuration mechanism which is used even for the CDI baseline profile. It is based on a structure containing a URI and optional parameter data. The URI is defined such that it ensures uniqueness and optionally points to documentation on how to interpret the parameter data. The format of the payload data is also dependent on the URI. Helper functions ease the process of creating and parsing the generic configuration structure for the CDI baseline profile.

The URIs used for the CDI baseline profile are:

https://cdi.elemental.com/specs/baseline-video
https://cdi.elemental.com/specs/baseline-audio
https://cdi.elemental.com/specs/baseline-ancillary-data

The documents at those URIs fully specify the various aspects of each media type including the parameter data and the in memory representation of payload data. These files also reside in CDI_SDK/doc/specs.

Since the media format details are specificated outside of the SDK, new formats (beyond the CDI baseline profile) can be added without changing the SDK. They can be publicly documented or they can remain private for situations where interoperability is not required.

CDI-AVM Architecture Overview

The diagram shown below provides an overview of the CDI-AVM Transmit/Receive architecture.

CDI-AVM EC2 Instance Workflow Example (Connections with single endpoints)

Connections that contain a single endpoint can be used to transmit video, audio and ancillary data streams that are identified by a "stream_identifier" as defined in the API. This allows applications to transmit and receive multiple streams using single endpoints. See the CdiAvmTxCreate(), CdiAvmTxPayload(), and CdiCoreConnectionDestroy() API functions.

The diagram shown below provides an example of using the CDI-AVM API on multiple EC2 instances and multiple TX/RX connections.

CDI-AVM EC2 Instance Workflow Example (Connections with multiple endpoints)

Connections that contain multiple endpoints can be used to demux and mux video, audio and ancillary data streams that are identified by a "stream_identifier" as defined in the API. This allows an application to receive multiple streams on a single connection and transmit them to different endpoints. It also allows an application to receive multiple streams from different endpoints on a single connection. Demuxing and muxing of the streams is handled entirely by the CDI-AVM SDK. See the CdiAvmTxStreamConnectionCreate(), CdiAvmTxStreamEndpointCreate(), CdiAvmEndpointTxPayload(), and CdiAvmStreamEndpointDestroy() API functions.

The diagram shown below provides an example of using the CDI-AVM API on multiple EC2 instances using single connections that contain multiple endpoints to demux and mux video, audio and ancillary data streams.

CDI-AVM Application Programming Interface (API)

The API is declared in: cdi_avm_api.h

Connections with Single Endpoints

The diagram shown below provides an example of the typical CDI-AVM TX/RX workflow using the CDI-AVM API for a connection that contains a single endpoint.

Connections with Multiple Endpoints

The diagram shown below provides an example of the typical CDI-AVM TX/RX workflow using the CDI-AVM API for a connection that contains multiple endpoints.