VOD content integration and usage guide
VOD overview
OpenTV Suite provides VOD processing through ingest, transcoding, packaging, and publishing to ION or third-party Apps. The recommended approach is to:
Automatically ingest VOD into content nodes that mirror the desired pack structure.
Link those content items directly to product(s) via the API.
View the VOD items in ION or your own application.
In ION, view VOD items promoted by Ncanto recommendations – recommendations are important for user navigation of VOD libraries. It's possible to use it without recommendations but content discovery with larger VOD libraries is difficult.
Promote content in the Magazine/Strips view or use recommendations to fill those views.
Overview diagram

Terms and concepts
Term | Definition |
---|---|
Node | A container in the CMS that contains content items. Generally holds VOD, Short-Term Catch Up, Long-Term Catch Up items Can be nested in a hierarchical tree of nodes A content item can be in only one node. |
Product | A product is group of either Live or VOD content that is part of an offer to a consumer. Products are subscription-based. |
Content Group | A content group is used to model Series and Season. A content group can be in a hierarchy of content groups. |
Offer | An offer is grouping of products to allow combination of live and VOD content into single offer and/or grouping mutiple products into a single offer for convenience. |
Content grouping type | A way of grouping content, for example, Popular, Continue Watching, Trending, and so on |
Metadata – how to ingest
How to ingest an XML file
The Content and Product Manager (CPM) provides provides two ways to import scheduled broadcast events from another system:
Rest API
XML-based ingestion using NAGRAVISION specification
XML-based ingestion is the recommended way of ingesting VOD assets within OPF 3.x. This section gives an overview of XML-based VOD ingestion. REST API-based VOD ingestion is covered here.
The OPF 3.x import is deployed as an Content Importer (CIM) that runs on a regular basis. When launched, the CIM retrieves the list of files to be processed by checking the directory specified in its configuration, looking for data files whose names match a specific pattern (generally *.xml
). This directory must be located on a file server that CIM can access. The FTP/SFTP protocol is supported as well as direct file access.
By default, files are processed in alphanumeric (case-sensitive) filename order. To ensure that the files are processed in the same order as they were generated, the file name should start with the date and time of file generation in a numeric format, with the year first. This behaviour can be changed through the appropriate setting in the CIM.
To prevent file access errors that can occur if the importer tries to process a file while it is still being generated or copied by the data provider, the data provider must perform a two-stage provisioning operation. It must first generate or copy the file into a working directory and/or with a file extension that is different from the one that the importer expects. Second, it must move the file to the correct directory and/or change the file extension to what the importer expects. If different directories are used, it is essential that they are on the same physical disk and file system so that the operating system can make this change as an atomic action without creating an extra copy of the file. This way, the importer can only “see” the files once they are complete.
Once the CIM has processed the file, it returns an acknowledgement to the data provider by renaming the source file. The parameters for file extensions (filePollingPattern
, processingFileExtension
, successFileExtension
, failedFileExtension
, and errorFileExtension
) can be configured in the APS.properties
file. if the import was successful, the .progress
suffix is removed and the .success
suffix added. If errors are detected during the import, the suffix .failed
is added. In case of failure, an error log file with the same name as the source file and an .error
extension is created and written into the same directory as the source file.
When processing multiple files, if CIM detects an error for one file, it still tries to import the subsequent files.
The data provider is responsible for deleting the processed files once it has detected the above acknowledgement.

The XML file ingest is triggered automatically at regular intervals as defined by a cron expression in the importer's configuration.
The importer supports ingestion of the following on-demand entities:
Entity | Type | Description | With ION usage Recommended | |
---|---|---|---|---|
Editorial Contents | Metadata Management | Handles editorial metadata about content/event (MOVIE, TRAILER) Content Type and Genre are used to populate ION browse view | y (with Image) | |
Technical Content | Asset Management | Represents a consumption format of the editorial content | y | |
Reference Asset | Asset Management | Representation of a physical byte array (file URL, ID of resources on some third-party system) used as a source to create a Playable Asset of another Reference Asset (pre-processing feature) | n | |
Playable Asset | Asset Management | Representation of a physical byte array (file URL, ID of resources on some third-party system) playable on a end user device. This type of asset is communicated to the end user device. | y | |
Security Information | Asset Management | Makes the link between an entity and a security device/system and handles security-system-specific information (especially the ID of the entity into the security system) | y | |
Content Groups | Metadata Management | Handles additional editorial metadata for a grouping of editorial content (series/season/movie group) | y (for series) | |
Trailer link | Metadata Management | This element defines the relationship between a movie and its trailer (promotion of movie). Both movie and trailer are ingested as Editorial content within the CMS system. Note: Trailers are not supported by ION as for SVOD solutions we have chosen to let users view video directly on purchased content. | n | |
Product | Product Management | The Product element allows definitions of various VOD and Schedule offers. It includes information such as nominal price, purchasable period, rights and billing model. | n | |
Product Link | Product Management | Makes the link between the marketable (TechnicalChannel, Node, ContentPublishingWindow in this case) and the product. Handles the validity period of the marketable into the product – if not defined, the validity of the marketable will apply. | y | |
Content Publishing Window | Catalogue Management | Handles the publication of a piece of content (i.e., TechnicalContent) in the way to purchase the content and way to access this content using navigation (via nodeId, regardless of whether the node is defined in OPF or not). | n | |
Node | Catalogue Management | Handles the grouping of ContentPublishingWindows in a tree structure. | Optional just help organise OpCon/ION |
The following data are not imported:
Profiles
Images (Images must be ingested with respective entities as preformed URLs.)
AssetData
Details regarding the elements and their respective fields can be found in the NAGRAVISION Ingestion Specification (see Content import). Tables outlining the entities and their respective fields can be found in Metadata ingest format.
The CIM commits all the data changes contained in each file to CPM using multiple transactions. If it detects an inconsistency, either within the file's data or between the file’s contents and data already in the CPM database (through configurable business rules). it:
Add an error to the error list.
Does not commit the change from the relevant entity.
Continues ingest of the other entities.
When such a case occurs, the file provider must correct the error/inconsistency by submitting a new, modified XML file or updating the existing data.
A VOD asset can come from one of two sources: VOD asset published through workflows, or live content that has been captured and made available through long-term catch-up (LTCU). In certain edge cases, there can be a time delay between publishing the VOD asset's metadata and the asset's URL actually being available (that is, the URL required for playback).
To avoid any problems that this might cause, you are advised to only consider a VOD asset to be valid if both of the following are true:
The asset's VOD record contains a valid LTCU technical asset with a valid URL
The asset's VOD record contains a valid technical section with a technical VOD asset
For example:
technicals: {
...
media: {
AV_PlaylistName: {
fileName: "http://cdn-nagravision-01.vos360.video/Content/HLS/VOD/13879920-163b-47e7-a8f9-68f2b014065a/1b5438f9-e403-58f7-9d4b-a4127e880a4c/index.m3u8",
uri: "http://cdn-nagravision-01.vos360.video/Content/HLS/VOD/13879920-163b-47e7-a8f9-68f2b014065a/1b5438f9-e403-58f7-9d4b-a4127e880a4c/index.m3u8",
format: { }
}
}
...
}
Direct ingestion of pre-encoded assets
A final playable asset can be generated within OPF 3.x by:
Automated workflows
Direct ingestion of assets that have already been encoded
Pre-encoded assets can be ingested into OPF 3.x by ingesting the final playable URI that is referenced in the playableAsset
entity under technical content.
Do not include a reference asset or a workflow profile in the editorial content.
If a reference asset and workflow profile are found in the editorial content, OPF 3.x creates automated workflows to process the reference asset. This overrides the playableAsset
URI ingested through XML with the final playableAsset
URI generated by the automated workflows.
Example playableAsset
definition with pre-encoded asset in an XML ingest file:
<playableAsset uri="http://server:port/vod1/hls/vod1.m3u8">
<assetDeviceLocation relativePath="asset" storageDeviceId="CIS" type="source"/>
</playableAsset>
Configuration and an overview of the automated workflow are covered in following section.
OpCon – what we can see and monitor in it
Preparing your VOD content
VOD Workflow is not applicable if you directly prepare content. The menu could still appear (it can be hidden via the Roles system) but will have no workflows showing.
The VOD workflow screen is the key workspace within OpCon that allows operators to view the E2E content preparation lifecycle for any given VOD content item. The key functionality includes:
Ability to view the overall workflow statuses associated to a VOD content item
This provides the operator with an overview of whether a VOD content item is fully prepared and available for applicable subscribers to consume.Ability to drill into the jobs associated to a given workflow
The jobs associated to a given workflow provide a more granular time-line of the VOD content preparation steps, e.g., upload metadata, package content, publish content, etc., and make it easier for the operator to identify the point of failure.Ability to retry failed workflows or jobs (Q2)
Ability to cancel scheduled workflows or jobs, when they need to be put on hold or when they are no longer required (Q2).
Metadata correction (API and OpCon)
Viewing and editing the existing VOD content metadata
The VOD catalogue screen is the key workspace within OpCon that allows operators to view and edit the existing VOD content metadata. The key functionality includes:
Viewing basic and advanced VOD content metadata sets (within the grid and advanced content properties window)
Editing basic and advanced VOD content metadata sets (within the grid and advanced content properties window)
Viewing the default image associated to VOD content (within the advanced content properties window)
Editorial Management of VOD content to ION
The UI Builder screen is the key workspace within OpCon that allows operators to specify how to to lay out and display their VOD content to their subscribers. The key functionality includes:
Magazine
Ability for the operator to create and manage the ION magazine. The key functionality includes:
Ability for the operator to set their desired magazine layout template
There are currently six magazine templates for the operator to selectAbility for the operator to set the title of the magazine
This allows the operator to set the context of the magazine, e.g., featured, promoted, suggested, etc.The content displayed will be capped based page limit of 20 (pre-set within point 2 of Organising your VOD content).
Ability for the operator to promote a node (pre-created in point 2 of Organising your VOD content.
), a VOD content item, or a content grouping type to a single magazine tile. The key functionality includes:
Selecting a VOD node, content item or continue watching from the list
Note: when promoting a node, the image of the No.1 priority content item will be displayed pre-set within point 2 of Organising your VOD content).Setting the title for a single magazine tile:
e.g., content title, genre, promotion, etc.Push these promotions to ION.
Strip
Ability for the operator to create and manage the ION strips. The key functionality includes:
Ability for the operator to set the title of a strip. This allows the operator to set the context of a strip, e.g., genre, featured, promoted, etc.
Ability for the operator to specify the placement of a specific strip by moving it up or down
Ability for the operator to delete redundant strips
Ability for the operator to promote a node (pre-created in point 2 of Organising your VOD content) or a content grouping type to a single strip. The key functionality includes:
Selecting a VOD node or content grouping type from the list
Note: the images of the content items will be automatically displayed within the strip.
Note: the content priority (pre-set within point 2 of Organising your VOD content) will drive the strip layout, e.g., content will be ordered left-to-right based on ascending priority order.
Push these promotions to ION.
Types of items in Magazine view and Strip
Type | Decription | Recommendations required | Magazine | Strips |
---|---|---|---|---|
VOD Node | A node containing VOD items (which include Short-Term Catchup). Only includes direct items in the node for nodes in middle of the tree. | N | Y | Y |
Content Item | Live or VOD items | N | Y | Y |
Recommendations | NAGRAVISION-defined Ncanto recommendation profiles | Y | Y | Y |
Continue Watching | Last content bookmarked automatically by the system for the account | N | Y | Y |
Continue Watching | With recommendations bookmarks are ordered by preferences | Y | Y | Y |
Popular | All time most popular content | Y | Y | N |
Trending | Recent trending content | Y | Y | N |
Creating an SVOD product in OPCON
The VoD catalogue screen is the key workspace within OpCon that allows operators to monetise their content by creating SVOD products. The key functionality includes:
Ability for the operator to create and manage SVOD products:
Ability for the operator to set basic SVOD product properties, e.g., product title, description, currency, price, etc.
Ability for the operator to add a Content directly to a product
Ability for the operator to insert all content, or one or many nodes (pre-created in point 2 of Organising your VOD content) and/or one or many content items into an SVOD product.
Ability for the operator to add VOD content into existing SVOD products.
Ability for content ingested into a node to be automatically linked to a product linked to that node.
Ability for the operator to create and manage TVOD products (Q2).
Example Node Structure
Root
Short Term Catch Up Node
TV1
Content Items...
Rotana 1
Content Items...
On Demand
Disney
Star Wars
Content Items...
ABC
Content Items...
HBO
Content Items...
Game Of Thrones - S01E01 (Series Number/Episode number as metadata fields not in the title)
Game Of Thrones - S01E02
...
Game Of Thrones - S02E01
...
Sopranos - S01E01
...
Canal+
Content Items...
Pricing and purchasing (as per Q2)
Direct CRM product entitlements
These routes allow an operator/CRM to provision products for an account.
Note that in all cases, NAGRAVISION does not hold any payment card data. Due to PCI compliance concerns, there is no intention to change this policy.
See Managing subscriptions for more details.
Node association
Organising your VOD content
The VOD catalogue screen is the key workspace within OpCon that allows operators to organise their VOD content. The key functionality includes:
Ability to view the VOD catalogue – this enables the operator to view their entire VOD content collection.
Ability to create “nodes” that enable the operator to create a bespoke collection/group of content by:
Setting a node name
This allows the operator to set the context of how they wish to group the VOD content, e.g., by genre, by promotions, by offering, etc.Searching against the entire VOD catalogue and inserting one of many VOD content items into the node
Note: there is currently a constraint within the platform that prevents operators from being able to add the same content item into more than one node.Setting a content priority against the VOD content items within the node
Note: the priority will drive the display ordering within the ION magazine and strips (see Magazine 2a and Strip 2aii for more details)
Defining the roles required to administer on-demand
VoD administration
The users and roles screens allow operators to create roles and assign these roles to one or many users. In order for a user to administer the above, the below role would be required:
“Full access” rights to VOD catalogue
“Full access” rights to VOD workflow
“Full access” rights to UI Builder
Series association
API
Series in OPF 3.x are defined by ContentGroup
s, and each ContentGroup
has a defined type which can be series
, season
, movieGroup
, or collection
.
A content can be associated with:
Zero or one
ContentGroup
s of typeseries
(either directly, or through a season)Any number (including zero) of
ContentGroup
s of typecollection
This means that:
An individual content can belong to a series and to one or more collections
A collection can contain series, seasons, individual content items, and/or other collections.
For example, you could have a collection that includes a collection of movies (such as the Marvel movies, which may consist of several movie groups) and a collection of related TV series.

ContentGroups
are uniquely identified by the combination of a providerResourceId
and a providerId
, and the providerResourceId
must always be unique for a given providerId
.
An example of a ContentGroup
specification that, because of a duplication in providerResourceId
, is invalid is shown below:
<?xml version="1.0" encoding="UTF-8"?>
<cmsData executionDate="2019-04-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">
<!-- This is the definition of the first content group-->
<contentGroup providerResourceId="Demo1" name="First Season Content Group" providerId="Babeleye" type="season">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the season</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
</contentGroup>
<!-- This is the definition of the second content group, which is invalid since the providerResourceId is not unique within the context of the Babeleye provider -->
<contentGroup providerResourceId="Demo1" name="Second Season Content Group" providerId="Babeleye" type="season">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the season 2</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
</contentGroup>
</cmsData>
This can be corrected very simply by providing a unique providerResourceId:
<?xml version="1.0" encoding="UTF-8"?>
<cmsData executionDate="2019-04-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">
<!-- This is the definition of the first content group-->
<contentGroup providerResourceId="Demo1" name="First Season Content Group" providerId="Babeleye" type="season">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the season</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
</contentGroup>
<!-- This is the definition of the second content group, which is now valid since the providerResourceId is unique within the context of the Babeleye provider -->
<contentGroup providerResourceId="DemoUnique" name="Second Season Content Group" providerId="Babeleye" type="season">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the season 2</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
</contentGroup>
</cmsData>
The above ingest would, assuming no other irregularities, produce two new season ContentGroups
as shown below:

A ContentGroup
can itself be linked to another ContentGroup
, and thus a standard series/season relationship can be modelled. To achieve this, we define a parentRef
on the season ContentGroup
. The parentRef
requires the appropriate series providerId
and providerResourceId
combination to complete the link. An example of the link in action is shown below.
<!-- This is the definition of series -->
<contentGroup providerResourceId="GOTSeries" name="Game Of Thrones" providerId="Demo" type="series">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the series</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
</contentGroup>
<!-- This is the definition of season1 -->
<contentGroup providerResourceId="season1" name="Season 1" providerId="Demo" type="season">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the season</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
<!-- This is where season is associated with series -->
<parentRef providerId="Demo" providerResourceId="GOTSeries"/>
</contentGroup>
<!-- This is the definition of season2 -->
<contentGroup providerResourceId="season2" name="Season 2" providerId="Demo" type="season">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the season 2</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
<!-- This is where season is associated with series -->
<parentRef providerId="Demo" providerResourceId="GOTSeries"/>
</contentGroup>
The above example would produce a Game of Thrones ContentGroup
of type series
, with two ContentGroup
s of type season
now linked to it.
The model representation:

A more visually recognisable structure:

There is no restriction for a season name to contain the word season, so a season ContentGroup
can be called "Season x" equally as much as "Specials".
Although it may sound obvious, a ContentGroup
must always be created first before it can be referenced. This holds true both for references within the same XML ingest file, and for any future references in subsequent XML files.
ContentGroup
s may be set up in advance of the content they support – different XML ingest files and potentially different timeframes.
There is no explicit episode definition in the NAGRAVISION ingest specification; an EditorialContent
can be considered an Episode if it is linked to either a series or season ContentGroup
. In the below example, each of the blue EditorialContent
definitions can be considered true episodes of the season they are directly linked to, and by virtue of the season link to the series, they are also episodes of the Game of Thrones series.

Live series can also be represented by this model, with ContentGroup
definitions needing to be associated with the desired EditorialContent
(s). Consider the simple example of two Game of Thrones events; the first is a re-run of the Season 1 finale, and the second is the premiere of Season 2. They are broadcasting back to back.
The model configuration would look something similar to the below:

A more recognisable structure:
The entire example structure is explored in more detail with the below XML ingest (with less specific names):
<?xml version="1.0" encoding="UTF-8"?>
<cmsData executionDate="2018-09-07T00: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">
<!-- This is the definition of series -->
<contentGroup providerResourceId="series1" name="content group series" providerId="Babeleye" type="series">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the series</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
</contentGroup>
<!-- This is the definition of season1 -->
<contentGroup providerResourceId="season1" name="content group season" providerId="Babeleye" type="season">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the season</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
<!-- This is where season is associated with series -->
<parentRef providerId="Babeleye" providerResourceId="series1"/>
</contentGroup>
<!-- This is the definition of season2 -->
<contentGroup providerResourceId="season2" name="content group season 2" providerId="Babeleye" type="season">
<metadataSet locale="fr_FR">
<metadata key="Description">Description of the season 2</metadata>
</metadataSet>
<period start="2018-01-01T00:00:00Z" end="2023-12-31T00:00:00Z"/>
<!-- This is where season is associated with series -->
<parentRef providerId="Babeleye" providerResourceId="series1"/>
</contentGroup>
<editorialContent providerResourceId="EdContent1" name="editorial content 1" providerId="Babeleye" contentType="movie">
<metadataSet locale="none">
<metadata key="Definition">SD</metadata>
<metadata key="Categories">Music;Entertainment</metadata>
<metadata key="Rating">0</metadata>
<metadata key="Countries">fr;it</metadata>
<metadata key="Year">2017</metadata>
</metadataSet>
<metadataSet locale="fr_FR">
<metadata key="Synopsis"></metadata>
<metadata key="Description"></metadata>
<metadata key="Title">L'orchestre De La Scala Place Du Dôme De Milan</metadata>
</metadataSet>
<metadataSet locale="en_GB">
<metadata key="Synopsis">Riccardo Chailly, the Scala Philharmonic Orchestra and Nikolaj Znaider perform Tchaikovsky and Nino Rota.</metadata>
<metadata key="Description">Riccardo Chailly, the Scala Philharmonic Orchestra and Nikolaj Znaider perform Tchaikovsky and Nino Rota.</metadata>
<metadata key="Title">The Orchestra De La Scala Square Duomo Milan</metadata>
</metadataSet>
<period start="2018-06-14T02:00:00Z" end="2023-06-14T03:30:00Z"/>
<parentalRatings>
<parentalRating ratingBodyName="Motion Picture Association of America (MPAA)" contentRatingCode="TV-PG" countryCode="US"/>
<parentalRating ratingBodyName="Australian Classification Board" contentRatingCode="TV-PG" countryCode="AU"/>
</parentalRatings>
<!-- This is the link to season1 -->
<contentGroupRef providerId="Babeleye" providerResourceId="season1"/>
</editorialContent>
<editorialContent providerResourceId="EdContent2" name="editorial content 2" providerId="Babeleye" contentType="movie">
<metadataSet locale="none">
<metadata key="Definition">SD</metadata>
<metadata key="Img_event_480_270_shows">BE/babeleye/programs/caT2_69034.jpg</metadata>
<metadata key="Img_event_270_400_shows">BE/babeleye/programs/69034.jpg</metadata>
<metadata key="Categories">Show;Politics</metadata>
<metadata key="Countries"></metadata>
<metadata key="Year">0</metadata>
</metadataSet>
<metadataSet locale="fr_FR">
<metadata key="Synopsis">Deux reportages consacrés aux États-Unis : 'Detroit, la renaissance' et 'To vote or not to vote'.</metadata>
<metadata key="Description">Deux reportages consacrés aux États-Unis : 'Detroit, la renaissance' et 'To vote or not to vote'.</metadata>
<metadata key="Title">Arte Reportage</metadata>
</metadataSet>
<period start="2018-06-14T02:00:00Z" end="2023-06-14T03:30:00Z"/>
<!-- This is the link to season2 -->
<contentGroupRef providerId="Babeleye" providerResourceId="season2"/>
</editorialContent>
<editorialChannel providerId="Babeleye" providerResourceId="BE_8006" name="ARTEHDFr_8006">
<channelEvents startFrom="2018-08-29T03:00:00Z" endUntil="2018-08-29T05:00:00Z">
<event providerId="Babeleye" providerResourceId="Event1" name="L'orchestre De La Scala Place Du Dôme De Milan" >
<period start="2018-08-29T03:00:00Z" end="2018-08-29T04:15:00Z"/>
<parentalRatings>
<parentalRating ratingBodyName="Motion Picture Association of America (MPAA)" contentRatingCode="TV-PG" countryCode="US"/>
<parentalRating ratingBodyName="Australian Classification Board" contentRatingCode="TV-PG" countryCode="AU"/>
</parentalRatings>
<!-- This is the link to content -->
<editorialContentRef providerId="Babeleye" providerResourceId="EdContent1"/>
</event>
<event providerId="Babeleye" providerResourceId="Event2" name="Arte Reportage">
<period start="2018-08-29T04:15:00Z" end="2018-08-29T05:00:00Z"/>
<parentalRatings>
<parentalRating ratingBodyName="Motion Picture Association of America (MPAA)" contentRatingCode="TV-PG" countryCode="US"/>
<parentalRating ratingBodyName="Australian Classification Board" contentRatingCode="TV-PG" countryCode="AU"/>
</parentalRatings>
<!-- This is the link to content -->
<editorialContentRef providerId="Babeleye" providerResourceId="EdContent2" />
</event>
</channelEvents>
</editorialChannel>
</cmsData>
OpCon
There is currently no facility to manage series or season links within the Operator Console. We instead recommend managing these via XML ingest.
Consuming APIs
Browse
Browsing the catalogue irrespective of the source of the content requires content to be identified by type (TV shows, movies, and genres as a type of presentation). (This is done by specifying the editorial content's contentType
as movie
or tvshow
at ingest.)
Sample browse URL:
https://api.aws.sales.sedemo.otvse.com/metadata/delivery/GLOBAL/vod/editorials?filter={"voditem.nodeRefs":{"$in": ["TRENDING"]},"technical.deviceType":"IOS","locale":"en_GB"}&locale="en_GB"&limit=9999&sort=[["Categories", 1]]&fields=["editorial.Categories"]
Discover
Magazine
A presentation and use-case-driven API that provides a list of content to be shown to the user.
Presentation of the template and use-cases are chosen in OpCon's UI Builder.
Sample magazine URL:
https://api.aws.staging.staging-vpc.otvse.net/cds/v1/magazine/accounts/5bec0ce15bf1fc0001c42066?token=<Token_acquired_in_signin_process>

Strips
An API driven by content grouping type (e.g., popular, trending, continue watching, etc.; shown as "Usecase" in the following diagram) that provides a list of content to be shown to the user.
Types of content grouping to be shown to the user are selected in the OpCon user interface.

Search
Sample search URLs:
https://api.aws.staging.staging-vpc.otvse.net/metadata/solr/GLOBAL/search?q=title:Home OR category:Home OR actors:Home OR synopsis:Home OR year:Home OR description:Home&fq=(scope:btv AND ((catchupStart:[* TO 1552542075] AND catchupEnd:[1552542075 TO *]))) OR scope:vod OR (scope:btv AND ((eventStart:[* TO 1552542075] AND eventEnd:[1552542075 TO *]) OR (eventStart:[1552542075 TO *])))&fq=locale:en_GB&fl=id,scope,isEpisode,catchupStart,eventStart&wt=json&rows=100 https://api.aws.staging.staging-vpc.otvse.net/metadata/solr/GLOBAL/search?q=title:"Home" OR category:"Home" OR actors:"Home" OR synopsis:"Home" OR year:"Home"&fl=title,id,scope,rating.precedence,rating.code,service,eventStart,eventEnd,entity&fq=(scope:btv AND ((eventStart:[* TO 1552546198] AND eventEnd:[1552546198 TO *]) OR (eventStart:[1552546198 TO *]))) OR (scope:btv AND (catchupStart:[1551941398 TO *] AND catchupEnd:[1552546198 TO *])) OR scope:vod&wt=json&rows=100
The following diagram depicts usage of the SOLR API for searching on various parameters with examples:

Favourite/Bookmark list of VOD Content
Bookmark sample URLs:
https://api.aws.deviceinteg01.integ.otvse.net/useractivityvault/v1/clientdata/account/5c10ab8154f4a900018a54f1/bookmarks?token=<Token> https://api.aws.deviceinteg01.integ.otvse.net/useractivityvault/v1/clientdata/account/5c10ab8154f4a900018a54f1/bookmarks/GLOBAL_20711_20190314020000?token=<Token>
Favourite sample URLs:
https://api.aws.staging.staging-vpc.otvse.net/useractivityvault/v1/clientdata/account/5bec0ce15bf1fc0001c42066/favouriteslists?token=<Token> https://api.aws.staging.staging-vpc.otvse.net/useractivityvault/v1/clientdata/account/5bec0ce15bf1fc0001c42066/favouriteslists/326dd600-448c-11e9-acbf-155a326abcda/content/Babeleye_BE_224?token=<Token>
See the User Activity Vault (UAV) API documentation for examples.
ION
Browse
FireTV and Android TV
As shown below, the ten-foot design version enables the user to browse the TV shows and movies across available sources, live TV, VOD, etc. In each type, the latest content available to the user is provided.
Latest content - in descending order of date added to catalogue.
Content type identification is not available for TV Shows and Movies to be present.

Mobile
Mobile hierarchy is different in presentation from the ten-foot design and looks like the one below.
.jpg?inst-v=78280a5f-e389-4346-a9d8-4a0e7a39e3f2)
Discover
The Discover screen amalgamates the presentation and content grouping preferences of the operator for mosaic and strip views, merging them with personalised content for the user. When a recommendation engine is not part of operator solution, the operator can override with manual curation.


Search
The images below show how the results are shown per endpoint.
Desktop
Search results are re-arranged to show in the order shown in the image below: Live, CU, VOD, Live – future.
Combined episodic results to show single entry for series. (Q2)

The actual screen:

Mobile
Search results are arranged as per ordering of type of content.
Combined episodic results to show single entry for series. (Q2)

fireTV / TVOS
Search results are shown as automatic complete feature.
Combined episodic results to show single entry for series.

Favourites
Mobile/tablet
Favourited content will be shown in the Saved section.
Content can be favourited or unfavourited in the media card.
Services can be favourited in the EPG.
EPG can be filtered by favourited services.

FireTV/tvOS/Desktop
Services can be favourited or unfavourited in the media card.
Now playing events from services are listed in the first row of the live section.
The EPG can be filtered by favorited services.
Content cannot be favourited (only services are allowed to favourite).

Bookmarks
Bookmarks are automatically set when content playback is interrupted.
Content playback can be resumed from the bookmarked position from the media card.
Content playback progress of item can be checked in media card and strips.
VOD content authorisation
How the app knows what content is playable by the user
An authorisation error is sent when content is requested for which the user does not have entitlements.
Entitlements can only be enforced for DRM-protected content. They cannot be enforced for clear content.
On-demand proposal for ingest, search, and browse flow
Pre-requisites
The root node referred by ION "Root" is available.
OPF and OpCon
Ingestion and node management
The VOD asset metadata being ingested into OPF should contain the following details:
All mandatory editorial metadata fields will be provided as per specification.
All content is by default added to node "Recently Added" through XML entry of association.
English, Arabic, and French locale metadata should be ingested for a specific asset.
The content should be tagged with the key
contentType
to indicate whether the content is a TV show or a movie. (Allowed values aretvshow
andmovie
.)Categories must be ingested (for content to be shown as filters in Browse section of ION).
Series items must have reference ingested.
OpCon UI builder should be used to configure the dynamic strips inside Discover.
When a node is selected, the root node selected should be provided in reference (
relatedId
) along with the CDS profile.OpCon should be able to manage display priority of content inside nodes. This would also be used to control the position of the content inside the strip (left to right).
CDS
There will be logic to pick direct child editorials inside the node structure while populating contents for the NODE use case.
ION
Discover
Currently only the first 20 items from a node are displayed, ordered by priority, based on the following rules:
Series items inside the strips would be automatically updated into a single series entity.
Magazine would be configured with the current capabilities of use cases as per OPF documentation.
Browse
ION screen will be adjusted to show TV shows and movies option to the user. When the user clicks on one of these, they would see a list of content, sorted based on the category field.
Filters would be available based on categories for the ingested content.
Search
Ingested VOD items would be searchable. (VOD editorials for the fields of title, description, category, and cast and crew.)
Series would be presented as a single entry rather than episodic content.