IPTV describe un sistema en el que los contenidos de televisión en directo o vídeo a la carta (VOD) se envían a un televisor u ordenador mediante el protocolo de Internet a través de la red gestionada por el proveedor de servicios (banda ancha), por ejemplo AT&T U-Verse. Cuando el contenido se distribuye a través de una red no gestionada, se denomina OTT (Over the Top), por ejemplo Now TV, Netflix, Amazon Prime, etc. Los diferentes modelos de negocio del vídeo a la carta son el vídeo a la carta transaccional (TVOD), el vídeo a la carta por suscripción (SVOD) y el híbrido que combina suscripción y TVOD. SVOD es un plan de suscripción que ofrece a los usuarios la posibilidad de elegir y reproducir una amplia gama de vídeos de diferentes géneros. TVOD permite a los espectadores comprar o alquilar el contenido que deseen sin necesidad de suscripción. El componente de comercio de vídeo dentro de un sistema IPTV/OTT permite la producción de contenidos VoD para su venta como TVOD. Establece el precio del producto TVOD utilizando una plantilla de oferta. La plantilla de oferta describe cómo fijar el precio del producto dentro de su periodo de oferta junto con los derechos asociados basados en el contrato negociado con el Proveedor de Contenidos. Este blog especifica un Modelo de Datos para soportar Precios TVOD usando Couchbase.
A continuación se muestra una arquitectura de alto nivel para crear un producto con precios escalonados dentro de la duración de la oferta

- OfferTemplate con Offer Tier se crea en el sistema Video Commerce utilizando el componente Pricing.
- El OfferTemplateID con alguna metainformación para, por ejemplo, proveedor de contenido y niveles de oferta con precio, se introduce en el sistema de gestión de metadatos.
- El componente de programación de contenidos en el sistema de gestión de metadatos publicó los metadatos de los medios que se van a producir y que están disponibles en el catálogo. Los metadatos contienen la referencia al ID de la plantilla de oferta
- El procesador de metadatos procesa los metadatos publicados y llama al componente de gestión de productos del sistema de comercio por vídeo para crear el producto en el cubo de catálogo de productos con el producto y los niveles de oferta del producto basados en los niveles de oferta configurados en la plantilla de oferta.
Cuando el usuario hace clic en un producto del catálogo de productos de la interfaz de usuario, se llama al sistema de comercio por vídeo de gestión de productos. El sistema de gestión de productos de comercio de vídeo recupera el producto con diferentes niveles de oferta y calcula el precio actual basado en el tiempo de solicitud. La lógica de esto se explica en la parte posterior del blog.
Si las empresas deciden cambiar el precio en medio de un producto activo con una ventana de nivel de oferta activa, pueden hacerlo creando un nuevo nivel de oferta llamado absoluto que anula cualquier precio activo existente.
A continuación se esboza un modelo de datos para los medios que se van a producir como TVOD con diferentes niveles de oferta.

Una plantilla de oferta consta de uno o varios niveles de oferta, cada uno de los cuales describe el precio del producto durante un periodo de tiempo. Una plantilla de oferta se asigna a un producto en el momento de su creación para describir su precio durante el tiempo en que se ofrece a los usuarios finales. Cuando un usuario final compra el producto, el nivel de oferta vigente en el momento de la compra determina el precio del producto. Para explicar esto con un ejemplo, se va a ofrecer un activo TVOD VOD de alta definición (HD) 01st De marzo de 2020 al 14 de julio de 2020 se ofrecerá a diferentes precios dentro de los diferentes períodos de tiempo que se indican a continuación. La duración del alquiler es de 14 días

El siguiente documento JSON es la plantilla de oferta con tres niveles de oferta con diferentes precios que debe crearse en Couchbase como almacén de datos para el componente Video Commerce. El restrictionType en el nivel de oferta puede tomar valores como restricted, coming-soon, adjustRentalDuration. Si restringido y isRestricted es verdadero, el contenido no se puede comprar en ese nivel de oferta. Esto permite a los proveedores de contenidos crear periodos de restricción para la compra mientras el contenido está activo en el catálogo VoD.
Clave:- OfferTemplate::2851234
Documento JSON
{
"id": "2851234", //Identificador de la plantilla de oferta
"updated": 1582329599000, // Fecha de la última actualización de la plantilla de oferta
"descripción": "Plantilla para Disney Kids 1-5", // Descripción de la plantilla de oferta.
"creado": 1582329599000, // Fecha de creación de la plantilla de oferta
"createdByUser": "gauss/12345", // Nombre de usuario/identificador que ha creado la plantilla de oferta
"updatedByUser": "gauss/12345", // Nombre de usuario/identificador actualizó la plantilla de oferta
"isTaxIncluded": true, // El precio incluye el IVA o el impuesto sobre las ventas
"taxCode": "taxCode12345", // Código Fiscal
"contractStartDate": 1583020800000, // Fecha de inicio del contrato
"contractEndDate": 1594771199000, // Fecha de finalización del contrato
"contentproviderId": "5112", // ID de proveedor de contenidos al que está asociada esta plantilla
"offerTiers": [
{
"type": "Precedent" // Nivel de oferta relativo a la fecha de inicio de la oferta del producto
"orden": 1, // Orden en que debe aplicarse su nivel en relación con la fecha de inicio de la oferta
"duración": 1, // tiempo durante el cual esta capa está Activa
"durationUnits": "month", // Unidad de tiempo para la Duración
"precios": { // Precios en monedas de diferencia
"GBP": 1.99
},
"restrictionType": "restricted" // Tipo de período de restricción al que está asociado este nivel de oferta
"isrestricted": false, // Indica si el producto se puede comprar en este nivel o no. Si es true entonces no se puede comprar, si no se puede comprar
"grantsReferences": [ // Referencia al objeto de derechos que representa los derechos de uso que podrían concederse a un usuario final alComprar este contenido.
“10112”
],
},
{
"tipo": "Precedente"
"orden": 2,
"duración": 2,
"durationUnits": "mes",
"precios": {
"GBP": 2.99
},
"restrictionType": "restringido"
"isrestricted": falso,
"grantsReferences": [
“10112”
],
},
{
"tipo": "Precedente"
"orden": 3,
"duración": 1,
"durationUnits": "mes",
"precios": {
"GBP": 0.99
},
"restrictionType": "adjustRentalDuration"
"isrestricted": falso,
"grantsReferences": [
“10112”
],
},
]
}
La plantilla de oferta ID 2851234 está configurada en el sistema de gestión de metadatos para que esté disponible para el componente de programación. El componente de programación al publicar los metadatos de negocio elige esta Plantilla de Oferta para un proveedor de contenido basado en alguna lógica de negocio o manualmente por los programadores. El componente procesador de metadatos que consume los metadatos de negocio publicados crea el producto en Couchbase. El producto es creado con diferentes niveles de Oferta usando la Plantilla de Oferta como se muestra a continuación
- Oferta Nivel 1 con Fecha de Inicio como Fecha de Inicio de la Oferta del Producto ( 1583020800000 - 01/03/2020 00:00:00) y Fecha de Fin como Fecha de Inicio de la Oferta del Producto + 1 Mes (31/03/2020 23:59:59)
- Oferta Nivel 2 con Fecha de Inicio como ( 01/04/2020 00:00:00) y Fecha de Fin como ( 31/05/2020 23:59:59) como Duración en la Plantilla de Oferta en la Oferta Nivel con Orden 2 es 2 Meses
- Nivel de oferta 3 con fecha de inicio el ( 01/06/2020 00:00:00) y fecha de finalización el 13/07/2020 23:59:59 ). La última oferta se amplía hasta el 14/07/2020 23:59:59, pero los usuarios sólo pueden comprar el contenido hasta el 30/06/2020 23:59:59 por 0,99 £. Esto es para asegurar que los usuarios que compraron el contenido en el último nivel de la oferta puedan jugar al contenido sin incumplir la fecha de finalización del contrato del proveedor de contenidos en la plantilla de la oferta.
A continuación se muestra la carga útil JSON del producto en Couchbase
{
"licenseEndDate": 1593647999000, // Fecha de fin de licencia de los medios en los que se basa el producto
Acuerdo de proveedor de contenidos
"editorialRef": "XXA1149520", // Referencia a la versión editorial del fichero recibida de
Proveedor de contenidos que luego se codifican como SD, HD, UHD para IPTV
y Adaptive Bit Rate ( ABR - HLS/MSS (HTTP Live Streaming o
Microsoft Smooth Streaming ))
"offerStartDate":1583020800000, //fecha de inicio de la oferta
"licenseStartDate":1583020800000, // Fecha de inicio de la licencia del medio en el que se basa el producto
Acuerdo de proveedor de contenidos
"Creado" , 1582934399000 // Hora de creación del producto
"offerTemplateId": "2851234″, //identificador de la plantilla de oferta
"media" { // Medios asociados al Producto
"id": "2602559",
"mediaFiles": [
{
"encodingProfile": "HD",
"tipo": "vídeo",
"formato": "MPEG-2TS"
},
{
"encodingProfile": "HD",
"tipo": "vídeo",
"formato": "HLS"
},
]
}
"offerTiers": [ //producto.pricingPlan
{
"tipo": "Precedente"
"start": 1583020800000,
"precios": {
"GBP": 1.99
},
"fin": 11585699199000,
"grantsReferences": [
“10112”
],
"restrictionType": null,
"isRestricted": false
},
{
"tipo": "Precedente"
"start": 1585699200000,
"precios": {
"GBP": 2.99
},
"fin": 1590969599000,
"grantsReferences": [
“10112”
],
"restrictionType": null,
"isRestricted": false
},
{
"tipo": "Precedente"
"start": 1590969600000,
"precios": {
"GBP": 0.99
},
"fin": 1593561599000,
"grantsReferences": [
“10112”
],
"restrictionType": null,
"isRestricted": false
}
],
"title": "Buscando a Nemo", //product.title
"encodingProfile": "HD", // HD - Secuencia de transporte MPEG-2 para consumo por descodificador
"ofertas": [ // El producto se ofrece como TVOD
"TVOD"
],
"scodes": [], // El código de suscripción al que está asociado el producto
"parentIdentifier": null, // Identificador de la Colección o Serie de la que forma parte el Producto
"actualizado": 1582934399000, // Hora de la última actualización del producto
"offerEndDate": 1593647999000, //fechaFinalOferta
"genre": "film" // Género al que se asocia el Producto
"rentalDuration":336
"durationUnits": "horas"
}
Cuando el usuario navega al producto en el catálogo de productos y el precio tiene que ser mostrado en el catálogo. La lógica es comprobar el momento actual de la solicitud cae dentro de qué nivel de oferta en el producto y utilizar el precio en ese nivel de oferta.
Para apoyar el caso de uso en el que la empresa desea cambiar el precio del producto. Por ejemplo, el producto debe ofrecerse entre el 14/05/2020 00:00:00 y el 20/05/2020 23:59:59 por 1,50 £. Esto se puede lograr cambiando la plantilla de oferta y añadiendo un nuevo nivel en la plantilla de oferta 2851234 en la matriz offerTiers como se muestra a continuación
{
"type": "Absolute" // Absoluto indica nivel de oferta con fechas fijas
"absoluteStart": 1589414400000, // Fecha y hora de entrada en vigor de este nivel
"absoluteEnd": 1590019199000, // Fecha y hora de finalización de este nivel
"prices": { // Precio durante este nivel para diferentes monedas
"GBP": 1.50
},
"restrictionType": "restringido"
"isrestructed": falso,
"rightsReferences": [
“10112”
],
}
Cuando se actualiza el OfferTemplate, se activa una función de eventos couchbase en el bucket que aloja el documento. La lógica en la función de eventos es obtener todos los productos asociados con ese OfferTemplate y Actualizar esos productos con Offer Tier absoluto con tipo como absoluto como se muestra a continuación
{
"tipo": "Absoluto"
"start": 1589414400000,
"precios": {
"GBP": 0.99
},
"fin": 1590019199000,
"grantsReferences": [
“10112”
],
"restrictionType": null,
"isRestricted": false
}
La lógica para devolver el precio en el Catálogo de Productos será comprobar en qué nivel de oferta se encuentra la solicitud en ese momento. Si hay dos niveles de oferta activos y se mira el tipo, si uno es de tipo "Absoluto" y el otro de tipo "Precedente", se elige Absoluto y se devuelve el precio del nivel de oferta absoluto.
Las referencias Grants en el nivel de oferta se utilizan para asignar derechos al usuario al comprar el activo. A continuación, el servidor de licencias DRM utiliza estos derechos para emitir una licencia DRM para el contenido en la reproducción.