Skip to main content
Skip table of contents

Single-stage VOD workflow

Overview

OpenTV Video Platform supports single-stage VOD workflows without JITP, such as those used with AWS Elemental. It also includes an adaptor for AWS Elemental.

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 workflow without JITP:

NAGRA has created adaptors for Harmonic VOS360 and AWS Elemental encoders/packagers. If you are using a different encoder and/or packager, they must implement the appropriate NAGRA Encoding and Packaging API or Publish/Purge API.

Main steps

Setting up a single-stage VOD workflow without JITP consists of the following main stages, which are explained in detail in the following sections:

  1. Specify source, processing, security, and destination devices.
  2. Configure encoding profiles and attach them to the editorial content.

Once these are set up, the encoding job will be run according to a schedule based on the content start date and the dueDateOffset configured in the encoding profile. (For example, if the dueDateOffset is seven days, the encoding job will be run seven days before the configured content start date.)

Asset transfer and content purge are also supported. These are explained in the following pages:

Prerequisites

Content must have been ingested

The VOD content must have been ingested into the Content and Product Manager (CPM) via the CIM-NIS module. See the following example:

Sample CIM-NIS XML file

CODE
<?xml version="1.0" encoding="UTF-8"?>
<cmsData executionDate="2023-06-01T00:00:00Z"
    xmlns="nis.cim.sp.ml.nagra.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="Nagravision-Import-Full-Specification-v5.x.xsd">
   <editorialContent providerId="preclear34" providerResourceId="processing_GenericAssetContent34"
                     name="Generic Asset Editorial Content34"
                     contentType="movie" profileIds="pivot_creation_DEMO34;purge_vod_VOS360_34">
      <metadataSet locale="none">
         <metadata key="Duration">2760</metadata>
         <metadata key="EpisodeNumber">14</metadata>
         <metadata key="Rating">177</metadata>
         <metadata key="PromoImages">http://host40/data/posters/InfernalAffairsSeason1.jpg</metadata>
         <metadata key="Subtitles">chi-Standard</metadata>
         <metadata key="AudioMode">Nicam Stereo</metadata>
         <metadata key="Language">chi</metadata>
         <metadata key="Definition">HD</metadata>
         <metadata key="Img_event_270_360_shows">https://host37/poster/InfernalAffairsSeason1.jpg</metadata>
         <metadata key="Img_event_480_270_shows">https://host37/poster/InfernalAffairsSeason1.jpg</metadata>
      </metadataSet>
      <metadataSet locale="en_GB">
         <metadata key="Title">Infernal Affairs S1E14</metadata>
         <metadata key="Description">Mainland CID Officer JIANG ZIDAN,nicknamed "BULLET", infiltrates a Hong Kong triad group to investigate a cross-border drug trafficking case. HON LONG, works closely with BULLET and CHUN-HIN on the surface, but what lies underneath is indeed immeasurable power struggle, causing endless rivalry between the good and the evil, among these "frenemies"</metadata>
         <metadata key="Episode">Infernal Affairs (Season 1) [HD]</metadata>
         <metadata key="Synopsis">Mainland CID Officer JIANG ZIDAN,nicknamed "BULLET", infiltrates a Hong Kong triad group to investigate a cross-border drug trafficking case. HON LONG, works closely with BULLET and CHUN-HIN on the surface, but what lies underneath is indeed immeasurable power struggle, causing endless rivalry between the good and the evil, among these "frenemies"</metadata>
         <metadata key="Actors">Him Law;Gallen Lo;Damian Lau;Wang Yang</metadata>
         <metadata key="Genre">Drama Series</metadata>
         <metadata key="SubGenre">Drama</metadata>
      </metadataSet>
      <period start="2019-02-01T00:00:00Z" end="2019-03-01T00:00:00Z"/>
      <referenceAsset uri="ch100.ts" type="HD">
         <metadataSet locale="none">
            <metadata key="FileSize">3000000</metadata>
            <metadata key="FrameDuration">69000</metadata>
         </metadataSet>
         <assetDeviceLocation relativePath="" storageDeviceId="s3_device34" type="source"/>
      </referenceAsset>
   </editorialContent>
   <technicalContent providerId="Demo_tech_34" providerResourceId="providerResource_Demo_tech_34"
                     name="Generic Asset technical Content34"
                     profileId="DASH_package_creation_DEMO_For_Clear12">
      <metadataSet locale="none">
         <metadata key="Duration">2760</metadata>
         <metadata key="Definition">HD</metadata>
      </metadataSet>
      <period start="2019-02-01T00:00:00Z" end="2019-03-01T00:00:00Z"/>
      <editorialContentRef providerResourceId="processing_GenericAssetContent34" providerId="preclear34" />
      <securityInfo id="cc653259-fee6-401c-8d57-51b7ba34ae99" securityDeviceId="securityDevice01">
        <metadataSet locale="none">
             <metadata key="securityDeviceKey1">securityDeviceValue1</metadata>
        </metadataSet>
    </securityInfo> 
      
   </technicalContent>
</cmsData>

Technical content must contain encryption information

If the content needs to be encrypted, make sure that the TechnicalContent contains a securityInfo section:

  • If you specify the securityId for each technical content, it will be sent to the encoder as part of the packaging request.
  • If you do not specify the securityId as part of the ingest, but have defined the securityInfo section, the CPM automatically generates a securityId which will be sent as part of the packaging request.

Example

Sample technical content with securityInfo defined

CODE
<technicalContent providerResourceId="priddpa1" name="technical content 1" providerId="piddpa1" profileIds="packaging_HLS">
    <metadataSet locale="en_EN">
      <metadata key="Title">Technical Content d1 Title (en_EN)</metadata>
      <metadata key="Description">Technical Content d1 Description (en_EN)</metadata>
    </metadataSet>
    <period start="2023-06-14T02:00:00Z" end="2023-06-14T03:30:00Z"/>    
    <editorialContentRef providerResourceId="priddra1" providerId="piddra1"/>
    <securityInfo id="drmid01" securityDeviceId="drmInstanceName01">      
    </securityInfo>
    <timeShifting shortTermCatchUpSupport="true"/>  
</technicalContent>

No playable assets

Technical content must not have any playable assets.

Specify source, processing, and destination devices

Specify the source device

To specify the source device:

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

    CODE
    {
       "name":"CIS",
       "id":"CIS",
       "originalDeviceId":"11117cf5-8d2f-4fce-939b-1cb404edc048",
       "metadataSet": {
        "accessKey": "accessKey",
        "accessSecret": "accessSecret",
        "s3region" : "us-west-1"
      },
       "workflow":{
          "pendingJobs":0,
          "maxJobsAllowed":10,
          "accessPoints":[
             {
                "endPoint":"as3://s3.amazonaws.com/mediaconvert-test-nagra/source/",
                "type":"s3"
             }
          ]
       }
    }

    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 processing device

To specify the processing device:

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

    CODE
    {
       "id":"generic_encoding_device",
       "name":"AWS Elemental MediaConvert Adapter",
       "workflow":{
          "accessPoints":[
             {
                "endPoint":"http://host:port/EncoderControlWS",
                "type":"soap"
             },
             {
                "endPoint":"http://host:port/APUBIWS",
                "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/
    

Specify the destination device

To specify the destination device:

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

    CODE
    {
       "id":"CDN",
       "name":"CDN",
       "workflow":{
          "accessPoints":[
             {
                "endPoint":"as3://s3.amazonaws.com/mediaconvert-test-nagra-cdn/destination/Test/",
                "type":"s3"
             }
          ],
          "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/
    

Specify the security device

To specify the security device:

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

    CODE
    {
       "id":"SecurityDevice_HLS",
       "name":"SecurityDevice used for HLS encryption",
       "metadataSet":{
          "drmSystemId":"ba653259-daa6-703c-1a85-85x3yz43uv11-e65dac6c"
       }
    }

    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 profiles

To enable automatic retry of failed jobs, include the following attributes in encoding 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 encoding profiles

You need to configure a separate encoding profile for each technical version there will be of each asset.

To configure an encoding profile:

  1. Construct a profile that looks like this example:

    CODE
    {
       "id":"hls_encrypted_transcoding_profile",
       "type":"ContentPreparation",
       "name":"Transcoding profile for EncoderControl workflow",
       "businessRulesProperties":{
          "sourceAssetType":"HD",
          "sourceAssetDeviceLinkType":"source",
          "destinationAssetDeviceLinkType":"destination"
       },
       "workflow":{
          "deviceUsedForResourceAllocation":"CDN",
          "processingDevice":{
             "id":"generic_encoding_device",
             "accessPointType":"soap"
          },
          "sourceDevice": {
            "id": "CIS",
            "accessPointType": "s3"
          },
          "destinationDevice":{
             "id":"CDN",
             "accessPointType":"s3",
             "relativePath":""
          },
          "workflowVersion":"genericEncodingWithEncoderControlAPIv0.9",
          "workflowInputProperties":{
             "sourceUri":"",
             "destinationUri":"",
             "encoderProfileId":"HLS",
             "checkForSourceAssetPresence": false,
             "securityId": "",
             "securityInfo":"",
             "processWithEncryption": true
          },
          "workflowOutputProperties":{
             "fullDestinationUri":""
          }
       }
    }

    The full list of fields is available in Profile attributes.

Attach the profile to the editorial content by submitting it to the Business Configuration Manager (BCM). Send a POST request to the BCM's profiles API with the profile as the request payload:

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

Configure the purge profile

To configure the purge profile:

  1. Construct a profile that looks like this example:

    CODE
    {
       "id":"purge_raw_asset_profile",
       "type":"ContentPreparation",
       "name":"Purge RAW/Clear asset profile using generic asset purge workflow",
       "businessRulesProperties":{
          "sourceAssetDeviceLinkType":"destination",
          "basedOnEndDate": true,
          "dueDateOffset": 0
       },
       "workflow":{
          "deviceUsedForResourceAllocation":"processingDevice",
          "processingDevice":{
             "id":"generic_encoding_device",
             "accessPointType":"http"
          },
          "sourceDevice": {
          "accessPointType": "s3",
          "id": "CDN"
          },
          "workflowVersion":"VODPurgeUsingAPUBIv1",
          "workflowInputProperties":{
             "sourceUri":"",
             "processingUri":""
          },
          "workflowOutputProperties": {
          "recordId": ""
        }
       }
    }

    The full list of fields is available in Profile attributes.

  2. Attach the profile to the editorial content by submitting it to the Business Configuration Manager (BCM). Send a POST request to the BCM's profiles API with the profile as the request payload:

    https://<host>:<port>/businessConfig/admin/v1/profiles/
JavaScript errors detected

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

If this problem persists, please contact our support.