Skip to main content
Skip table of contents

Single-stage LTCU workflow without JITP

Overview

OpenTV Video Platform supports singlr-stage LTCU workflows JITP, such as those used with Harmonic VOS360. It also includes an adaptor for Harmonic VOS360.

The following diagram shows the main interactions between the Content Workflow Manager (CWM), the Business Configuration Manager (BCM), the external encoder/packager, the CDN, and so on for the single-stage LTCU workflow:

Main steps

Setting up an LTCU workflow consists of the following main stages, which are explained in detail in the following sections:

  1. Integration:
    1. Specify the required devices:
      1. Specify the processing device.
      2. Specify the destination device.
    2. Configure the required profiles and attach them to the appropriate technical channels:
      1. Feature profile
      2. Capture profile
      3. Validation profile
      4. Purge profile
  2. Enable LTCU for channels/events.
  3. Specify the node that captured events are assigned to.

Integration

Specify the required devices

Specify the processing device

To specify the processing device:

  1. Construct the request payload so that it looks like this:

    CODE
    {
        "id": "LiveEncoderDevice",
        "name": "CapturedAssetService",
        "workflow": {
            "pendingJobs": 0,
            "maxJobsAllowed": 10,
            "accessPoints": [
            {
                "endPoint": "http://<IP>:<Port>/cxf/pri/v1/",
                "type": "http"
            }
            ]
        }
    }

    The full list of fields is available in Device attributes.

  2. Send a POST request to the BCM's devices API with the above payload:

    https://<host>:<port>/businessConfig/admin/v1/devices/
    

Specify the destination device

To specify the destination device:

  1. Construct the request payload so that it looks like this:

    CODE
    {
        "id": "VOS_CDN",
        "name": "destination",
        "workflow": {
            "accessPoints": [
            {
                "endPoint": "ftp://<UserName>:<Password>@<remote_address>:<Port>/relative_path/",
                "type": "ftp"
            },
            {
                "endPoint": "http://<IP>:<Port>/cxf/pri/v1/",
                "type": "http"
            }
            ],
            "pendingJobs": 0,
            "maxJobsAllowed": 10
        }
    }

    The full list of fields is available in Device attributes.

  2. Send a POST request to the BCM's devices API with the above payload:

    https://<host>:<port>/businessConfig/admin/v1/devices/
    

Configure and attach the required profiles

To enable automatic retry of failed jobs, include the following attributes in capture, validation, and purge profiles:

  • autoRetry – set to true to enable automatic retry. Default: false.
  • rescheduleDelay – specifies how long (in seconds) to wait after failure before retrying the job. Default: 3600.
  • numberOfRetriesForRescheduling – the maximum number of times the job will be retried. Default: 3.
  • channelBuffer – specifies the time period in the past (in seconds) that the event must exist in for it to be captured. For example, if you set this to 86400, only events whose start time was in the last 24 hours will have their capture retried. Capture will not be retried for events that are older than 24 hours. Default: events' age is not considered – all failed jobs are retried.

Configure a feature profile

A feature profile is required when using just-in-time processing (JITP), to specify the encoding type (HLS, DASH, or SS). To configure a feature profile:

  1. Construct a feature profile. See Harmonic VOS360 LTCU profiles for an example.

    The full list of fields is available in Profile attributes.
  2. Attach the profile to the technical channel by sending a PUT request to the Content and Product Manager (CPM):

    http://<server>:<port>/cpm/content/v1/technicalChannels/{technicalChannelId}
    

    The body of the request must contain the field to be updated, in this case, profileIdSets. It must contain the IDs of all the profiles for the technical channel. So the recommended approach is to use a Get technical channel request to get the technical channel and find out the current value of profileIdSets, add the ID of the new profile, then use this extended value in the body of the PUT request.

    For example, if the current value is "capture;purge", to add the jitp_features_ss ID, the request body should be:

    CODE
    {
       profileIdSets: "capture;purge;jitp_features_ss"
    }

    Alternatively, you can assign a profile to a technical channel at ingest, by specifying the profile IDs in the profileIds attribute of the technicalChannel. See technicalChannel (technical-based).

Configure a capture profile

To configure a capture profile:

  1. Construct a capture profile. See Harmonic VOS360 LTCU profiles for an example.

    The full list of fields is available in Profile attributes.
  2. Attach the profile to the technical channel by sending a PUT request to the Content and Product Manager (CPM):

    http://<server>:<port>/cpm/content/v1/technicalChannels/{technicalChannelId}
    

    The body of the request must contain the field to be updated, in this case, profileIdSets. It must contain the IDs of all the profiles for the technical channel. So the recommended approach is to use a Get technical channel request to get the technical channel and find out the current value of profileIdSets, add the ID of the new profile, then use this extended value in the body of the PUT request.

    For example, if the current value is "jitp_features_ss;purge", to add the capture ID, the request body should be:

    CODE
    {
       profileIdSets: "jitp_features_ss;purge;capture"
    }

    Alternatively, you can assign a profile to a technical channel at ingest, by specifying the profile IDs in the profileIds attribute of the technicalChannel. See technicalChannel (technical-based).

Configure a validation profile

To configure a validation profile:

  1. Construct a validation profile. See Harmonic VOS360 LTCU profiles for an example.

    The full list of fields is available in Profile attributes.
  2. Attach the profile to the technical channel by sending a PUT request to the Content and Product Manager (CPM):

    http://<server>:<port>/cpm/content/v1/technicalChannels/{technicalChannelId}
    

    The body of the request must contain the field to be updated, in this case, profileIdSets. It must contain the IDs of all the profiles for the technical channel. So the recommended approach is to use a Get technical channel request to get the technical channel and find out the current value of profileIdSets, add the ID of the new profile, then use this extended value in the body of the PUT request.

    For example, if the current value is "jitp_features_ss;purge", to add the validate ID, the request body should be:

    CODE
    {
       profileIdSets: "jitp_features_ss;purge;validate"
    }

    Alternatively, you can assign a profile to a technical channel at ingest, by specifying the profile IDs in the profileIds attribute of the technicalChannel. See technicalChannel (technical-based).

Configure a purge profile

To configure a feature profile:

  1. Construct a purge profile. See Harmonic VOS360 LTCU profiles for an example.

    The full list of fields is available in Profile attributes.
  2. Attach the profile to the technical channel by sending a PUT request to the Content and Product Manager (CPM):

    http://<server>:<port>/cpm/content/v1/technicalChannels/{technicalChannelId}
    

    The body of the request must contain the field to be updated, in this case, profileIdSets. It must contain the IDs of all the profiles for the technical channel. So the recommended approach is to use a Get technical channel request to get the technical channel and find out the current value of profileIdSets, add the ID of the new profile, then use this extended value in the body of the PUT request.

    For example, if the current value is "jitp_features_ss;capture", to add the purge ID, the request body should be:

    CODE
    {
       profileIdSets: "jitp_features_ss;capture;purge"
    }

    Alternatively, you can assign a profile to a technical channel at ingest, by specifying the profile IDs in the profileIds attribute of the technicalChannel. See technicalChannel (technical-based).

Enabling/disabling LTCU for channels/events

There are three ways to enable or disable LTCU at the channel and event level.

Enabling LTCU for a channel enables it for all the channel's events, while disabling it for a channel disables it for all the channel's events. Enabling/disabling LTCU for an event overrides the setting at the channel level. Similarly, enabling or disabling LTCU for a technical channel overrides the setting for the editorial channel.

These three methods are explained in the following sections:

Enabling/disabling LTCU at ingest

To enable LTCU at ingest for a channel:

  1. To enable LTCU for a channel and all of its existing events:
    1. Set cmsData > editorialChannel > channelEvents > timeShifting > longTermCatchUpSupport to true (or set it to false to disable LTCU).
    2. Set cmsData > technicalChannel > timeShifting > longTermCatchUpSupport to true for each technical channel (or set it to false to disable LTCU).
    3. Optionally, specify guard times by setting cmsData > editorialChannel > guardTime > start and end. Values are in ISO 8601 format with a restricted allowed pattern of PnDTnHnMnS. For example "PT30M" specifies a thirty-minute offset.

      Note that these guard times are used for both LTCU and NPVR.
  2. To enable LTCU for all newly-created events in a channel set cmsData > editorialChannel > timeShifting > longTermCatchUpParameters to true (or set it to false to disable LTCU).
  3. To enable LTCU for an individual event, set cmsData > editorialChannel > channelEvents > event > timeShifting > longTermCatchUpSupport to true (or set it to false to disable LTCU).

Examples

Import sample XML for clear case
XML
<?xml version="1.0" encoding="UTF-8"?>

<cmsData xmlns="nis.cim.sp.ml.nagra.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" executionDate="2017-06-01T00:00:00Z" xsi:schemaLocation="nis.cim.sp.ml.nagra.com Nagravision-Import-Full-Specification-v5.x.xsd">
    <editorialChannel providerResourceId="echpr01" providerId="echp01" name="editorial channel name 01">
        <metadataSet locale="en_EN">
            <metadata key="Title">Editorial Channel 01 title (en_EN)</metadata>
            <metadata key="Description">Editorial Channel 01 Description (en_EN)</metadata>
        </metadataSet>
        <metadataSet locale="none">
            <metadata key="Rating">1</metadata>
            <metadata key="ChannelNumber">1</metadata>
            <metadata key="ShortName">Editorial Channel short name 1</metadata>
        </metadataSet>
        <channelEvents startFrom="2019-01-19T00:00:00Z" endUntil="2019-01-24T00:00:00Z">
            <event providerResourceId="eventpr01" name="event name 01" providerId="eventp01">
                <metadataSet locale="en_GB">
                    <metadata key="Title">Event1 Title (en_GB)</metadata>
                    <metadata key="Description">Event1 Description (en_GB)</metadata>
                </metadataSet>
                <period start="2019-01-19T00:00:00Z" end="2019-01-19T12:00:00Z" />
                <timeShifting startOverSupport="false" shortTermCatchUpSupport="false" longTermCatchUpSupport="true" />
            </event>
            <timeShifting longTermCatchUpSupport="true">
                <longTermCatchUpParameters>
                    <eventDefaultFlag>true</eventDefaultFlag>
                </longTermCatchUpParameters>
            </timeShifting>
        </channelEvents>
    </editorialChannel>
    <technicalChannel providerResourceId="tchpr01" name="technical channel name 01 v1" providerId="tchp01" deliveryUri="http://origin.test-venise.com/bpk-tv/eut-finfo-hd/eut-finfo-hd.isml/index.m3u8" profileIds="jitp_features_hls;capture;validation;purge">
        <metadataSet locale="en_EN">
            <metadata key="Title">technical channel name 01 v1 title</metadata>
            <metadata key="Description">Technical Channel c1 Description (en_EN)
            </metadata>
        </metadataSet>
        <metadataSet locale="none">
            <metadata key="Rating">1</metadata>
            <metadata key="ChannelNumber">11</metadata>
            <metadata key="ShortName">Technical Channel short name 01v1</metadata>
        </metadataSet>
        <editorialChannelRef providerResourceId="echpr01" providerId="echp01" />
        <timeShifting startOverSupport="false" shortTermCatchUpSupport="false" longTermCatchUpSupport="true">
            <longTermCatchUpParameters>
                <sourceId>c24a1dc9-6ac5-4a7f-90e7-db11e3f03509</sourceId>
                <validityStartOffset>PT2M</validityStartOffset>
                <validityDuration>PT2M</validityDuration>
                <purgeGracePeriod>PT2M</purgeGracePeriod>
            </longTermCatchUpParameters>
        </timeShifting>
    </technicalChannel>
    <technicalChannel providerResourceId="tchpr02" name="technical channel name 02 v1" providerId="tchp02" deliveryUri="relpath:///Content/SS/LLCU/abcd_Provider_test_id1_test.ism/Manifest" profileIds="jitp_features_ss;capture;validation;purge">
        <metadataSet locale="en_EN">
            <metadata key="Title">technical channel name 02 v1 title</metadata>
            <metadata key="Description">Technical Channel c2 Description (en_EN)
            </metadata>
        </metadataSet>
        <metadataSet locale="none">
            <metadata key="Rating">1</metadata>
            <metadata key="ChannelNumber">12</metadata>
            <metadata key="ShortName">Technical Channel short name 02v1</metadata>
        </metadataSet>
        <editorialChannelRef providerResourceId="echpr01" providerId="echp01" />
        <timeShifting startOverSupport="false" shortTermCatchUpSupport="false" longTermCatchUpSupport="true">
            <longTermCatchUpParameters>
                <sourceId>c24a1dc9-6ac5-4a7f-90e7-db11e3f03509</sourceId>
                <validityStartOffset>PT2M</validityStartOffset>
                <validityDuration>PT2M</validityDuration>
                <purgeGracePeriod>PT2M</purgeGracePeriod>
            </longTermCatchUpParameters>
        </timeShifting>
    </technicalChannel>
    <technicalChannel providerResourceId="tchpr03" name="technical channel name 03 v1" providerId="tchp03" deliveryUri="relpath:///Content/DASH/LLCU/abcd_Provider_test_id1_test/manifest.mpd" profileIds="jitp_features_dash;capture;validation;purge">
        <metadataSet locale="en_EN">
            <metadata key="Title">technical channel name 03 v1 title</metadata>
            <metadata key="Description">Technical Channel c3 Description (en_EN)
            </metadata>
        </metadataSet>
        <metadataSet locale="none">
            <metadata key="Rating">1</metadata>
            <metadata key="ChannelNumber">13</metadata>
            <metadata key="ShortName">Technical Channel short name 02v1</metadata>
        </metadataSet>
        <editorialChannelRef providerResourceId="echpr01" providerId="echp01" />
        <timeShifting startOverSupport="false" shortTermCatchUpSupport="false" longTermCatchUpSupport="true">
            <longTermCatchUpParameters>
                <sourceId>c24a1dc9-6ac5-4a7f-90e7-db11e3f03509</sourceId>
                <validityStartOffset>PT2M</validityStartOffset>
                <validityDuration>PT2M</validityDuration>
                <purgeGracePeriod>PT2M</purgeGracePeriod>
            </longTermCatchUpParameters>
        </timeShifting>
    </technicalChannel>
</cmsData>
Import sample XML for encrypted case
XML
<?xml version="1.0" encoding="UTF-8"?>
<cmsData xmlns="nis.cim.sp.ml.nagra.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" executionDate="2017-06-01T00:00:00Z" xsi:schemaLocation="nis.cim.sp.ml.nagra.com Nagravision-Import-Full-Specification-v5.x.xsd">
    <editorialChannel providerResourceId="echpr01" providerId="echp01" name="editorial channel name 01">
        <metadataSet locale="en_EN">
            <metadata key="Title">Editorial Channel 01 title (en_EN)</metadata>
            <metadata key="Description">Editorial Channel 01 Description (en_EN)
            </metadata>
        </metadataSet>
        <metadataSet locale="none">
            <metadata key="Rating">1</metadata>
            <metadata key="ChannelNumber">1</metadata>
            <metadata key="ShortName">Editorial Channel short name 1</metadata>
        </metadataSet>
        <channelEvents startFrom="2019-01-19T00:00:00Z" endUntil="2019-01-24T00:00:00Z">
            <event providerResourceId="eventpr01" name="event name 01" providerId="eventp01">
                <metadataSet locale="en_GB">
                    <metadata key="Title">Event1 Title (en_GB)</metadata>
                    <metadata key="Description">Event1 Description (en_GB)</metadata>
                </metadataSet>
                <period start="2019-01-19T00:00:00Z" end="2019-01-19T12:00:00Z" />
                <timeShifting startOverSupport="false" shortTermCatchUpSupport="false" longTermCatchUpSupport="true" />
            </event>
            <timeShifting longTermCatchUpSupport="true">
                <longTermCatchUpParameters>
                    <eventDefaultFlag>true</eventDefaultFlag>
                </longTermCatchUpParameters>
            </timeShifting>
        </channelEvents>s
    </editorialChannel>
    <technicalChannel providerResourceId="tchpr01" name="technical channel name 01 v1" providerId="tchp01" deliveryUri="http://origin.test-venise.com/bpk-tv/eut-finfo-hd/eut-finfo-hd.isml/index.m3u8" profileIds="jitp_features_hls;capture;validation;purge">
        <metadataSet locale="en_EN">
            <metadata key="Title">technical channel name 01 v1 title</metadata>
            <metadata key="Description">Technical Channel c1 Description (en_EN)
            </metadata>
        </metadataSet>
        <metadataSet locale="none">
            <metadata key="Rating">1</metadata>
            <metadata key="ChannelNumber">11</metadata>
            <metadata key="ShortName">Technical Channel short name 01v1</metadata>
        </metadataSet>
        <editorialChannelRef providerResourceId="echpr01" providerId="echp01" />
        <securityInfo id="tchpr01v1drmid01" securityDeviceId="drmInstanceName01">
            <metadataSet locale="none">
                <metadata key="CMS4MigratedData">true</metadata>
                <metadata key="RetentionDuration">123123222</metadata>
            </metadataSet>
        </securityInfo>
        <timeShifting startOverSupport="false" shortTermCatchUpSupport="false" longTermCatchUpSupport="true">
            <longTermCatchUpParameters>
                <sourceId>c24a1dc9-6ac5-4a7f-90e7-db11e3f03509</sourceId>
                <validityStartOffset>PT2M</validityStartOffset>
                <validityDuration>PT2M</validityDuration>
                <purgeGracePeriod>PT2M</purgeGracePeriod>
            </longTermCatchUpParameters>
        </timeShifting>
    </technicalChannel>
    <technicalChannel providerResourceId="tchpr02" name="technical channel name 02 v1" providerId="tchp02" deliveryUri="relpath:///Content/SS/LLCU/abcd_Provider_test_id1_test.ism/Manifest" profileIds="jitp_features_ss;capture;validation;purge">
        <metadataSet locale="en_EN">
            <metadata key="Title">technical channel name 02 v1 title</metadata>
            <metadata key="Description">Technical Channel c2 Description (en_EN)
            </metadata>
        </metadataSet>
        <metadataSet locale="none">
            <metadata key="Rating">1</metadata>
            <metadata key="ChannelNumber">12</metadata>
            <metadata key="ShortName">Technical Channel short name 02v1</metadata>
        </metadataSet>
        <editorialChannelRef providerResourceId="echpr01" providerId="echp01" />
        <securityInfo id="tchpr01v1drmid01" securityDeviceId="drmInstanceName01">
            <metadataSet locale="none">
                <metadata key="CMS4MigratedData">true</metadata>
                <metadata key="RetentionDuration">123123222</metadata>
            </metadataSet>
        </securityInfo>
        <timeShifting startOverSupport="false" shortTermCatchUpSupport="false" longTermCatchUpSupport="true">
            <longTermCatchUpParameters>
                <sourceId>c24a1dc9-6ac5-4a7f-90e7-db11e3f03509</sourceId>
                <validityStartOffset>PT2M</validityStartOffset>
                <validityDuration>PT2M</validityDuration>
                <purgeGracePeriod>PT2M</purgeGracePeriod>
            </longTermCatchUpParameters>
        </timeShifting>
    </technicalChannel>
    <technicalChannel providerResourceId="tchpr03" name="technical channel name 03 v1" providerId="tchp03" deliveryUri="relpath:///Content/DASH/LLCU/abcd_Provider_test_id1_test/manifest.mpd" profileIds="jitp_features_dash;capture;validation;purge">
        <metadataSet locale="en_EN">
            <metadata key="Title">technical channel name 03 v1 title</metadata>
            <metadata key="Description">Technical Channel c3 Description (en_EN)
            </metadata>
        </metadataSet>
        <metadataSet locale="none">
            <metadata key="Rating">1</metadata>
            <metadata key="ChannelNumber">13</metadata>
            <metadata key="ShortName">Technical Channel short name 02v1</metadata>
        </metadataSet>
        <editorialChannelRef providerResourceId="echpr01" providerId="echp01" />
        <securityInfo id="tchpr01v1drmid01" securityDeviceId="drmInstanceName01">
            <metadataSet locale="none">
                <metadata key="CMS4MigratedData">true</metadata>
                <metadata key="RetentionDuration">123123222</metadata>
            </metadataSet>
        </securityInfo>
        <timeShifting startOverSupport="false" shortTermCatchUpSupport="false" longTermCatchUpSupport="true">
            <longTermCatchUpParameters>
                <sourceId>c24a1dc9-6ac5-4a7f-90e7-db11e3f03509</sourceId>
                <validityStartOffset>PT2M</validityStartOffset>
                <validityDuration>PT2M</validityDuration>
                <purgeGracePeriod>PT2M</purgeGracePeriod>
            </longTermCatchUpParameters>
        </timeShifting>
    </technicalChannel>
</cmsData>

Enabling/disabling LTCU using the CPM APIs

To enable/disable LTCU for channels/events that have already been ingested:

  1. To enable/disable LTCU for a channel and all of its existing and newly-created events:
    1. Send a PUT request to:
      https://<host>:<port>/cpm/content/v1/editorialChannels/{editorialChannelId}

      The payload should contain the following (for enable – for disable, set the value to false):

      CODE
      {
         "timeshifting" : {
            "longTermCatchUpSupport": true,
            "longTermCatchUpParameters": {
               "eventDefaultFlag": true
            }
         }
      }

      Optionally, you can enable guard times by specifying "guardTimeStart" and "guardTimeEnd" as siblings of "timeshifting". Values are in ISO 8601 format with a restricted allowed pattern of PnDTnHnMnS. For example "PT30M" specifies a thirty-minute offset.

      Note that these guard times are used for both LTCU and NPVR.
    2. Send a PUT request to:
    3. https://<host>:<port>/cpm/content/v1/technicalChannels/{technicalChannelId}

      The payload should contain the following (for enable – for disable, set the value to false):

      CODE
      {
         "timeshifting" : {
            "longTermCatchUpSupport": true
            }      
         }
      }
  2. To enable/disable LTCU for an event, send a PUT request to:

    https://<host>:<port>/cpm/content/v1/events/{eventId}

    The payload should contain the following (for enable – for disable, set the value to false):

    CODE
    {
       "timeshifting" : {
          "longTermCatchUpSupport": true
          }      
       }
    }

Enabling LTCU using OpCon

See:

Specify the node that captured events are assigned to

If you are using ION as your client app and want to be able to create a section in ION to display LTCU content or to promote such content in ION, you must specify a node that captured LTCU events will be assigned to.

To do this:

  1. Create a root node in OpCon, as explained in Configuring nodes.
  2. Name the root node CUParentNodeId.

Once you have created this node, a node will be automatically created for each channel for which LTCU is enabled, and the captured events will be added to the appropriate channel's node.


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.