

# Working with SMPTE 2110
<a name="SMPTE-ST-2110"></a>

Elemental Live supports both inputs and outputs that are compliant with the SMPTE 2110 suite of standards. 

The Elemental Live implementation of SMPTE 2110 provides an effective way to handle uncompressed and lightly compressed video content. SMPTE 2110 uses standard IP networking to send and receive content, which means it uses a cheaper and more readily available network infrastructure than the traditional SDI protocol.

This section provides general information about the capabilities that SMPTE 2110 offers. For detailed information about setting up SMPTE 2110 inputs, see [Ingesting SMPTE 2110 content](input-2110.md). For detailed information about setting up SMPTE 2110 outputs, see [Configuring SMPTE 2110 outputs](output-2110.md).

**Separate streams**

SMPTE 2110 separates the key media—video, audio, and ancillary data—into separate streams, or *essences*. This architecture cuts down on the transmission costs compared to a transport stream, for example. This architecture also means that there is less wasted processing (unnecessary demuxing) when ingesting the content. Elemental Live only receives the specific video, audio, and ancillary data required for a specific event.

**Uncompressed and lightly compressed content**

Elemental Live supports both video that is uncompressed, and video that is lightly compressed using the JPEG XS codec. The JPEG XS codec reduces the bitrate of the video content, typically without visible loss of video quality after multiple transcodes.

**SMPTE 2110 and SDP files**

The SMPTE 2110 specification relies on SDP files to describe the contents of the SMPTE 2110 streams. There is one file for each individual SMPTE 2110 stream. For more information about SDP files, see [About SDP files](2110-sdp-about.md).

**Support for NMOS**

Elemental Live supports NMOS IS-04 and IS-05 with both SMPTE 2110 inputs and outputs.

You can use NMOS to manage SMPTE 2110 streams. You can't use NMOS to manage other types of streams. For more information about NMOS, see [Support for NMOS IS-04 stream discovery](2110-and-nmos.md).

**Conductor Live and SMPTE 2110 inputs with NMOS **

You can use Conductor Live to set up SMPTE 2110 inputs either with or without NMOS. If you're using NMOS, the recommended procedure is to create a profile that includes a parameter for a device input. Then when you create the channel, you set the parameter to either an SDI device (for an SDI input) or to a SMPTE 2110 Receiver Group. 

**Conductor Live and SMPTE 2110 outputs**

You can't use Conductor Live to produce SMPTE 2110 outputs that use NMOS. You can use AWS Elemental Conductor Live if you're not including NMOS.

**Support for SMPTE 2022-7 – seamless protection switching**

Elemental Live supports seamless protection switching (conforming with SMPTE 2022-7) for both SMPTE 2110 inputs and SMPTE 2110 outputs. Elemental Live uses SMPTE 2022-7 to implement resiliency via redundant streams.

For more information about SMPTE 2022-7, see [Support for SMPTE 2022-7 – seamless protection switching](2110-options.md).

**Topics**
+ [Requirements for the appliance and network](2110-appliance-reqs.md)
+ [Supported content](2110-supported-content.md)
+ [About SDP files](2110-sdp-about.md)
+ [Support for SMPTE 2022-7 – seamless protection switching](2110-options.md)
+ [Support for NMOS IS-04 stream discovery](2110-and-nmos.md)
+ [Setup: Remove bonded interfaces](s2110-setup-bonded-if.md)
+ [Setup: Reserve cores for SMPTE 2110](enable-2110.md)
+ [Setup: Enable precision time protocol (PTP)](enable-ptp.md)

# Requirements for the appliance and network
<a name="2110-appliance-reqs"></a>

A SMPTE 2110 input or output requires an Elemental Live appliance with a high-speed network interface card (NIC). Therefore, to set up a SMPTE 2110 input or output, you must create the event on one of the following appliances.


| Appliance | Network interface card (NIC) | Scope of support for SMPTE 2110  | Support for NMOS | 
| --- | --- | --- | --- | 
| L800 series Elemental Live appliance | 25 GbE NIC | Inputs and outputs | Supported | 
|  A bare-metal appliance  | 25 GbE Mellanox NIC. You must make sure that the NIC is licensed for use with the RiverMax SDK. | Inputs and outputs | Supported | 

# Supported content
<a name="2110-supported-content"></a>

The following table describes the content that Elemental Live supports in SMPTE 2110 sources (inputs) and SMPTE 2110 outputs.
+ For inputs, Elemental Live supports ingest of one instance of each type of stream—one video stream, zero or one audio stream, and zero or one ancillary data stream.
+ For outputs, Elemental Live supports one video stream, zero or more audio streams, and zero or one ancillary data stream.

For detailed instructions for setting up a SMPTE 2110 input or output, see [Ingesting SMPTE 2110 content](input-2110.md) and [Configuring SMPTE 2110 outputs](output-2110.md).

**Note**  
Elemental Live can't ingest more than one audio stream in one SMPTE 2110 input.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/elemental-live/latest/ug/2110-supported-content.html)

# About SDP files
<a name="2110-sdp-about"></a>

The SMPTE 2110 specification relies on SDP files to describe the contents of the SMPTE 2110 streams. There is one file for each type of stream. The file for each stream contains the following information:
+ The source IP address for the file. This is an address that the sender controls.
+ The unicast or multicast address that the receiver can connect to, in order to obtain the content.
+ Descriptions of the media in the stream.

**SDP files for content into Elemental Live**

For SMPTE 2110 inputs, Elemental Live is the receiver and the upstream system is the sender.
+ Typically, the sender (the upstream system) is responsible for creating the *source SDP file*. 

  If the sender hasn't created the file, or if your organization is the originator of the stream and the file wasn't created by an automated system, then you can create the file. For more information, see [About SDP files](#2110-sdp-about).
+ If the source SMPTE 2110 streams aren't managed by NMOS, the source SDP files must be stored on a server that Elemental Live can access using HTTP. You and the sender should agree on a suitable location.
+ If the source SMPTE 2110 streams are being managed by NMOS, you should have already set up the stream in the NMOS registry.

**SDP files for output from Elemental Live**

For SMPTE 2110 outputs, Elemental Live is the sender and the downstream system is the receiver.
+ Elemental Live always generates the applicable *output SDP files* and places them on a directory on the appliance.
+ If the SMPTE 2110 output group doesn't use NMOS, you must make the output SDP files available to the receiver. The files must be on an HTTP server that the receiver can access. For information about obtaining the SDP files, see [Step 4: Download and post the SDP file](locate-sdp.md).
+ If the SMPTE 2110 output group does use NMOS, Elemental Live handles delivery of the output SDP files available to the NMOS registry. There is nothing you need to do with the files.

The following topics describe the format of each type of SDP file, using examples.

**Note**  
You are responsible for understanding the SMPTE 2110 specification. We provide the examples below only as a courtesy. Refer to the specification for complete information about the SDP file.

**Topics**
+ [Format of an SDP file for video](2120-sdp-video.md)
+ [Format of an SDP file for audio](2120-sdp-audio.md)
+ [Format of an SDP file for ancillary data](2120-sdp-ancillary.md)
+ [SDP file with 2022-7 information](2120-sdp-2022-7.md)

# Format of an SDP file for video
<a name="2120-sdp-video"></a>

```
v=0
o=- 3826217993 3826217993 IN IP4 10.xx.xxx.198
s=AWS Elemental SMPTE 2110 Output: [LiveEvent: 13] [OutputGroup: smpte_2110] 
   [EssenceType_ID: 2110-20_video_198]
t=0 0
m=video 50000 RTP/AVP 96
c=IN IP4 239.x.x.x/64
b=AS:2568807
a=source-filter: incl IN IP4 239.x.x.x 10.xx.xxx.2
a=rtpmap:96 raw/90000
a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; 
   exactframerate=60; depth=10; TCS=SDR; colorimetry=BT709; 
   interlaced; PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN; PAR=1:1;
a=mediaclk:direct=0
a=ts-refclk:localmac=1c-34-da-5a-be-34
```

Following is information about the data in this example:
+ `o=` This line identifies the source IP for the stream
+ `m=video`. This identifies the file as a video description. `50000` is the port of the stream. This line must occur before the `b` and `a` lines.. 
+ `c=` identifies the destination IP address. This is a unicast or multicast address.
+ `b=AS:2568807` is the bandwidth in kilobytes, and applies only for JPEG XS.
+ `a=source-filter` identifies a filter. This line is optional. 

  In a file for an input to Elemental Live: 
  + If the line is included, Elemental Live will listen only to the source IP (10.xx.xxx.2) for packets. 
  + If the line isn't included, Elemental Live will listen to any packets on the destination IP address (239.x.x.x).

  In a file for an output: Elemental Live always includes this line in any SDP file that it creates.
+ `Width` and `height` together specify the resolution. 
+ `Exactframerate` specifies the frames per second (fps). 
+ `Raw` is the video compression—`raw` for uncompressed video, `jxsv` for JPEG XS. 
+ `90000` is the frequency.

# Format of an SDP file for audio
<a name="2120-sdp-audio"></a>

```
v=0
o=- 1443716955 1443716955 IN IP4 10.xx.xxx.236
s=st2110 0-1-0
t=0 0
m=audio 20000 RTP/AVP 97
c=IN IP4 239.x.x.x/64
a=source-filter: incl IN IP4 239.x.x.x 10.xx.xxx.236
a=rtpmap:97 L24/48000/2
a=mediaclk:direct=0 rate=48000
a=framecount:48
a=ptime:1
a=ts-refclk:ptp=IEEE1588-2008:04-5c-6c-ff-fe-0a-53-70:127
```

Following is information about the data in this example:
+ `o=` This line identifies the source IP for the stream
+ `m=audio`. This identifies the file as an audio description. `20000` is the port of the stream. This line must occur before the `a` lines.
+ `c=` identifies the destination IP address. This is a unicast or multicast address.
+ `a=source-filter` identifies a filter. This line is optional. 

  In a file for an input to Elemental Live: 
  + If the line is included, Elemental Live will listen only to the source IP (10.xx.xxx.236) for packets. 
  + If the line isn't included, Elemental Live will listen to any packets on the destination IP address (239.x.x.x).

  In a file for an output: Elemental Live always includes this line in any SDP file that it creates.
+ **a=rtpmap** provides information about the audio format:
  + An example for PCM: 

    `a=rtpmap:97 L24/48000/2`

    `L24` is the number of bits per PCM audio sample. `48000` is the sample rate. `2` is the number of channels, in this example, a single stereo track.
  + An example for a Dolby Digital codec:

    `a=rtpmap:96 AM824/48000/5 a=fmtp:96 channel-order=SMPTE2110.(AES3,AES3)`

    `48000` is the sample rate. `6` is the number of AM824 subframe pairs, and must be an even number.

# Format of an SDP file for ancillary data
<a name="2120-sdp-ancillary"></a>

```
v=0
o=- 1443716955 1443716955 IN IP4 10.xx.xxx.236
s=st2110 0-9-0
t=0 0
m=video 20000 RTP/AVP 100
c=IN IP4 239.x.x.xx/64
a=source-filter: incl IN IP4 239.x.x.xx 10.xx.xxx.236
a=rtpmap:100 smpte291/90000
a=fmtp:100 VPID_Code=133;
a=mediaclk:direct=0 rate=90000
a=ts-refclk:ptp=IEEE1588-2008:04-5c-6c-ff-fe-0a-53-70:127
```

Following is information about the data in this example:
+ `o=` This line identifies the source IP for the stream
+ `m=` The combination of `m=video` and `smpte291` (in the `a=rtpmap:` line) identifies this file as an ancillary data file. `20000` is the port of the stream. This line must occur before the `a` lines.
+ `c=` identifies the destination IP address. This is a unicast or multicast address.
+ `a=source-filter` identifies a filter. This line is optional. 

  In a file for an input to Elemental Live: 
  + If the line is included, Elemental Live will listen only to the source IP (10.xx.xxx.236) for packets. 
  + If the line isn't included, Elemental Live will listen to any packets on the destination IP address (239.x.x.x).

  In a file for an output: Elemental Live always includes this line in any SDP file that it creates.

# SDP file with 2022-7 information
<a name="2120-sdp-2022-7"></a>

If the source implements [seamless protection switching](2110-options.md) (SMPTE 2022-7), it includes extra data in each applicable file, to provide information about the primary and secondary streams. 

Keep in mind that it's possible that only some of the streams implement seamless protection switching, and some don't implement it.

Following is an example for the tags that identify video, as indicated by the line `m=video`. The information for the audio and ancillary streams follow the same pattern.

```
v=0
o=- 456221445 0 IN IP4 203.x.xxx.252
s=AJA Lily10G2-SDI 2110
t=0 0
a=group:DUP 1 2
m=video 20000 RTP/AVP 96
c=IN IP4 10.24.34.0/24
a=source-filter:incl IN IP4 192.x.x.1 198.xx.xxx.252
a=rtpmap:96 raw/90000
a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; 
   exactframerate=30000/1001; depth=10; TCS=SDR; colorimetry=BT709; 
   PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN; interlace=1;
a=ts-refclk:ptp=IEEE1588-2008:00-90-56-FF-FE-08-0F-45
a=mediaclk:direct=0
a=mid:1
m=video 20000 RTP/AVP 96
c=IN 10.24.34.0/24
a=source-filter:incl IN IP4 192.x.x.3 1198.xx.xxx.253
a=rtpmap:96 raw/90000
a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; 
   exactframerate=30000/1001; depth=10; TCS=SDR; colorimetry=BT709; 
   PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN; interlace=1;
a=ts-refclk:ptp=IEEE1588-2008:00-90-56-FF-FE-08-0F-45
a=mediaclk:direct=0
a=mid:2
```

Portions marked in bold are unique to SMPTE 2022-7.
+ `a=group:DUP 1 2` indicates that seamless protection is being used, and identify which streams are the primary (1) and secondary (2). 
+ `a=mid:1` indicates that the lines that follow apply to the primary stream. The name value (1, in this example) must be identical to the first entry in the `a=group` tag.
+ `a=mid:2` indicates that the lines that follow apply to the secondary stream. 

# Support for SMPTE 2022-7 – seamless protection switching
<a name="2110-options"></a>

Elemental Live supports seamless protection switching (conforming with SMPTE 2022-7) for both SMPTE 2110 inputs and SMPTE 2110 outputs. The Elemental Live implementation of SMPTE 2022-7 provides protection against packet loss, interface failure, and network loss (because the two interfaces use different network paths).
+ For inputs, if the source implements SMPTE 2022-7, you can configure some or all of the SMPTE 2110 streams in your event to accept inputs over two interfaces. Elemental Live will then perform seamless protection switching at the packet level, to ensure uninterrupted ingest of the content.

  For those streams, AWS Elemental Live receives two identical packet streams. When there is a problem with the first stream, AWS Elemental Live immediately uses the second stream to reconstruct the data, with no effect on the content. 
+ For outputs, you set up for SMPTE 2022-7 in the streams (Elemental Live outputs) in the SMPTE 2110 output group. Elemental Live will include two identical packet streams in each applicable stream. 

Note that in both the inputs and the outputs, seamless protection switching might be implemented in some streams but not others. For example, it might be implemented in the video streams but not the audio or ancillary data streams. Compare this to [NMOS](2110-and-nmos.md), where all the streams in an input or output either use NMOS or don't use NMOS.

# Support for NMOS IS-04 stream discovery
<a name="2110-and-nmos"></a>

Elemental Live supports NMOS IS-04 with both SMPTE 2110 inputs and outputs.

**Note**  
Currently, Elemental Live supports management of SMPTE 2110 streams using NMOS. Elemental Live doesn't support management of other types of streams.

**SMPTE 2110 with NMOS**



An NMOS solution includes an NMOS controller and an optional NMOS registry. If your solution includes a registry, you configure Elemental Live to communicate with that registry. If your solution doesn't include a registry, you must configure your NMOS controller to query Elemental Live
+ Information about the SMPTE 2110 streams, including a unique ID for each stream. 
+ Information about the available *senders* and *receivers*. For a stream that Elemental Live outputs, Elemental Live is the sender. For a stream that Elemental Live ingests, it is the receiver.

**SMPTE 2110 without NMOS**

If you don't set up an NMOS solution, you still use SDP files:
+ For a SMPTE 2110 input, you must identify the server where the SDP files are stored. This can be any HTTP server. When you configure the input, you specify which SDP files contain information about the SMPTE 2110 stream. 
+ For a SMPTE 2110 output, Elemental Live automatically creates the applicable SDP files. You must make these files accessible to the downstream system.

# Setup: Remove bonded interfaces
<a name="s2110-setup-bonded-if"></a>

Read this section if you plan to implement redundant inputs and/or outputs with SMPTE 2110.

SMPTE 2110 inputs and outputs support resiliency, but they do so using SMPTE 2022-7. You can’t implement input resiliency by bonding the two interfaces on the appliance. This resiliency implementation has the following impact:
+ If you currently have a bonded interface on the appliance (on a Mellanox card or on a 25Gb card), you must remove the bond. 
+ In addition, if you have non-SMPTE 2110 (or non-SMPTE 2022-6) events set up on the appliance that use this bonded interface, you must modify the event configuration. You might be able to bond other interfaces on other cards in the appliance, and then use that bonded interface in those events. If you can’t do that, you must change the event configuration to not use a bonded interface.

 If you don't plan to implement redundant SMPTE 2110 inputs or outputs (or SMPTE 2022-6 inputs), you can retain the bonded interface on the appliance.

# Setup: Reserve cores for SMPTE 2110
<a name="enable-2110"></a>

Before you can run an event using SMPTE 2110, you must reserve cores on the appliance NIC. When you reserve these cores, AWS Elemental Live uses them only for processing SMPTE 2110 and/or SMPTE 2022-6. 

The setting to reserve cores applies to the appliance. Therefore you need to reserve the cores only once, not every time you set up a new event that uses SMPTE 2110 or SMPTE 2022-6.

**Important**  
Make sure you reserve the cores only when you plan to create events that have SMPTE 2110 inputs or outputs and/or SMPTE 2022-6 inputs.   
After you reserve the cores, AWS Elemental Live uses these cores only for processing SMPTE 2110 and/or SMPTE 2022-6. Other processing won't be able to use these cores.

**To reserve cores**

1. Find out which Ethernet interfaces on the appliance apply to your NIC. For example, eth4 and eth5.

1. Stop all events that are currently running on the appliance.

1. In the Elemental Live web interface, choose **Settings**. (Don't choose **Input Devices** or **Routers** from the submenu).

1. On the **Settings **page, choose the **Network** tab, then choose the **Network Devices** tab. 

1. Choose the **edit** icon (pencil) next to the Ethernet interface that you identified, and select the **SMPTE 2110 and SMPTE 2022-6 Enabled** check box.

1. Repeat for the other Ethernet interface, if applicable.

1. Choose **Save**.

1. Stop and restart the service for your changes to take effect. You can do this in the web interface or in the command line interface (CLI). 
   + In the web interface, go to the **Settings** tab, select **Stop Service** and then **Start Service**.

     OR
   + In the CLI, run `sudo service elemental_se restart`

# Setup: Enable precision time protocol (PTP)
<a name="enable-ptp"></a>

If you set up SMPTE 2110 outputs in events, you must enable Precision Time Protocol (PTP). You don't need to enable it if you only set up SMPTE 2110 inputs. 

When PTP is enabled, you can view the PTP logs in `/var/log/messages`.

**To enable PTP**

You must enable PTP on the Elemental Live appliance. Enabling PTP automatically disables the NTP clock. And disabling PTP automatically enables the NTP clock.

1. In the Elemental Live web interface, choose **Settings**. (Don't choose **Input Devices** or **Routers** from the submenu).

1. On the **Settings **page, choose the **Network** tab, then choose **Hostname, DNS, & Timing Server**.

1. Select the **Enable PTP** check box, and then choose **Save**.

## Working with PTP
<a name="enable-ptp-customizing"></a>

PTP provides the timing for packet pacing in Elemental Live’s SMPTE 2110 output. In line with the SMPTE 2110 specification, PTP is used for synchronizing the streams in SMPTE 2110 outputs—it ensures that the video, audio, and ancillary data streams remain synchronized downstream of Elemental Live.

Elemental Live is a follower that needs to sync to a boundary clock.

Elemental Live uses the Type N – Narrow sender profile of PTP. In the output video SDP file, the line `TP=2110TPN` identifies the profile. 

**The default configuration file**

When you enable PTP, Elemental Live uses PTP as defined in the configuration file. This file is in `/etc/ptp4l.conf`. 

The contents of the default PTP configuration file are shown below. You can modify the values and add more parameters to suit your network requirements. However, note that AWS Elemental won't be able to troubleshoot customizations that you make to the file.

**Default PTP configuration file**

```
[global]
domainNumber 127
priority1 128
priority2 128
use_syslog 1
logging_level 6
tx_timestamp_timeout 30
hybrid_e2e 0
dscp_event 46
dscp_general 46

[eth6]
logAnnounceInterval 0
announceReceiptTimeout 3
logSyncInterval -3
logMinDelayReqInterval -3
delay_mechanism E2E
network_transport UDPv4
```