A IPTV descreve um sistema em que o conteúdo de televisão ao vivo ou de vídeo sob demanda (VOD) é fornecido a uma televisão ou a um computador usando o protocolo da Internet pela rede gerenciada (banda larga) dos provedores de serviços, por exemplo, AT&T U-Verse. Quando o conteúdo é fornecido por uma rede não gerenciada, ele é chamado de OTT (Over the Top), por exemplo, Now TV, Netflix, Amazon Prime etc. Os diferentes modelos de negócios para vídeo sob demanda são o VOD transacional (TVOD), o vídeo sob demanda por assinatura (SVOD) e o híbrido que combina assinatura e TVOD. O SVOD é um plano de assinatura que oferece aos usuários a opção de escolher e reproduzir uma ampla gama de vídeos de diferentes gêneros. O TVOD permite que os espectadores comprem ou aluguem o conteúdo que desejarem sem precisar de uma assinatura. O componente de comércio de vídeo em um sistema IPTV/OTT permite a produção de conteúdo VoD para ser vendido como TVOD. Ele define o preço do produto TVOD usando um modelo de oferta. O modelo de oferta descreve como definir o preço do produto dentro de seu período de oferta junto com os direitos associados com base no contrato negociado com o provedor de conteúdo. Este blog especifica um modelo de dados para dar suporte à precificação de TVOD usando o Couchbase.
Abaixo está uma arquitetura de alto nível para criar um produto com preços diferenciados dentro da duração da oferta
- O OfferTemplate com Offer Tier é criado no sistema Video Commerce usando o componente Pricing.
- O OfferTemplateID com algumas metainformações, por exemplo, provedor de conteúdo e níveis de oferta com preço, é ingerido no sistema de gerenciamento de metadados.
- O componente de programação de conteúdo no sistema de gerenciamento de metadados publicou os metadados da mídia a ser produzida e disponível no catálogo. Os metadados contêm a referência ao ID do modelo de oferta
- Processador de metadados Processa os metadados publicados e chama o componente de gerenciamento de produtos do sistema de comércio de vídeo para criar o produto no balde do catálogo de produtos com o produto e os níveis de oferta no produto com base nos níveis de oferta configurados no modelo de oferta.
Quando o usuário clica em um produto no catálogo de produtos na interface do usuário, ele chama o sistema de comércio de vídeo de gerenciamento de produtos. O sistema de comércio de vídeo de gerenciamento de produtos recupera o produto com diferentes níveis de oferta e calcula o preço atual com base na hora da solicitação. A lógica disso será explicada em uma parte posterior do blog.
Se a empresa decidir alterar o preço no meio de um produto ao vivo com uma janela de nível de oferta ativa, ela poderá fazer isso criando um novo nível de oferta chamado absoluto, que substitui qualquer preço ativo existente.
Abaixo está descrito um modelo de dados para a mídia a ser produzida como TVOD com diferentes níveis de oferta.
Um modelo de oferta consiste em um ou mais níveis de oferta, cada um dos quais descreve o preço do produto durante um período de tempo. Um modelo de oferta é atribuído a um produto na criação para descrever seu preço durante o tempo em que é oferecido aos usuários finais. Quando um usuário final compra o produto, o nível de oferta em vigor no momento da compra determina o preço do produto. Para explicar isso com um exemplo, um ativo VOD de alta definição (HD) de TVOD deve ser oferecido a 01st Março de 2020 a 14 de julho de 2020 será oferecido a preços diferentes dentro do período de tempo diferente, conforme descrito abaixo. A duração do aluguel é de 14 dias
O documento JSON abaixo é o modelo de oferta com três níveis de oferta com preços diferentes que devem ser criados no Couchbase e usados como armazenamento de dados para o componente Video Commerce. O restrictionType na camada de oferta abaixo pode assumir valores como restricted, coming-soon, adjustRentalDuration. Se restricted e isRestricted forem verdadeiros, o conteúdo não poderá ser comprado nesse offerTier. Isso permite que os provedores de conteúdo criem períodos de restrição para compra enquanto o conteúdo estiver ativo no catálogo de VoD.
Chave:- OfferTemplate::2851234
Documento JSON
{
"id": "2851234", //Identificador do modelo de oferta
"updated": 1582329599000, // Registro de data e hora em que o modelo de oferta foi atualizado pela última vez
"description": "Template for Disney Kids 1-5", // Descrição do modelo de oferta
"created": 1582329599000, // Registro de data e hora em que o modelo de oferta foi criado
"createdByUser": "gauss/12345", // O nome de usuário/identificador criou o modelo de oferta
"updatedByUser": "gauss/12345", // O nome/identificador do usuário atualizou o modelo de oferta
"isTaxIncluded": true, // O preço inclui IVA ou imposto sobre vendas
"taxCode": "taxCode12345", // Código de imposto
"contractStartDate": 1583020800000, // Data de início do contrato
"contractEndDate": 1594771199000, // Data de término do contrato
"contentproviderId": "5112", // ID do provedor de conteúdo ao qual esse modelo está associado
"offerTiers": [
{
"type": "Precedent" // Nível da oferta relativo à data de início da oferta do produto
"order": 1, // Ordem em que seu nível deve ser aplicado em relação à data de início da oferta
"duration": 1, // duração do tempo para o qual essa camada está ativa
"durationUnits": "month", // Unidade de tempo para a duração
"prices": { // Preços em moedas de diferença
"GBP": 1.99
},
"restrictionType": "restricted" // Tipo de período de restrição ao qual esse nível de oferta está associado
"isrestricted": false, // Indica se o produto pode ser comprado nessa camada ou não. Se for verdadeiro, não poderá ser comprado; caso contrário, poderá ser comprado
"grantsReferences": [ // Referência ao objeto de direitos que representa os direitos de uso que podem ser concedidos a um usuário final ao comprar este conteúdo
“10112”
],
},
{
"type": "Precedent"
"order": 2,
"duração": 2,
"durationUnits": "month",
"prices": {
"GBP": 2.99
},
"restrictionType": "restricted" (tipo de restrição)
"isrestricted": falso,
"grantsReferences": [
“10112”
],
},
{
"type": "Precedent"
"order": 3,
"duration": 1,
"durationUnits": "month",
"prices": {
"GBP": 0.99
},
"restrictionType": "adjustRentalDuration"
"isrestricted": falso,
"grantsReferences": [
“10112”
],
},
]
}
O ID do modelo de oferta 2851234 está configurado no sistema de gerenciamento de metadados para estar disponível para o componente de agendamento. O componente de agendamento, ao publicar os metadados de negócios, escolhe esse modelo de oferta para um provedor de conteúdo com base em alguma lógica de negócios ou manualmente pelos agendadores. O componente processador de metadados que consome os metadados comerciais publicados cria o produto no Couchbase. O produto é criado com diferentes níveis de oferta usando o modelo de oferta, conforme mostrado abaixo
- Oferta de nível 1 com data de início como a data de início da oferta do produto (1583020800000 - 01/03/2020 00:00:00) e data de término como a data de início da oferta do produto + 1 mês (31/03/2020 23:59:59)
- Nível de Oferta 2 com Data de Início como (01/04/2020 00:00:00) e Data de Término como (31/05/2020 23:59:59) como Duração no Modelo de Oferta no Nível de Oferta com Pedido 2 é 2 Meses
- Nível de oferta 3 com data de início como (01/06/2020 00:00:00) e data de término como 13/07/2020 23:59:59). O último nível de oferta é estendido até a data de término da oferta de 14/07/2020 23:59:59, mas os usuários só podem comprar o conteúdo até 30/06/2020 23:59:59 por £0,99. Isso é para garantir que os usuários que compraram o conteúdo no último nível da Oferta possam jogar o conteúdo sem violar a data de término do contrato com o provedor de conteúdo no Modelo de Oferta
Abaixo está o payload JSON do produto no Couchbase
{
"licenseEndDate": 1593647999000, // Data de término da licença da mídia na qual o escopo do produto se baseia
Contrato com o provedor de conteúdo
"editorialRef": "XXA1149520", // Referência à versão editorial do arquivo recebido de
Provedor de conteúdo que é então codificado como SD, HD, UHD para IPTV
e Adaptive Bit Rate (ABR) - HLS/MSS (HTTP Live Streaming ou
Microsoft Smooth Streaming ))
"offerStartDate":1583020800000, //offerStartDate
"licenseStartDate":1583020800000, // Data de início da licença da mídia na qual o escopo do produto se baseia
Contrato com o provedor de conteúdo
"created": , 1582934399000 // Hora em que o produto foi criado
"offerTemplateId": "2851234″, //identificador do modelo de oferta
"media" { // Mídia associada ao produto
"id": "2602559",
"mediaFiles": [
{
"encodingProfile": "HD",
"type": "vídeo",
"format": "MPEG-2TS"
},
{
"encodingProfile": "HD",
"type": "vídeo",
"format": "HLS"
},
]
}
"offerTiers": [ //product.pricingPlan
{
"type": "Precedent"
"start": 1583020800000,
"prices": {
"GBP": 1.99
},
"end": 11585699199000,
"grantsReferences": [
“10112”
],
"restrictionType": nulo,
"isRestricted": falso
},
{
"type": "Precedent"
"start": 1585699200000,
"prices": {
"GBP": 2.99
},
"end": 1590969599000,
"grantsReferences": [
“10112”
],
"restrictionType": nulo,
"isRestricted": falso
},
{
"type": "Precedent"
"start": 1590969600000,
"prices": {
"GBP": 0.99
},
"end": 1593561599000,
"grantsReferences": [
“10112”
],
"restrictionType": nulo,
"isRestricted": falso
}
],
"title": "Procurando Nemo", //product.title
"encodingProfile": "HD", // HD - Fluxo de transporte MPEG-2 para consumo pelo decodificador
"offerings": [ // O produto está sendo oferecido como TVOD
"TVOD"
],
"scodes": [], // O código de assinatura ao qual o produto está associado
"parentIdentifier": null, // Identificador da coleção ou série da qual o produto faz parte
"updated": 1582934399000, // Hora em que o produto foi atualizado pela última vez
"offerEndDate": 1593647999000, //offerEndDate
"genre" (gênero): "film" // Gênero ao qual o Produto está associado
"rentalDuration":336
"durationUnits": "hours" (unidades de duração)
}
Quando o usuário navega até o produto no catálogo de produtos e o preço precisa ser exibido no catálogo. A lógica é verificar se a hora atual da solicitação está dentro de qual nível de oferta do produto e usar o preço nesse nível de oferta.
Para apoiar o caso de uso em que a empresa gostaria de alterar o preço do produto. Por exemplo, o produto precisa ser oferecido entre 14/05/2020 00:00:00 e 20/05/2020 23:59:59 por £1,50. Isso pode ser feito alterando o modelo de oferta e adicionando um novo nível no modelo de oferta 2851234 na matriz offerTiers, conforme mostrado abaixo
{
"type": "Absolute" // Absoluto indica o nível da oferta com datas fixas
"absoluteStart": 1589414400000, // Data e hora em que essa camada está em vigor
"absoluteEnd": 1590019199000, // Data e hora de término dessa camada
"prices": { // Preço durante essa camada para diferentes moedas
"GBP": 1.50
},
"restrictionType": "restricted" (tipo de restrição)
"isrestructed": false,
"rightsReferences": [
“10112”
],
}
Quando o OfferTemplate é atualizado, ele dispara uma função de evento do Couchbase no bucket que hospeda o documento. A lógica na função de evento é obter todos os produtos associados a esse OfferTemplate e atualizar esses produtos com o Offer Tier absoluto com o tipo absoluto, conforme mostrado abaixo
{
"type": "Absolute"
"start": 1589414400000,
"prices": {
"GBP": 0.99
},
"end": 1590019199000,
"grantsReferences": [
“10112”
],
"restrictionType": nulo,
"isRestricted": falso
}
A lógica para retornar o preço no Product Catalog será verificar se a hora atual da solicitação está dentro de qual nível de oferta. Se houver duas camadas de oferta ativas e, em seguida, observar o tipo, se uma for do tipo "Absolute" e a outra do tipo "Precedent", escolher Absolute e retornar o preço da camada de oferta absoluta.
As referências de concessões na camada de oferta são usadas para alocar direitos ao usuário na compra do ativo. Esses direitos são então usados pelo servidor de licenças DRM para emitir uma licença DRM para o conteúdo na reprodução.