En el marco del Programa Iberoamericano de Ciencia y Tecnología para el Desarrollo (IBEROEKA), la empresa DigiSoft – DigiTV SRL, a cargo del CTO de tecnología el Ing. Gonzalo Mora; presentaron el proyecto TDA- ShowCase “Catalogo de Muestra de Aplicaciones de Televisión Digital Terrestre Interactiva y Segunda Pantalla para Latinoamérica.
El motivo de este documento es compartir nuestra investigación con el publico objetivo interesado en entrar en detalle de esta tecnología, así como plantear nuestra visión del estado del arte de dicha tecnología en función a nuestras pruebas de I+D.
El proyecto de Investigación y Desarrollo consistió en una prueba de concepto(POC) /Prototipo de TV Digital sobre Ginga.ar. Ginga.ar es una implementación del estándar Ginga-NCL, desarrollada por el equipo de TV Digital de LIFIA. El middleware de Ginga NCL se compone de los módulos fundamentales:
❏ NCL: este módulo se encarga de definir la pantalla con sus objetos y botones.
❏ Lua: recibe los eventos generados a partir del NCL cuando el usuario presiona cierto botón y frente a esto realiza determinada acción.
La POC-Prototipo consta en poder mostrar en pantalla los productos disponibles en una tienda virtual (TV-Commerce), obteniendo los mismos a través de una invocación HTTP con servicios REST/JSON. Para realizar el prototipo nos basamos de la máquina virtual kuntur provista por el LIFIA. La misma contiene las herramientas necesarias para poder implementar una aplicación que luego pueda correr en un STB (dispositivo receptor o decodificador de las señales de televisión analógica).
El prototipo realizado se integró con nuestro BackEnd de DigiTV realizado en Java/Oracle, Core de la aplicación y corazón de la lógica de TV-Commerce y (TV-Salud/TV-Government). La comunicación entre la TV+STB y el backend se realizó mediante servicios REST/JSON, que luego se tuvieron que unir mediante un conector o puente porque Ginga.ar solo acepta soap v1.1
Los objetivos específicos iniciales y los resultados esperados eran los siguientes:
Objetivo Específico | Resultado Esperado/Indicador verificable de Cumplimiento |
Comunicación entre Lua y el NCL | I+D Tecnología TV Digital
|
Renderización de HTML | I+D Tecnología TV Digital
|
Soporte de GingaJ | I+D Tecnología TV Digital
|
Escritura en disco | I+D Tecnología TV Digital
|
Internet | I+D Tecnología TV Digital
|
Integración de la Ginga.ar con el BackEnd de DigiTV mediante servicios HTTP REST/JSON | I+D Tecnología TV Digital
|
Tecnología Hibrida para TV Digital -STB Híbridos con Android | Se testeo y/o logro instalar un prototipo realizado por DigiTVSoft con Tecnología Android que se interconecte con la TV Digital y corra sobre un STB Hibrido con Android |
Problemas
A continuación, se detallan algunos de los problemas que tuvimos en la implementación de la POC del módulo de TV-Commerce con el que se comenzó.
Comunicación entre Lua y el NCL
❏ Al iniciar el NCL le da control a Lua sobre una parte de la pantalla. Lua puede dibujar sobre la misma una imagen mediante canvas, pero ésta no puede ser HTTP.
❏ En el NCL puede cargarse una imagen HTTP, pero la url a donde se va a buscar la misma no puede contener el caracter ‘?’. Por ejemplo, una imagen que se encuentra en la url http://192.168.100.103/image.php?ids=108.jpg no funciona, en cambio una que se encuentra en http://192.168.100.103/image/108.jpg sí funciona.
A continuación, se presenta una captura de pantalla de este problema, donde la imagen que se desea cargar es la que se visualiza a la derecha:
Renderización de HTML
❏ El NCL de Ginga.ar no permite renderizar HTML. Por lo tanto no es posible mostrar la información utilizando HTML.
❏ Se presenta una captura de pantalla del error que se obtiene al intentar realizarlo.
Soporte de GingaJ
El middleware Ginga.ar es una implementación parcial solo de la norma para Ginga-NCL, no implementa Ginga-J. Esto es un problema grande ya que distintos prototipos que realizamos en 2013 y 2014 utilizaban java con el Ginga.br (Brasil) como por ejemplo este:
http://digitvsoft.com/?page_id=313
https://www.youtube.com/watch?v=2ADNeFhXTYo&feature=youtu.be
Solamente debemos restringir el prototipo a las funcionalidades que puedan brindar NCL y Lua, mientras utilicemos Ginga.ar en el marco de cooperación con el IBEROEKA Uruguay-Argentina con el LIFIA. Java permite mejores y más sofisticados sistemas sobre TVDi.
Escritura en disco
Una de las opciones que manejamos consistía en poder obtener las imágenes con Lua y escribirlas en el disco para que luego puedan ser tomadas por el NCL. Al realizar esta prueba, nos encontramos con que el módulo de io no está habilitado en Lua, obteniendo el siguiente error:
Internet
Si la aplicación necesita invocar HTTP para obtener imágenes externas, es necesario que el STB tenga acceso a internet.
Solución
Ante estos problemas, la solución que propusimos fue tener una aplicación con una cantidad de productos fija. Manteniendo fijo el NCL, es decir la definición de la pantalla. Y cada cierto tiempo, por ejemplo, una vez por día, actualizar la aplicación mediante UHF, pudiendo traer una nueva versión de la misma con nuevos productos y los precios de los mismos actualizados.
De esta manera no resulta necesario disponer de internet en el STB porque las imágenes ya estarían cargadas y se mostraría algo fijo. Se debería disponer de un sistema que se encargue de generar la nueva versión de la aplicación con el NCL actualizado y de enviarla mediante UHF a los STB. Este parser será el encargado de consumir la API provista por DigiTV para obtener los productos disponibles. La API REST/Json programada a tales efectos es la siguiente
Con estos detalles se realizó la siguiente prueba de concepto, operativa que se puede descargar y ver por Youtube.
A continuación, se detallan algunos items importantes de su implementación.
POC TV-Commerce, TV-Salud y TV-Government
Esta POC consta en la implementación de un prototipo del Módulo de Venta de Productos (Store Mobile Online) correspondiendo a TV-Commerce, así como pruebas de concepto para TV-Salud/TV-Goverment.
Este módulo ofrece variados productos mediante catálogos virtuales de múltiples empresas. A su vez, ofrece promociones a través de la plataforma móvil logrando que el cliente visite la tienda para efectuar la compra.
Debido a los problemas enfrentados durante la realización del prototipo, el mismo muestra un catálogo fijo de productos, manteniendo fijo el NCL, es decir la definición de la pantalla. Quedando para la próxima iteración agregar un parser que obtenga los productos disponibles y los actualice en la aplicación mediante UHF a los SBTs. Este parser será el encargado de consumir la API provista por DigiTV para obtener los productos disponibles.
Los problemas presentados se encuentran descritos en el documento “Informe POC DigiTV”.
Servicios REST para TV Commerce y TV Salud
Tomo el catálogo de productos por Categoría
METODO: GET
http://mobile.digitvsoft.com/DigiTV.Apps.WebApi/api/catalogs/GetStoreTipo?WCFamTipo=1
Luego se debe invocar el catálogo de Productos llamando por (#Familia, #SubFamilia), Siguiendo con el ejemplo FamNro=10,SfaNro=1
METODO: GET
http://mobile.digitvsoft.com/DigiTV.Apps.WebApi/api/catalogs/GetValuesByCat?WCFamNro=10&WCSfaNro=1
Retorna el catalogo:
- WCKEY As Integer //Clave
- WCFamNro As Integer //Familia
- WCFamDsc As String //Descripción Familia
- WCSFaNro As Integer //SubFamilia
- WCSfaDsc As String //Descripción Sub Familia
- WCArtNro As Integer //Articulo Maestro
- WCAliNro As Integer //Alias o Id producto (Identificador único para la venta)
- WCAliDsc As String //Descripción Producto
- WCAliImg As Image //Imagen
- WCFamTipo As Integer //Redundante = 1
- WCText As String //Texto a desplegar como las noticias
Tomar todos los productos
METODO: GET
http://mobile.digitvsoft.com/DigiTV.Apps.WebApi/api/catalogs/GetValues?WCFamTipo=1
Una vez que el usuario elige el Id de producto o Alias le da Comprar/Reservar
METODO: POST
http://mobile.digitvsoft.com/DigiTV.Apps.WebApi/api/resps/InsertRespCmp
Debe enviar:
- RespCliId as Integer //ID del cliente (Debe estar logueado)
- RespAliNro as Integer //Nro Alias que identifica al Producto
- RespAliDsc as String //Descripción
- IDAparato As String //Id del Teléfono/STB
Retorna un string con el # de Cupón o un N:
- ‘String # Cupón a presentar”= Venta Exitosa
- ‘N’= No existe cupón,
Ejemplo:
{«RespCliId»:1,
«RespAliNro»:370,
«RespAliDsc»:»Reserva«,
«IDAparato»:»IMEI-768726″,
«Monedas»:0}
Observaciones sobre la implementación
Fondo
El POC para DigiTV consta de 3 capas.
- Background la cual es el fondo de DigiTV
- Video la cual es donde se está reproduciendo el programa de TV.
- DigiTV App en donde se muestran los productos y/o items de gobierno y Salud.
Estados
Actualmente consta de un set de estados los cuales definen qué se debe ver en la pantalla.
- page = 0 : Página de donde se encuentra
- prodPage = 6 : Productos por página
- maxPage = 2 : Cantidad de páginas
- visible = false : Si es visible DigiTV APP
- selected = 0 : Qué número de producto se encuentra seleccionado. [1 – prodPage]
- buying = 0 : Si se encuentra comprando
0- No esta en compra
1- Solicitud de confirmación de compra
2- Compra confirmada)
Dibujado
Al llamar a DrawAll borra todo lo dibujado en la pantalla y en caso de estar visible en true dibuja los Productos, el borde al producto seleccionado y los botones.
Path de Productos
Para los productos se concatena el path con el valor de la página y el posición de la imagen (/images/N».. page*6+1 ..».jpg ). Las imágenes están junto a la app y deben tener un tamaño de 100×100 para facilitar el centrado de las mismas.