IPTV describes a system where Live Television or Video on Demand (VOD) content is delivered to a television or computer using Internet Protocol over the service providers managed network (Broadband) for e.g. AT&T U-Verse. When the content is delivered over an unmanaged network it is called OTT (Over the Top) for eg Now TV, Netflix, Amazon prime etc. Different Business Models for Video on Demand is Transactional VOD (TVOD), Subscription Video on Demand ( SVOD), Hybrid combining Subscription and TVOD. SVOD is a subscription plan which provides users with the choice of wide range of videos from different genres to choose and play. TVOD allows viewers to purchase or rent content which they want without requiring a subscription. Video Commerce component within an IPTV/OTT system enables Productization of VoD Content to be sold as TVOD. It sets price of the TVOD product using an Offer Template. Offer template describes how to price the product within its offer period along with the associated rights based on the contract negotiated with the Content Provider. This blog specifies a Data Model to support TVOD Pricing using Couchbase.

Below is a High Level Architecture for Creating a Product with tiered pricing within the offer duration

 

  1. OfferTemplate with Offer Tier is Created in the Video Commerce system using the Pricing component.
  2. The OfferTemplateID with Some meta information For eg Content provider and Offer Tiers with Price is ingested into the Metadata management system
  3. Content scheduling component in the Metadata Management system published the Metadata for the Media to be Productised and available in Catalog. Metadata contains the reference to the Offer Template ID
  4. Metadata Processor Processes the Published Metadata and calls the Video Commerce system Product Management component to create the Product in Product Catalog bucket with the Product and Offer Tiers in the Product based on the Offer Tiers configured in the Offer Template

When user clicks on a Product in the Product Catalog on the UI it calls the Product management Video commerce system. The Product Management Video commerce system retrieves the product with different offer tiers and calculates the current price based on the request time. Logic of this is explained in later part of the blog.

If Business decide to change price in the middle of a Live product with an active offer tier window they can do that by creating a a new offer tier called absolute which overrides any existing active price.

Outlined below is a Data Model for Media to be Productized as TVOD with different Offer Tiers.

 

An offer template consists of one or more offer tiers, each of which outlines the product’s price during a time period. An offer template is assigned to a product on creation to describe its price during the time it’s offered to end users. When an end user buys the product, the offer tier in effect at the time of the purchase determines the product’s  price. To explain this with an example a TVOD High Definition (HD) VOD asset is to be offered 01st March 2020 to 14th July 2020 is to be offered at different price within the different time period as outlined below. Rental duration is for 14 days

 

 

JSON document below is the Offer Template with three Offer Tiers with Different Prices which has to be created in Couchbase used as the data store for the Video Commerce component. The restrictionType in the Offer Tier below can take values as restricted, coming-soon, adjustRentalDuration. If restricted and isRestricted is true then the content cannot be purchased in that offerTier. This provides ability for content providers to create blackout periods for purchase while the content is live in the VoD Catalog.

Key:- OfferTemplate::2851234
JSON Document

{
“id”: “2851234”,                        //Identifier of the Offer Template
“updated”: 1582329599000,    // Timestamp when the Offer template was last updated
“description”: “Template for Disney Kids 1-5”,    // Description of the Offer Template
“created”: 1582329599000,    // Timestamp the Offer Template was Created
“createdByUser”: “gauss/12345”, // User Name /Identifier created the Offer Template
“updatedByUser”: “gauss/12345”, // User Name/Identifier updated the Offer Template
“isTaxIncluded”: true,                     // Price Includes VAT or Sales Tax
“taxCode”: “taxCode12345”,       // Tax Code
“contractStartDate”: 1583020800000, // Start Date of the Contract
“contractEndDate”: 1594771199000,  // End Date of the Contract
“contentproviderId”: “5112”, // Content Provider ID this template is associated with
“offerTiers”: [

{
“type”:”Precedent” // Offer Tier Relative to Offer Start Date of the Product
“order”: 1, // Order in which their tier should be applied Relative to the Offer Start Date
“duration”: 1, // time duration for which this tier is Active
“durationUnits”: “month”, // Time unit for the Duration
“prices”: { // Prices in Difference Currencies
“GBP”: 1.99
},
“restrictionType”:”restricted” // Type of Restriction Period this Offer tier is  associated with
“isrestricted”: false, // Indicates if the Product can be Purchased in this tier or not. If true then cannot be purchased else it can be be purchased
“grantsReferences”: [ // Reference to the rights object representing the usage rights that could be granted to an end user uponPurchasing this content
“10112”
],
},
{
“type”:”Precedent”
“order”: 2,
“duration”: 2,
“durationUnits”: “month”,
“prices”: {
“GBP”: 2.99
},
“restrictionType”:”restricted”
“isrestricted”: false,
“grantsReferences”: [
“10112”
],
},

{
“type”:”Precedent”
“order”: 3,
“duration”: 1,
“durationUnits”: “month”,
“prices”: {
“GBP”: 0.99
},
“restrictionType”:”adjustRentalDuration”
“isrestricted”: false,
“grantsReferences”: [
“10112”
],
},
]
}

The Offer Template ID 2851234 is configured in the Metadata Management system to be available for the scheduling component. The scheduling component when publishing the business metadata chooses this Offer Template for a content provider based on some business logic or manually by schedulers. Metadata processor component consuming the Business metadata published creates the product in Couchbase. Product is created with different Offer tiers using the Offer Template as shown below

  • Offer Tier1  with Start Date as Product Offer Start Date ( 1583020800000 – 01/03/2020 00:00:00) and End Date as Product Offer Start Date + 1 Month (31/03/2020 23:59:59)
  • Offer Tier 2 with Start Date as ( 01/04/2020 00:00:00) and End Date as ( 31/05/2020 23:59:59) as Duration in the Offer Template in the Offer Tier with Order 2 is 2 Months
  • Offer Tier 3 with Start Date as ( 01/06/2020 00:00:00) and End Date as 13/07/2020 23:59:59 ). The last Offer tier is extended uptill the Offer end date of 14/07/2020 23:59:59 but users can only purchase the content till 30/06/2020 23:59:59 for £0.99. This is to ensure users who purchased the content in the last Offer tier can play the content without breaching the contract end date from the content provider in the Offer Template

Below is the Product JSON Payload in Couchbase

{
“licenseEndDate”: 1593647999000, // License End Date of the Media the Product Scopes Based on
Content Provider Agreement
“editorialRef”: “XXA1149520”, // Reference to the Editorial Version of the File received from
Content provider which is then encoded as SD, HD, UHD for IPTV
and Adaptive Bit Rate ( ABR – HLS/MSS (HTTP Live Streaming or
Microsoft Smooth Streaming ))
“offerStartDate”:1583020800000, //offerStartDate
“licenseStartDate”:1583020800000, // License Start Date of the Media the Product Scopes Based on
Content Provider Agreement
“created”: , 1582934399000 // Time Product was Created

“offerTemplateId”:”2851234″, //offer Template identifier

“media” {    // Media associated with the Product
“id”: “2602559”,
“mediaFiles”: [
{
“encodingProfile”: “HD”,
“type”: “video”,
“format”:”MPEG-2TS”
},
{
“encodingProfile”: “HD”,
“type”: “video”,
“format”:”HLS”
},
]
}

“offerTiers”: [ //product.pricingPlan
{

“type”:”Precedent”
“start”: 1583020800000,
“prices”: {
“GBP”: 1.99
},
“end”: 11585699199000,
“grantsReferences”: [
“10112”
],
“restrictionType”: null,
“isRestricted”: false
},
{

“type”:”Precedent”

“start”: 1585699200000,
“prices”: {
“GBP”: 2.99
},
“end”: 1590969599000,
“grantsReferences”: [
“10112”
],
“restrictionType”: null,
“isRestricted”: false
},
{

“type”:”Precedent”

“start”: 1590969600000,
“prices”: {
“GBP”: 0.99
},
“end”: 1593561599000,
“grantsReferences”: [
“10112”
],
“restrictionType”: null,
“isRestricted”: false
}
],
“title”: “Finding Nemo”, //product.title
“encodingProfile”: “HD”, // HD – MPEG-2 Transport Stream for Consumption by Set-top box
“offerings”: [ // Product is being Offered as TVOD
“TVOD”
],
“scodes”: [], // The subscription code the Product is Associated with
“parentIdentifier”: null, // Identifier of the Collection or Series the Product is part of
“updated”: 1582934399000, // Time Product was last updated
“offerEndDate”: 1593647999000, //offerEndDate
“genre”: “film” // Genre the Product is associated with
“rentalDuration”:336
“durationUnits”:”hours”
}

When user browses to the Product in the Product catalog and price has to be displayed in the Catalog. The logic is check the current time of request falls within which offer tier in the product and use the Price in that offer tier.

To support the use case where business would like to change the price of the product. For eg Product needs to be offered between 14/05/2020 00:00:00 to 20/05/2020 23:59:59 for £1.50. This can be achieved by changing the Offer Template and adding a new tier in the Offer Template 2851234 in the offerTiers array as shown below

{
“type”:”Absolute” // Absolute indicates offer Tier with Fixed Dates
“absoluteStart”: 1589414400000, // Date and Time this Tier is in effect
“absoluteEnd”: 1590019199000, // Date and Time this tier end
“prices”: { // Price during this tier for different currencies
“GBP”: 1.50
},
“restrictionType”:”restricted”
“isrestructed”: false,
“rightsReferences”: [
“10112”
],
}

When the OfferTemplate is Updated it fires an couchbase eventing function on the bucket hosting the document. The logic in the eventing function is to get all products associated with that OfferTemplate and Update those products with absolute Offer Tier with type as absolute as shown below

{

“type”:”Absolute”

“start”: 1589414400000,
“prices”: {
“GBP”: 0.99
},
“end”: 1590019199000,
“grantsReferences”: [
“10112”
],
“restrictionType”: null,
“isRestricted”: false
}

The logic to return price in Product Catalog will be check current time of request falls within which offer tier. If there are two active offer tiers and then look at the type if once is of type “Absolute” and other if type “Precedent” then choose Absolute and return the price from absolute Offer Tier.

The Grants references in the offer tier is used to allocate rights to the user upon purchasing the asset. These rights are then used by the DRM License server to issue a DRM License to the content on Playback.

 

 

Posted by Mritunjay

Senior Solutions Engineer at Couchbase

Leave a reply