{"id":1774,"date":"2014-08-25T01:09:07","date_gmt":"2014-08-25T06:09:07","guid":{"rendered":"http:\/\/alejandroayala.solmedia.ec\/?p=1774"},"modified":"2014-09-02T10:39:15","modified_gmt":"2014-09-02T15:39:15","slug":"television-digital-terrestre-introduccion-ginga","status":"publish","type":"post","link":"https:\/\/alejandroayala.solmedia.ec\/?p=1774","title":{"rendered":"Televisi\u00f3n Digital Terrestre, Middleware Ginga"},"content":{"rendered":"<p>En el <a href=\"http:\/\/alejandroayala.solmedia.ec\/?p=491\">anterior art\u00edculo<\/a> repasamos brevemente que constituye la Televisi\u00f3n Digital Terrestre y mencionamos ciertas caracter\u00edsticas del est\u00e1ndar ISDB-T, est\u00e1ndar escogido en nuestro pa\u00eds.<\/p>\n<p>Es el momento de adentrarnos al componente que nos permite desarrollar aplicaciones interactivas, ambientes de programaci\u00f3n, lenguajes de programaci\u00f3n NCL, Lua y Java.<\/p>\n<p>En este art\u00edculo una introducci\u00f3n a Ginga y sus componentes.<\/p>\n<p><!--more--><\/p>\n<h3>2 MIDDLEWARE GINGA<\/h3>\n<p>Un middleware para aplicaciones de televisi\u00f3n digital consiste principalmente en un conjunto de librer\u00edas, m\u00e9todos y funciones que permiten desarrollar aplicaciones de manera f\u00e1cil y r\u00e1pida.<\/p>\n<p>Ginga es el middleware de desarrollo de aplicaciones interactivas del est\u00e1ndar SBTVD. Su nombre se basa en un t\u00e9rmino usado en un fundamental movimiento de capoeira. Ginga es una especificaci\u00f3n abierta liberada bajo licencia GPLv2 libre de regal\u00edas, brindado la posibilidad a cualquier persona de crear contenido interactivo.<\/p>\n<p>En definitiva, este componente es el responsable de ejecutar las aplicaciones interactivas que son enviadas en el flujo de difusi\u00f3n de la empresa de televisi\u00f3n.<\/p>\n<h3>2.1 AMBIENTES DE PROGRAMACI\u00d3N<\/h3>\n<p>Las aplicaciones de televisi\u00f3n digital se pueden encontrar en aplicaciones declarativas o aplicaciones imperativas, dependiendo del lenguaje de programaci\u00f3n en que est\u00e9n codificadas, tambi\u00e9n se pueden construir aplicaciones h\u00edbridas, con parte de su c\u00f3digo declarativo y parte de su c\u00f3digo imperativo.<\/p>\n<ul>\n<li><strong>Ambientes declarativos:<\/strong> En un ambiente declarativo los lenguajes de programaci\u00f3n se especializan en describir el problema y detallar su soluci\u00f3n a alguna tarea, sin especificar exactamente como hacerlo, por esta raz\u00f3n son mucho m\u00e1s f\u00e1ciles de ser concebidos y entendidos, lo que exime la presencia de un programador especialista. Ginga da soporte para aplicaciones en el \u00e1mbito declarativo mediante el lenguaje NCL que puede hacer uso de contenido en script mediante el lenguaje Lua. Dentro del est\u00e1ndar este subsistema l\u00f3gico toma el nombre de Ginga-NCL.<\/li>\n<li><strong>Ambientes imperativos:<\/strong> En un ambiente imperativo los lenguajes de programaci\u00f3n describen un conjunto de instrucciones que se ejecutan paso a paso, es decir mediante el desarrollo de un algoritmo que cambia el estado del programa para permitir encontrar su soluci\u00f3n, esto al contrario de los ambientes declarativos exige la presencia de un programador especialista. Para aplicaciones en el \u00e1mbito imperativo el soporte viene dado mediante el lenguaje Java y toma el nombre de Ginga-J.<\/li>\n<li><strong>Ambientes h\u00edbridos:<\/strong> En el ambiente h\u00edbrido las aplicaciones puedan ser escritas en NCL, Lua y Java, ya que, en ciertos casos para la Televisi\u00f3n Digital se necesitar\u00e1n que se desarrolle aplicaciones interactivas con los paradigmas declarativos e imperativos, mediante las APIs contenidas en el middleware se logra juntar ambos entornos, para lograrlo existe el subsistema l\u00f3gico\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ginga-CC. La arquitectura de referencia de Ginga se puede apreciar en la siguiente figura.<\/li>\n<\/ul>\n<div id=\"attachment_1775\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/arquitectura_ginga.png\"><img aria-describedby=\"caption-attachment-1775\" loading=\"lazy\" class=\"wp-image-1775 size-medium\" src=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/arquitectura_ginga-300x172.png\" alt=\"Arquitectura Ginga\" width=\"300\" height=\"172\" srcset=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/arquitectura_ginga-300x172.png 300w, http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/arquitectura_ginga.png 659w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1775\" class=\"wp-caption-text\">Arquitectura Ginga<\/p><\/div>\n<h3>2.1.1 Ginga-NCL<\/h3>\n<p>Ginga-NCL es el ambiente de middleware Ginga responsable del procesamiento de las aplicaciones declarativas que utilizan el lenguaje NCL. Esta especificaci\u00f3n est\u00e1 basada en el est\u00e1ndar XML, puede usar el lenguaje script Lua para aprovechar las propiedades del paradigma imperativo y ampliar las capacidades de la aplicaci\u00f3n.<\/p>\n<p>NCL define la forma en que los objetos de media est\u00e1n organizados en tiempo y espacio, lo que aporta un mayor control sobre el contenido. Los documentos pueden importar los elementos declarados en otros documentos. NCL tambi\u00e9n es una mejor opci\u00f3n en el desarrollo de aplicaciones no lineales ya que es un lenguaje para la integraci\u00f3n de los objetos de media, es decir, facilita la sincronizaci\u00f3n en tiempo y espacio, haciendo prescindibles muchas de las veces del uso de estrategias de programaci\u00f3n o la implementaci\u00f3n de algoritmos.<\/p>\n<p>Ginga-NCL separa el contenido de la estructura de presentaci\u00f3n, en definitiva los lenguajes declarativos permiten al desarrollador proporcionar en conjunto las tareas a realizar sin definir una gran cantidad de c\u00f3digo para hacer las mismas tareas, en comparaci\u00f3n con las implementaciones algor\u00edtmicas, a fin de cuentas, los lenguajes declarativos centran su uso en la adaptabilidad, edici\u00f3n y producci\u00f3n de contenido y el soporte a m\u00faltiples dispositivos.<\/p>\n<p>Cuando se necesita ampliar las capacidades de la aplicaci\u00f3n con el uso de lenguajes de script, Lua puede simplificar las tareas de manipulaci\u00f3n de variables de forma r\u00e1pida y ligera, lo que ser\u00eda realmente dif\u00edcil si \u00fanicamente se hiciera uso del lenguaje NCL.<br \/>\nEn la siguiente figura se detalla los componentes m\u00e1s importantes del subsistema Ginga-NCL que son:<\/p>\n<div id=\"attachment_1776\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga.png\"><img aria-describedby=\"caption-attachment-1776\" loading=\"lazy\" class=\"wp-image-1776 size-medium\" src=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga-300x94.png\" alt=\"Subsistema Ginga-NCL\" width=\"300\" height=\"94\" srcset=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga-300x94.png 300w, http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga-660x206.png 660w, http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga.png 740w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1776\" class=\"wp-caption-text\">Subsistema Ginga-NCL<\/p><\/div>\n<ul>\n<li><strong>Formatter (Formateador):<\/strong> Recibe de Ginga-CC el documento NCL y se encarga de controlar su presentaci\u00f3n, intentando garantizar que las relaciones entre los objetos de media especificados por el autor sean correctos.<\/li>\n<li><strong>XML Parser (Analizador XML), Converter (Convertidor):<\/strong> se encarga de realizar la traducci\u00f3n de la aplicaci\u00f3n NCL en la estructura interna de datos que Ginga-NCL maneja.<\/li>\n<li><strong>Scheduler (Programador):<\/strong> se encarga de ordenar los documentos NCL que tienen que ser cargados basados en la programaci\u00f3n que indique que objetos de media se iniciar\u00e1n dependiendo del flujo de la aplicaci\u00f3n.<\/li>\n<li><strong>Player Manager (Administrador de reproducci\u00f3n):<\/strong> recibe del programador la orden en el momento indicado para la exhibici\u00f3n del tipo de contenido de la media solicitada.<\/li>\n<li><strong>Private Base Manager (Administrador de Base Privada):<\/strong> se encarga de recibir los comandos de edici\u00f3n de los documentos NCL y de darle mantenimiento a los documentos NCL presentados.<\/li>\n<li><strong>Layout Manager (Administrador de Dise\u00f1o):<\/strong> es el responsable de mapear todas las regiones definidas en un documento NCL.<\/li>\n<\/ul>\n<h3>2.1.2 Ginga-J<\/h3>\n<p>Los lenguajes imperativos se caracterizan por ofrecer mayor control del c\u00f3digo a los desarrolladores, adem\u00e1s de ser menos abstractos en comparaci\u00f3n con los lenguajes declarativos. De este modo la aplicaci\u00f3n puede ser capaz de manejar todo el control y ejecuci\u00f3n del flujo de la aplicaci\u00f3n. Sin embargo, el coste de dise\u00f1o se incrementa en gran medida debido a la complejidad de su c\u00f3digo fuente y no son la mejor opci\u00f3n al momento de desarrollar aplicaciones no lineales.<\/p>\n<p>Ginga-J es el responsable del procesamiento de aplicaciones procedurales escritas en lenguaje Java, que a su vez son llamadas Xlets. Estas aplicaciones tiene una interfaz que permite que un agente externo las inicie, pare y controle su ejecuci\u00f3n de varias formas.\u00a0 Adem\u00e1s se dividen en tres componentes: M\u00e1quina Virtual Java, el n\u00facleo, y sus APIs.<\/p>\n<p>La implementaci\u00f3n que Sun propone a trav\u00e9s de su lenguaje de programaci\u00f3n Java para las aplicaciones de Televisi\u00f3n Digital se llama Java-DTV, que posee las siguientes funcionalidades.<\/p>\n<ul>\n<li>Streaming de audio y video;<\/li>\n<li>Acceso a los datos en los canales de transmisi\u00f3n;<\/li>\n<li>Acceso a los datos en el servicio de informaci\u00f3n;<\/li>\n<li>Control de sintonizador de canales;<\/li>\n<li>Sincronizaci\u00f3n de objetos de media; y<\/li>\n<li>Administraci\u00f3n del ciclo de vida de la aplicaci\u00f3n.<\/li>\n<\/ul>\n<p>El API se divide en tres categor\u00edas, como se aprecia en la siguiente figura:<\/p>\n<div id=\"attachment_1777\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_gingaj.png\"><img aria-describedby=\"caption-attachment-1777\" loading=\"lazy\" class=\"wp-image-1777 size-medium\" src=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_gingaj-300x132.png\" alt=\"Subsistema Ginga-J\" width=\"300\" height=\"132\" srcset=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_gingaj-300x132.png 300w, http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_gingaj-660x291.png 660w, http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_gingaj.png 707w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1777\" class=\"wp-caption-text\">Subsistema Ginga-J<\/p><\/div>\n<ul>\n<li><strong> API Verde:<\/strong> mantiene compatibilidad con el est\u00e1ndar americano y europeo. Esta API est\u00e1 compuesto por los paquetes Sun JavaTV, DAVIC[1], HAVi y DVB.<\/li>\n<li><strong> API Amarilla:<\/strong> proporciona soporte a m\u00faltiples usuarios, dispositivos y redes. Esta API est\u00e1 compuesto por el API JMF 2.1, el cual es necesario para desarrollar aplicaciones avanzadas, con captura de sonido al instante, con extensi\u00f3n para API de Presentaci\u00f3n GEM, con funcionalidades de soporte para las especificaciones de video stream, el canal de retorno, que permite el env\u00edo asincr\u00f3nico de mensajes, y extensi\u00f3n para los Servicios de Informaci\u00f3n.<\/li>\n<li><strong> API Roja:<\/strong> proporciona soporte a aplicaciones que pueden ser recibidas, almacenadas y ejecutadas.<\/li>\n<\/ul>\n<h3>2.1.3 Ginga-CC<\/h3>\n<p>Ginga Common Core, es el subsistema l\u00f3gico que provee toda funcionalidad com\u00fan al soporte de los ambientes de programaci\u00f3n declarativos, GINGA-NCL, e imperativo, GINGA-J. La arquitectura del sistema permite que \u00fanicamente el m\u00f3dulo Ginga-CC deba ser adaptado a la plataforma donde ser\u00e1 implementado.<\/p>\n<p>Ginga-CC provee un nivel de abstracci\u00f3n de la plataforma de hardware y del sistema operativo, accesible a trav\u00e9s de las APIs. Esto le permite interactuar con el acceso al sintonizador de canal, con el sistema de archivos, el terminal gr\u00e1fico entre otros.<\/p>\n<p>En la siguiente figura se puede ver los diferentes componentes que conforman el Gina-CC<\/p>\n<div id=\"attachment_1778\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga_cc.png\"><img aria-describedby=\"caption-attachment-1778\" loading=\"lazy\" class=\"wp-image-1778 size-medium\" src=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga_cc-300x153.png\" alt=\"Subsistema Ginga-CC\" width=\"300\" height=\"153\" srcset=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga_cc-300x153.png 300w, http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga_cc-660x337.png 660w, http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2014\/08\/subsistema_ginga_cc.png 810w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1778\" class=\"wp-caption-text\">Subsistema Ginga-CC<\/p><\/div>\n<ul>\n<li><strong> Sintonizador:<\/strong> Este m\u00f3dulo es el responsable de \u201csintonizar\u201d un canal, seleccionando un canal f\u00edsico dentro de los flujos de transporte que est\u00e1n siendo enviados por ese canal.<\/li>\n<li><strong> Filtro de secciones:<\/strong> Una vez sintonizado, el middleware debe ser capaz de acceder a partes espec\u00edficas del flujo de transporte. Para lograr este objetivo, existe el Filtro de Secciones, que es capaz de buscar en un flujo la parte exacta que las APIs necesitan para su ejecuci\u00f3n, de \u00e9sta manera solo permite el paso de la informaci\u00f3n requerida por la API.<\/li>\n<li><strong> Procesador de datos:<\/strong> Es el elemento responsable de acceder, procesar y reenviar los datos recibidos por la capa f\u00edsica. Tambi\u00e9n es el encargado de notificar a los otros componentes, sobre cualquier evento que se reciba.<\/li>\n<li><strong> Persistencia:<\/strong> El middleware tiene la capacidad de almacenar y guardar archivos una vez finalizado el proceso para que luego pueda ser abierto o utilizado posteriormente.<\/li>\n<li><strong> Iniciador de aplicaciones:<\/strong> El m\u00f3dulo responsable de gestionar las aplicaciones, cargar, configurar e inicializar y ejecutar cualquier aplicaci\u00f3n tanto declarativa como imperativa. Controla el ciclo de vida de las aplicaciones, termin\u00e1ndolas cuando sea necesario adem\u00e1s de controlar los recursos utilizados por las APIs.<\/li>\n<li><strong> Adaptador de audio video principal:<\/strong> Con el adaptador de audio y video, las aplicaciones consiguen entregar un flujo de audio y video. Esto se hace necesario cuando una aplicaci\u00f3n necesita controlar sus acciones, de acuerdo a como est\u00e1n siendo transmitida.<\/li>\n<li><strong> Gestor de gr\u00e1ficos:<\/strong> Los est\u00e1ndares del middleware definen como deben ser mostrados al usuario las im\u00e1genes, los videos, los datos, etc. Gestionando las presentaciones.<\/li>\n<li><strong> Gestor de actualizaciones:<\/strong> Componente que se encarga de gestionar las actualizaciones del sistema, verificando, y bajando las actualizaciones del middleware cuando sea necesario, para corregir los posibles errores de las versiones, \u00e9sta tarea debe realizarse en tiempo de ejecuci\u00f3n sin incomodar el uso normal de la TV por el usuario.<\/li>\n<li><strong> Visualizador de medios:<\/strong> Proporciona las herramientas necesarias para visualizar los archivos multimedia recibidos, como por ejemplo archivos tipo JPEG, MPEG, MP3, HTML, etc.<\/li>\n<\/ul>\n<p><strong>Referencias:<\/strong><\/p>\n<p>[1] Digital Audio Visual Council. Fue una asociaci\u00f3n que acog\u00eda a diversas empresas de la industria audiovisual, el est\u00e1ndar ISO-IEC 16500 es una de las normas m\u00e1s importantes en el campo de las aplicaciones interactivas y sus servicios.<\/p>\n<hr \/>\n<p><strong>Siguiente Art\u00edculo:<\/strong> <a href=\"http:\/\/alejandroayala.solmedia.ec\/?p=1785\">Televisi\u00f3n Digital Terrestre, Utilizando la Interactividad<\/a><\/p>\n<h4>EOF<\/h4>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=a1ejo_ayala\" class=\"twitter-share-button\" data-size=\"large\">Twittear<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>En el anterior art\u00edculo repasamos brevemente que constituye la Televisi\u00f3n Digital Terrestre y mencionamos ciertas caracter\u00edsticas del est\u00e1ndar ISDB-T, est\u00e1ndar escogido en nuestro pa\u00eds. Es el momento de adentrarnos al componente que nos permite desarrollar aplicaciones interactivas, ambientes de programaci\u00f3n, lenguajes de programaci\u00f3n NCL, Lua y Java. En este art\u00edculo una introducci\u00f3n a Ginga y\u2026 <span class=\"read-more\"><a href=\"https:\/\/alejandroayala.solmedia.ec\/?p=1774\">Leer m\u00e1s &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":1816,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[96],"tags":[100,101,102,104,103,97,99,117,98,133,376],"_links":{"self":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1774"}],"collection":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1774"}],"version-history":[{"count":13,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1774\/revisions"}],"predecessor-version":[{"id":1803,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1774\/revisions\/1803"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/media\/1816"}],"wp:attachment":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}