O Middleware Ginga
Vimos nos posts anteriores o que é um middleware de televisão digital, suas peculiaridades e os seus principais objetivos, hoje estarei falando sobre o middleware que será utilizado no Sistema Brasileiro de Televisão Digital Terrestre. Middleware o qual foi batizado de Ginga.
Mas porque o nome Ginga ? A palavra “ginga” foi escolhida para batizar o middleware do SBTVD-T em reconhecimento à cultura brasileira, a arte e a contínua luta por liberdade e igualdade, desde a escravidão, do povo brasileiro. A forma como nós conversamos, dançamos e caminhamos, tudo possui uma “ginga”, ginga essa que é uma marca da cultura brasileira.
O desenvolvimento do middleware Ginga foi um esforço em conjunto dos laboratórios Telemídia (www.telemidia.puc-rio.br) da PUC-RIO (Pontifícia Universidade Católica do Rio de Janeiro) e LAVID (www.lavid.ufpb.br) da UFPB (Universidade Federal da Paraíba).
****Características
O Ginga, assim como o SBTVD-T, desde a sua concepção levou em consideração a necessidade primordial de inclusão social e digital da sociedade brasileira. O middleware teria que ter como uma de suas características principais, o fato de poder proporcionar aplicações de cunho social para a população, tais como: aplicações de alfabetização (ensino a distância – T-Learning), aplicações relacionadas a saúde como um todo (T-Health), aplicações governamentais de uso geral como por exemplo, uma aplicação que informasse ao usuário que documentos ele deveria levar para poder aposentar (T-GOV). Além dessa importante característica, o Ginga é uma especificação de middleware de código aberto e de fácil aprendizagem, permitindo a qualquer cidadão brasileiro produzir conteúdo interativo para TV Digital, uma característica muito interessante, já que o Ginga não será uma tecnologia de acesso apenas pelas grandes emissoras, o que dará um novo impulso às pequenas agências e TV’s comunitárias de todo o país.
Uma outra caracterísitca interessante do Ginga diz respeito à sua portabilidade, o Ginga é um software independente do hardware que o embarca, ou seja, o Ginga pode ser executado em qualquer tipo de receptor (TV, PDA’S, Celulares, etc) independente do fabricante, o que facilita bastante o desenvolvimento de conteúdo e aplicações interativas, já que essas mesmas aplicações poderão ser executadas em qualquer dispositivo que o Ginga esteja executando (podemos fazer uma analogia aqui ao Java, que também é independente do hardware, tendo o usuário que ter apenas uma JVM para executar os aplicativos desenvolvidos na linguagem).
**** Aspectos Técnicos
Por questões de projeto, um middleware deve suprir a realização de aplicaçoes declarativas e de aplicações procedurais. Bom, mas o que seria essas aplicações declarativas e procedurais ?
Uma aplicação com conteúdo declarativo deve ser baseado em uma linguagem declarativa, isto é, em uma linguagem que enfatiza a descrição declarativa do problema, ao invés da sua decomposição em uma implementação algorítmica. Já uma aplicação com conteúdo procedural deve ser baseado em uma linguagem não declarativa. Linguagens não declarativas podem seguir diversos paradigmas. O que nos leva às linguagens baseadas em módulos, orientadas a objeto, etc. Nas linguagens procedurais, o programador possui um maior poder sobre o código, sendo capaz de estabelecer todo o fluxo de controle e execução de seu programa, necessariamente o computador deve obrigatoriamente ser informado sobre cada passo a ser executado, o que denota um grau de complexidade muito maior.
A escolha do tipo de aplicação (declarativa ou procedural) a desenvolver, dependerá muito do foco da aplicação. Lembrando que as aplicações do tipo declarativas são muito mais fáceis de se usar, muito mais intuitivas, geralmente não necessitando que a pessoa que vá desenvolver seje um perito em programação, já as aplicações do tipo procedurais devem necessariamente ser desenvolvidas por peritos em programação, pois a complexidade é muito maior. Voltando um pouco, existem ainda as aplicações do tipo híbridas, uma aplicação do tipo híbrida é uma aplicação onde um tipo de aplicação (declarativa ou procedural) faz referência a um código (declarativo ou procedural) embutido. Por exemplo: Você decidiu desenvolver uma aplicação pra TV Digital e optou por desenvolvé-la de modo declarativo, utilizando a linguagem NCL. Em determinado momento da aplicação houve a necessidade de desenvolver uma parte da aplicação de forma procedural (por exemplo, desenvolver um formulário de cadastro), e você então o fez utilizando um Xlet (programa feito em java para executar em uma TV, utilizando a API JavaTV). No seu código NCL você então poderá referenciar o Xlet para que o mesmo execute e a aplicação possa rodar perfeitamente.
No ambiente Ginga, a linguagem de contexto NCL foi implementada para execução de aplicaçoes declarativas, para as aplicações procedurais a linguagem utilizada é a Java.
**** Arquitetura do Ginga
Pela figura podemos notar que a arquitetura do Ginga pode ser dividida em 3 grandes módulos: Ginga-CC, Ginga-NCL e Ginga-J.
1) Ginga -CC (Comom Core)
O Ginga-CC oferece o suporte necessário aos ambientes declarativo e procedural, e tem como funções principais a exibição dos vários objetos de mídia, o controle do plano gráfico, o tratamento de dados obtidos do carrossel de objetos DSM-CC, o tratamento do canal de retorno, entre outras.
2) Ginga-NCL (Ou Máquina de Apresentação)
O Ginga-NCL é o subsistema que processa os documentos NCL, possui a máquina de interpretação do conteúdo declarativo (Formatador NCL), o exibidor (user agent) baseado em XHTML e a máquina de apresentação LUA, responsável pela interpretação dos scripts LUA. O Ginga-NCL é um ambiente obrigatório em todos os receptores portáteis que receberão o sinal digital.
Como dito anteriormente, a linguagem NCL (www.ncl.org.br) foi escolhida como base do ambiente declarativo do Ginga. A linguagem NCL é a única linguagem que dá suporte a todos os requisitos mencionados para um middleware. A linguagem foi desenvolvida no laboratório Telemídia e é uma das principais linguagens existentes para a definição de sincronismo temporal, ou seja, sincronismo entre vários tipos de mídia. Além disso, permite suporte a variáveis que podem ser manipuladas através de códigos procedurais (vide exemplo Xlet), entre eles o de sua linguagem de Script LUA.
A linguagem LUA também foi desenvolvida pela PUC-RIO em meados dos anos 90, e é padrão internacional na área de entretenimento, a linguagem LUA é muito utilizada hoje em jogos.
3) Ginga-J (ou Máquina de Execução)
O Ginga-J é o outro subsistema do Ginga responsável pelo processamento e execução das aplicações procedurais (os chamados Xlets). O componente chave do Ginga-J é a JVM (Java Virtual Machine) ou máquina virtual Java que será a responsável pela execução das Xlets (dedicarei um post exclusivo para falar das Xlets). A figura abaixo mostra a arquitetura do Ginga-J.
O Ginga-J é a única parte do Ginga que ainda passa por especificação pela ABNT, por isso ainda não está disponível na comunidade do Ginga. Mas podemos traçar algumas características do Ginga-J.
O Ginga-J possui várias APIs, dentre elas estão a JavaTV que é uma API desenvolvida pela SUN focada especialmente para o desenvolvimento de conteúdo interativo de forma procedural para TV Digital. Os pacotes DAVIC, Havi e DVB também estão inclusos no Ginga-J.
DAVIC: O sistema DAVIC (Conselho de Áudio e Vídeo Digital) é um conjunto de especificações que têm como principal objetivo sustentar uma interoperabilidade real de ponta a ponta para as plataformas envolvidas na execução de serviços de áudio e vídeo transmitidos via radiodifusão. Assim, esses padrões podem ser utilizados nos sistemas de televisão digital para fornecer conteúdo ao usuário final e também para permitir interatividade com o mesmo usuário. [1]
HAVi: As definições HAVi (interoperabilidade doméstica de áudio e vídeo) determinam uma rede doméstica padrão focada na interoperatividade de dispositivos de áudio e vídeo, de forma que todos os dispositivos de áudio e vídeo componentes de uma rede HAVi possam interagir uns com os outros. [1]
DVB: Ao desenvolver o middleware padrão MHP, o DVB incluiu alguns pacotes para extender as funcionalidades oferecidas pelo JavaTV, HAVi e DAVIC. Essas funcionalidades incluíram API de Informações de Serviço, Intercomunicação entre Xlets, persistência etc. [1]
Uma importante API do Ginga-J é a br.org.sbtvd.net.rc, essa é a API de canal de retorno, através dela, o Ginga poderá enviar mensagens assíncronas pelo canal de retorno do receptor, o que será muito usado em aplicações que envolvam acesso à internet (t-banking, chat, jogos online, t-mail, …) ou aplicações desenvolvidas pelas próprias emissoras ou agências (aplicações t-gov como t-voto, pesquisas de opinião, …).
Bom, neste post falei de uma forma geral sobre o middleware brasileiro Ginga, seus componentes e sua arquitetura básica. Nos próximos posts estarei falando mais detalhadamente sobre o Ginga-NCL em especial à linguagem NCL e o desenvolvimento de aplicações para a TV utilizando esse subsistema do Ginga. Como o Ginga-J ainda não está disponível para nós, dedicarei o próximo post à API JavaTV e aos Xlets, lembrando que esta API “JavaTV” fará parte do Ginga-J e está disponível há vários anos e pode ser baixada no site da SUN.
Para finalizar, recentemente o Ginga-NCL foi eleito como padrão internacional de middleware declarativo pela ITU-T, o que representa uma grande vitória pra nós brasileiros, já que possivelmente ele será adotado, assim como o Ginga, em outros países o que poderá abranger o campo de trabalho para quem escolher atuar nessa área. Abaixo segue alguns links para conhecimento, lembrando que na seção de links do lado direito há vários links interessantes para quem quiser se aprofundar mais no assunto.
Obrigado !!!
- Ginga-NCL Padrão Internacional
- API JavaTV
- XletView – Emulador para Execução de Xlets
- Máquina de Execução para aplicativos declarativos (Emulador) – Ginga NCL
- Composer – Ferramenta de auxílio para desenvolvimento de aplicações Declarativas
- Plugin NCL para o Eclipse
[1] Televisão digital terrestre – Codificação de dados e especificações de transmissão para transmissão digital – Parte 4: Ginga-J – Ambiente para a execução de aplicações procedurais.
“Se eu, com óculos, desse jeito, sou quase tão adorado quanto o Paulo Ricardo… se eu posso, meu irmão, você também pode.” [Renato Russo]
—————————————————————————————-











