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:
- Specify source, processing, security, and destination devices.
- 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
<?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 thesecurityInfo
section, the CPM automatically generates asecurityId
which will be sent as part of the packaging request.
Example
Sample technical content with securityInfo defined
<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:
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.
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:
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.
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:
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.
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:
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.
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 totrue
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:
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:
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.
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/