• Nenhum resultado encontrado

ArtigoTVDigitalMundoJavaTV

N/A
N/A
Protected

Academic year: 2021

Share "ArtigoTVDigitalMundoJavaTV"

Copied!
18
0
0

Texto

(1)

TV Digital

Java na sala de estar

Autor

Carlos Eduardo Batista (bidu@lavid.ufpb.br): é bacharel em Ciências da Computação pela Universidade Federal da Paraíba (UFPB), onde também é aluno de mestrado na área de Sistemas Distribuídos. Trabalha em projetos na área de Vídeo Digital e TV Digital no Laboratório de Aplicações de Vídeo Digital (LAVID) da UFPB desde 2003 e atua como Gerente de Qualidade no projeto de implementação do Middleware de referência para o Sistema Brasileiro de TV Digital (SBTVD).

Gravata

Uma importante convergência entre tecnologias presentes no nosso cotidiano está

acontecendo. A TV Digital Interativa abre um vasto leque de possibilidades para

desenvolvedores e coloca o telespectador como membro ativo da cadeia televisiva. No

contexto brasileiro o momento é de decisões, devido à pluralidade de sistemas de TV Digital

oferecidos, além da possibilidade de desenvolvimento de um padrão adaptado às

necessidades nacionais. As pesquisas realizadas a partir de 2005, como parte do projeto do

Sistema Brasileiro de TV Digital (SBTVD), deram os contornos iniciais de como será a TV

do futuro no Brasil. Não importam quais serão os caminhos tomados: a tecnologia Java

estará presente.

Introdução

Da combinação de novos e eficientes esquemas de modulação para transmissões digitais com a evolução dos algoritmos de codificação de vídeo, surge a TV Digital, uma revolução tecnológica de alcance gigantesco, visto que grande parte da população mundial passa uma parte do seu dia diante do aparelho televisor. O telespectador passa agora a ter papel ativo na programação que anteriormente apenas assistia. Através do controle remoto, anteriormente utilizado para funções meramente operacionais, o telespectador poderá intervir diretamente no que assiste, quer seja escolhendo o ângulo para assistir um jogo de futebol ou para fazer compras. As possibilidades são inúmeras: com aparelhos de TV possuindo capacidade computacional, grande parte das operações possíveis em um computador serão transportadas para o ambiente de televisão.

Para tanto, um conjunto de tecnologias foi criado ou adaptado para viabilizar a execução de aplicações que permitem interatividade através da televisão. Surgem então os sistemas de televisão digital, que, em linhas gerais, definem um grupo de componentes que atuam em conjunto para viabilizar a transmissão, recepção e apresentação dos conteúdos audiovisuais e a execução dos programas interativos em aparelhos de televisão. Esses sistemas são baseados em padrões, que regem desde a codificação do vídeo até a camada de abstração de software que permite que aplicações sejam executadas em diferentes equipamentos – o middleware. É natural (e praticamente consenso entre os sistemas existentes) que a tecnologia Java esteja presente nesta camada de software, o que quer dizer que em muitos casos as aplicações interativas para televisão são aplicações Java (chamadas de Xlets). Dentre os sistemas existentes podemos destacar o Europeu (DVB –

(2)

Digital Vídeo Broadcasting) e o Americano (ATSC – Advanced Television Systems Committee), que já utilizam a tecnologia Java e o Japonês (ISDB – Integrated Services Digital Broadcasting), que publicou uma especificação relacionando Java como uma opção ao uso de programas declarativos.

No Brasil vivemos um momento de decisão: os resultados dos projetos que visam fundamentar as decisões para o Sistema Brasileiro de TV Digital (SBTVD) estão vindo à tona, e o ano de 2006 é estratégico para a TV Digital no Brasil. O esforço combinado de centenas de pesquisadores brasileiros, com participação expressiva de instituições acadêmicas, desmistificou muitos conceitos estabelecidos e colocou o Brasil na vanguarda do desenvolvimento de tecnologias que, em alguns anos, estarão presentes em milhões de lares ao redor do mundo.

O advento da TV Digital abre uma nova janela de oportunidades para os desenvolvedores Java. Este artigo tem como propósito, além de introduzir o leitor ao mundo da TV Digital, apresentar as mais importantes características deste novo ambiente de desenvolvimento.

Um Sistema de TV Digital

Um sistema de TV Digital pode ser entendido como um conjunto de definições que viabilizam a construção de dispositivos para transmissão e recepção de TV Digital. Dessa forma temos uma estação de TV transmitindo (por via terrestre, cabo ou satélite) o sinal de vídeo, codificado digitalmente, utilizando um determinado padrão de modulação para receptores (embutidos ou não no aparelho televisor) que vão decodificar esses sinais para exibi-los. Como o vídeo é transmitido como um fluxo de bits, há a possibilidade de se transmitir uma maior quantidade de dados multiplexados (em comparação ao sistema analógico), e, havendo canal de retorno (conexão internet, por exemplo), o receptor pode enviar dados para a difusora. O mecanismo de transporte utilizado para transmissão de vídeo digital com dados agregados utilizado nos padrões internacionais de TV é o MPEG-2 Sistema. Esse mecanismo define tabelas para inclusão de dados que podem ser informações acerca da programação transmitida como também aplicações interativas. Algumas das diferenças encontradas entre os sistemas de TV Digital se encontram justamente na forma da utilização destas tabelas.

O receptor de TV Digital é um aparelho responsável por decodificar o sinal de vídeo recebido, além de disponibilizar para o telespectador as informações agregadas (na forma de um guia eletrônico de programação, por exemplo) e viabilizar a execução das aplicações recebidas junto com o vídeo. Esse receptor, conhecido como set-top box, pode ser entendido como um computador adaptado para as necessidades do ambiente televisivo, possuindo processador, memória, Sistema Operacional, etc. Nele encontramos uma instância de software de suma importância para o desenvolvimento em TV Digital: o middleware. O middleware é responsável por “esconder” as particularidades do equipamento no qual uma determinada aplicação será executada. Isso é extremamente necessário em um ambiente de transmissão de TV Digital, visto que uma mesma aplicação será transmitida para milhares de receptores, com diferentes características e fabricantes. Aplicações para TV Digital devem ser, então, extremamente portáveis e independentes de plataforma. Precisa explicar mais alguma coisa para justificar a presença de Java no universo de TV Digital?

A maioria dos padrões de middleware atualmente disponíveis escolhe Java como parte da solução para a execução de aplicações nos seus receptores. A API Java TV, da Sun, veio para facilitar esta natural integração. Além de Java e APIs relacionadas (de elementos gráficos, por exemplo), esses middlewares incluem suporte à linguagens declarativas (como XHTML por exemplo) e de script. As aplicações Java executadas nos receptores são chamadas de Xlets.

A API Java TV

A Sun iniciou o desenvolvimento da API Java TV em meados de 1998, lançando sua versão 1.0 em outubro de 2000. O objetivo principal dessa API é prover mecanismos de controle e acesso sobre receptores de TV Digital, abstraindo aspectos específicos de sistema operacional e hardware. Inicialmente a API Java TV era extensão da plataforma PersonalJava, que atualmente encontra-se em processo de EOL (End of Life - fim de vida). Java TV passou a ser suportada, então, pela família Java 2 Micro Edition (J2ME), com a configuração Connected Device Configuration (CDC), que, em seu perfil mais amplo, oferece quase todas as funcionalidades da J2SE para dispositivos embarcados.

(3)

A API Java TV provê funcionalidades específicas dos receptores de TV Digital (não providas por nenhuma outra API J2ME). Essas funcionalidades incluem: acesso a serviços, seleção dos serviços, acesso a informações sobre serviços, controle dos gráficos na tela, controle básico (alto nível) dos elementos de recepção de sinal de difusão (broadcast), acesso a dados de difusão e gerência do ciclo de vida das aplicações (Xlets). O termo serviço é utilizado no contexto de TV Digital para designar o que hoje compreendemos por um canal de TV. Podemos definir, em linhas gerais, que a API Java TV dá suporte a aplicações executadas na máquina virtual Java designada para receptores de TV Digital (no caso, a máquina virtual definida pela configuração CDC), viabilizando o provimento de conteúdo interativo por parte da aplicação. Na Figura 1 temos a arquitetura Java TV, através da qual podemos visualizar os componentes envolvidos e a relação entre eles.

Figura 1. Arquitetura Java TV

Uma aplicação para TV Digital (um Xlet) é composta por uma classe principal (que implementa a interface Xlet provida pela API Java TV) e possivelmente mais classes (mais adiante verificaremos que os padrões de middleware incluem também outras classes para uso específico, que podem ser utilizadas pelos Xlets). Esse Xlet possivelmente faz várias chamadas da API Java TV, e é obviamente executado sobre a máquina virtual Java. A máquina virtual Java, por sua vez, é executada sobre um Sistema Operacional de tempo real, que através dos seus drivers acessa os dispositivos do receptor de TV Digital.

Java TV é também integrado ao JMF (Java Media Framework), com algumas extensões, provendo funcionalidades adicionais de sincronização de mídia. Isso viabiliza, por exemplo, a sincronização do conteúdo interativo com o áudio e vídeo de um programa em exibição.

`

Pacotes da API JavaTV

A API está organizada nos seguintes pacotes:

javax.tv.xlet – Modelo de ciclo de vida das aplicações e classes de apoio.

javax.tv.locator – prove mecanismo para referências em formato de URL para serviços de broadcast e clipes de mídia broadcast.

javax.tv.net – prove mecanismos para acessar datagramas IP contidos em um fluxo broadcast. javax.tv.corousel – acesso a arquivos de broadcast agregados em um sistema de arquivos no fluxo do vídeo.

javax.tv.graphics – adiciona um suporte mínimo à biblioteca gráfica AWT, para solução de questões específicas em TV (sobreposição de imagens em vídeo, etc).

(4)

javax.tv.util – classes utilitárias para aplicações Java TV, incluindo gerência de temporizadores e eventos temporizados.

javax.tv.media – extensões para suporte à integração JMF.

javax.tv.media.protocol – suporte JMF para protocolos de streaming broadcast.

javax.tv.service – descrição alto nível de serviços de TV Digital, incluindo também mecanismos básicos para coleta de informações sobre serviço do fluxo broadcast.

javax.tv.service.guide – suporte para aplicações do tipo EPG (Eletronic Program Guide, guia eletrônico de programação) e seus conceitos associados (horário, classificação etária, etc).

javax.tv.service.navigation – suporte à navegação em serviços de TV Digital. Isso inclui suporte à lista de serviços favoritos, componentes agregados à serviços, etc.

javax.tv.service.transport – conceitos descrevendo os mecanismos de transporte para um serviço de TV Digital.

javax.tv.service.selection – conceitos descrevendo como os serviços são apresentados ao usuário, e como um novo serviço pode ser selecionado. Há também a possibilidade de apresentação de múltiplos serviços de uma só vez (picture-in-picture).

Os Xlets

Um Xlet é uma aplicação Java que traz para TV Digital um teor de interatividade próximo ao de um computador convencional. Similar a um Applet, que é inserido em páginas HTML, o Xlet é incluído em um serviço de TV Digital. O middleware identifica o ponto de entrada da aplicação (classe que implementa a interface javax.tv.xlet.Xlet) e executa a aplicação utilizando a máquina virtual Java. O middleware geralmente possui um componente que é responsável por gerenciar o ciclo de vida das aplicações, que instancia a classe principal (ponto de entrada) e invoca os métodos responsáveis pela mudança de estados. A Figura 2 apresenta os estados de um Xlet e os métodos responsáveis pelas transições.

(5)

Segue uma breve descrição dos estados:

Carregado (Loaded) – O Xlet foi carregado, porém não inicializado. Esse estado é alcançado quando da instanciação da classe principal, feita pelo middleware. O método construtor de um Xlet não possui argumentos, e basicamente executa pouca ou nenhuma inicialização. Em caso de falha, o Xlet é destruído (estado Destruído – Destroyed).

Pausado (Paused) – O Xlet foi inicializado, porém não está utilizando nenhum recurso compartilhado do receptor. Esse estado é alcançado quando da inicialização do Xlet (invocando do método initXlet no estado Carregado) ou quando o Xlet é pausado (invocando do método pauseXlet no estado Ativo).

Ativo (Active) – O Xlet está em funcionamento. Esse estado é alcançado quando o método startXlet é invocado no estado Pausado.

Destruído (Destroyed) – O Xlet foi destruído e liberou todos os recursos que utilizou. Esse estado é alcançado quando a exceção XletStateChangeException é lançada em qualquer transição de estados ou quando o método destroyXlet é invocado a partir de qualquer estado.

Na interface javax.tv.xlet.Xlet estão descritos todos os métodos invocados para mudanças de estado da aplicação. Esses métodos são invocados pelo componente responsável no middleware ou pela própria aplicação. São eles:

initXlet – invocado pelo middleware para inicializar o Xlet. O middleware passa à aplicação o contexto onde esta será executada, na forma de um objeto XletContext, que também é utilizado pela aplicação para sinalizar para o middleware que o Xlet mudou de estado. A inicialização do Xlet feita por esse método não deve utilizar nenhum recurso compartilhado. Quando há falha na chamada deste método, uma exceção XletStateChangeException é lançada.

startXlet – utilizado para sinalizar que o Xlet está se tornando ativo, podendo utilizar os recursos necessários para realização de suas funções.

pauseXlet – chamado quando há a necessidade que o Xlet tenha sua execução suspensa (para que outra aplicação fique ativa, por exemplo). Nesse método o Xlet deve liberar os recursos compartilhados que estiver utilizando para que possa ser considerado pausado (podendo ser ativado novamente pelo middleware).

destroyXlet – chamada utilizada para liberar todos os recursos utilizados pelo Xlet e operações relacionadas à exclusão do Xlet (estado destruído). Se a exceção XletStateChangeException for lançada por esse método, o Xlet só será destruído se o atributo unconditional for definido como true. Listagem 1. Interface javax.tv.xlet.Xlet.

public interface Xlet {

public void initXlet(XletContext ctx) throws XletStateChangeException; public void startXlet() throws XletStateChangeException;

public void pauseXlet();

public void destroyXlet(boolean unconditional) throws XletStateChangeException; }

(6)

Analisando a listagem 1 nota-se que semelhança entre um Xlet e um Applet é evidente quando analisamos os métodos da interface javax.tv.xlet.Xlet, porém podemos verificar uma diferença significativa: a possibilidade de pausa de execução de um Xlet. A necessidade dessa funcionalidade surge a partir de características específicas do ambiente de TV Digital. Um receptor pode executar múltiplos Xlets simultaneamente, porém apenas uma dessas aplicações estará visível: as aplicações não visíveis estarão pausadas, sem utilizar recursos que podem ser utilizados pela aplicação visível.

Como há a possibilidade de que um Xlet pause a si próprio ou se destrua, utiliza-se o contexto do Xlet para notificar o middleware a mudança de estado. Na inicialização do Xlet (método initXlet), o middleware passa como parâmetro seu contexto, na forma de um objeto que implementa os métodos da interface javax.tv.xlet.XletContext. O Xlet então poderá usar esses métodos conhecidos para notificar o middleware da mudança de estado, ou requerer a ativação do Xlet (quando estiver pausado). Os métodos da interface javax.tv.xlet.XletContext:

notifyDestroyed – notifica o middleware de que o Xlet está pronto para ser destruído. notifyPaused – notifica o middleware de que o Xlet está pronto para ser pausado.

resumeRequest – faz uma requisição ao middleware para que este ative o Xlet. Essa requisição acontece em alguns casos quando o Xlet pausa a si próprio e, de acordo com algum evento, requer ativação. O middleware pode ignorar essa requisição se necessário.

getXletProperty – acesso à propriedades definidas para o Xlet. Listagem 2. Interface javax.tv.xlet.XletContext.

public interface XletContext {

public static final String ARGS = "javax.tv.xlet.args" public void notifyDestroyed();

public void notifyPaused(); public void resumeRequest();

public Object getXletProperty(String key); }

Compatibilidade entre Sistemas de TV Digital

Como mencionado anteriormente, padrões de middlewares dos sistemas de TV Digital incluem bibliotecas adicionais que viabilizam, por exemplo, maior aderência aos sistemas de informação sobre seus serviços, ou utilização de componentes gráficos mais elaborados (não fornecidos pela AWT - Swing não é incluso). Os sistemas de TV Digital de maior visibilidade na atualidade compartilham mais do que apenas a API Java TV. Esse núcleo comum surgiu como produto da popularização do padrão europeu de middleware, o MHP (Multimedia Home Plataform). Iniciativas para implementação do MHP sobre outras plataformas internacionais foram também motivadas pelo desejo de compatibilidade entre aplicações aderentes os padrões de middleware disponíveis.

O padrão MHP, seguindo a lógica de desenvolvimento de um middleware, atua como camada de software que abstrai características do equipamento utilizado e do seu sistema operacional. Adicionalmente, MHP também

(7)

abstrai características da rede de comunicação utilizada, porém, a especificação MHP é atrelada a algumas definições próprias para terminais desenvolvidos para o sistema europeu (DVB).

Para levar aplicações MHP para outras plataformas de TV Digital, o DVB propôs o desenvolvimento de uma especificação única, chamada de GEM (Globally Executable MHP), incluindo características do MHP que não fossem atreladas às características de receptores DVB, como componentes gráficos HAVi (Home Audio Video interoperability), por exemplo. Essa especificação é atualmente adotada pelo padrão de middleware Japonês (ARIB B.23), Americano (ATSC ACAP) e também como opção para criação de conteúdo interativo para discos Blu-ray, um dos candidatos a sucessor do DVD (o outro candidato é o HD DVD, que utiliza o iHD como plataforma para interatividade, desenvolvido pela Microsoft junto com a Toshiba).

GEM pode ser considerado um framework a partir do qual middlewares para TV Digital foram definidos, viabilizando a compatibilidade das aplicações desenvolvidas. O middleware de referência FlexTV, desenvolvido para o SBTVD já nasceu compatível com o GEM, incluindo características adicionais, que supriram requisitos levantados pelo Governo Brasileiro e incorporaram inovações não disponíveis em nenhum outro middleware de TV Digital.

Seguindo a tendência de compatibilização, a ITU (International Telecommunication Union) publicou um conjunto de recomendações ITU-T: J.200, J.201 e J.202. Essas recomendações visam harmonizar os sistemas de TV Digital em diferentes níveis.

A recomendação J.200 define uma arquitetura de alto nível para um conjunto de componentes de forma a prover uma variedade de funcionalidades requeridas por aplicações interativas. As recomendações J.201 e J.202 identificam um núcleo comum para execução de aplicações declarativas e procedurais, respectivamente. A J.201 foi criada baseada na análise das semelhanças funcionais entre as especificações DVB-HTML (DVB), ACAP-X (ACAP) e BML (ARIB). O resultado da definição J.202 é um conjunto de APIs Java (listagem 3) que formam o núcleo de execução de aplicações procedurais para sistemas J.202. Essa especificação referencia e tem como anexo o GEM.

Figura 3. Arquitetura de ambiente de execução de aplicações para TV Digital previsto pela recomendação ITU-T J.200

Listagem 3. APIs que compõem o núcleo comum (J.202) java.awt

(8)

java.awt.image java.beans java.io java.lang java.lang.reflect java.net java.security java.security.cert java.util java.util.zip javax.media javax.media.protocol javax.tv.graphics javax.tv.locator javax.tv.media javax.tv.media.protocol javax.tv.net javax.tv.service javax.tv.service.guide javax.tv.service.navigation javax.tv.service.selection javax.tv.service.transport javax.tv.util javax.tv.xlet org.davic.media org.davic.resources org.havi.ui org.havi.ui.event java.math java.rmi java.security.spec javax.net javax.net.ssl javax.security.cert org.davic.mpeg org.davic.mpeg.sections org.davic.net org.davic.net.dvb org.davic.net.tuning org.dvb.application org.dvb.dsmcc org.dvb.event org.dvb.io.ixc org.dvb.io.persistent org.dvb.lang org.dvb.media org.dvb.net org.dvb.net.tuning

(9)

org.dvb.net.rc org.dvb.test org.dvb.ui org.dvb.user

Testando Xlets

Como não é comum que um desenvolvedor possua uma rede de TV Digital experimental à disposição, geralmente o ambiente é simulado com a utilização de estações de teste ou com emuladores em software. Uma estação de testes inclui equipamentos e softwares que visam reproduzir todas as características relevantes em um ambiente de TV Digital real. Já o emulador faz o papel do componente do middleware que gerencia as aplicações. Um emulador é, então, interessante para testes preliminares em aplicações de TV Digital, visto que o ambiente possui vários elementos envolvidos, além do middleware.

O Laboratório de Aplicações Vídeo Digital (LAVID) da UFPB desenvolveu uma estação (software e hardware) para testes, chamada de Xtation. O Xtation é composto por equipamentos e programas que simulam o ambiente de TV Digital, incluindo transmissão do vídeo digital e seus elementos, sincronização de eventos, decodificação e execução de aplicações interativas, etc. Utilizando o Xtation é possível se testar aplicações a serem executadas em sistemas de TV Digital compatíveis com GEM.

Para aprendizado e iniciação em desenvolvimento de aplicações para TV Digital, um bom software emulador é o XletView (disponível em http://xletview.sourceforge.net). O XletView foi desenvolvido para o teste de Xlets compatíveis com o middleware MHP, possuindo parte da implementação das classes desse middleware que dão suporte à execução de Xlets (incluindo parte da implementação dos componentes gráficos HAVi).

Figura 4. Interface do XletView

O XletView possui um simulador de controle remoto, com botões padrão MHP, cujos eventos podem ser capturados utilizando classes AWT ou HAVi (que são extensões de AWT). Veja Figura 4.

(10)

A interface do XletView é muito simples. Através do submenu “Manage applications...“ do menu “Applications” tem-se acesso a um menu onde Xlets podem ser adicionados para execução (podendo ser agrupados também). Quando um Xlet é adicionado ganha uma entrada no menu “Applications”, através da qual sua execução pode ser iniciada.

Figura 5. Selecionando Xlets para execução

Um Xlet de Exemplo

O Xlet de exemplo apresentado a seguir é bem simples: possui dois labels (instâncias de org.havi.ui.HStaticText) e um deles tem o seu texto modificado de acordo com o botão que é apertado no controle remoto. Para simplificar o código, o listener é o próprio Xlet, sendo assim, a classe do Xlet implementa os métodos tanto da interface javax.tv.xlet.Xlet quanto de java.awt.KeyListener (lembrando que interfaces HAVi podem ser usadas para captura de eventos do controle remoto). Veja listagem 4.

(11)

Figura 6. O Xlet em execução no XletView (botão OK do controle foi apertado).

Listagem 4. Implementação de um Xlet que captura eventos do controle remoto import java.awt.*;

import java.awt.event.*; import javax.tv.xlet.*; import org.havi.ui.*; import org.havi.ui.event.*;

public class ExemploXlet implements Xlet, KeyListener { private XletContext context;

private HScene scene;

private HStaticText label1, label2; public ExemploXlet() {

/* Método vazio */ }

public void initXlet(XletContext xletContext) throws XletStateChangeException { /* guardando o contexto... */

(12)

}

public void startXlet()

throws XletStateChangeException {

HSceneFactory hsceneFactory = HSceneFactory.getInstance(); /* a cena (scene) é onde serão inseridos os elementos gráficos */

scene = hsceneFactory.getFullScreenScene(HScreen.getDefaultHScreen(). getDefaultHGraphicsDevice());

scene.setSize(640, 480); // Definindo o tamanho da cena scene.setLayout(null); // HScene herda de java.awt.Container scene.addKeyListener(this); //o próprio Xlet é o listener /* Criação de dois componentes gráficos (labels) */

label1 = new HStaticText("Al\u00F4 MundoJava!", 35, 45, 660, 50, new Font("Tiresias", 1, 36),

Color.red, Color.white,

new HDefaultTextLayoutManager());

label2 = new HStaticText("Controle Remoto", 100, 135, 500, 30, new Font("Tiresias", 1, 36),

Color.red, Color.white,

new HDefaultTextLayoutManager()); /* Adição dos componentes à cena */

scene.add(label1); scene.add(label2);

/* Tornando a cena visível e ativa */ scene.setVisible(true);

scene.requestFocus(); }

public void pauseXlet() { /* Método vazio */ }

public void destroyXlet(boolean unconditional) throws XletStateChangeException {

(13)

if (scene!=null) {

/* Remoção dos elementos da cena */ scene.setVisible(false); scene.removeAll(); scene = null; } /* Notificando o middleware */ context.notifyDestroyed(); } /* Método de java.awt.event.KeyListener */ public void keyTyped(KeyEvent keyevent) { /* Método vazio */

}

/* Método de java.awt.event.KeyListener */ public void keyReleased(KeyEvent keyevent) { /* Método vazio */

}

/* Método de java.awt.event.KeyListener */ public void keyPressed(KeyEvent e) {

/* Tratamento dos comandos recebido pelo controle remoto */ String mensagem = "";

int codigo = e.getKeyCode(); /* * 403 - vermelho * 404 - verde * 405 - amarelo * 406 - azul * * 27 - exit * * (asterisco) - 151 * # (grade) - 520 *

* seta para cima - 38 * seta para baixo - 40 * seta para esquerda - 37 * seta para direita - 39 * ok - 10

*

* números - número + 48 (ex. 2 é 50) *

(14)

switch (codigo) { case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:

mensagem += "Bot\u00E3o num\u00E9rico: "+(codigo-48); break;

case 403:

mensagem += "Bot\u00E3o Vermelho"; break;

case 404:

mensagem += "Bot\u00E3o Verde"; break;

case 405:

mensagem += "Bot\u00E3o Amarelo"; break;

case 406:

mensagem += "Bot\u00E3o Azul"; break;

case 27:

mensagem += "Bot\u00E3o EXIT"; break;

case 10:

mensagem += "Bot\u00E3o OK"; break;

case 151:

mensagem += "Bot\u00E3o Asterisco (*)"; break;

case 520:

mensagem += "Bot\u00E3o grade (#)"; break;

case 38:

mensagem += "Seta para cima"; break;

case 40:

mensagem += "Seta para baixo"; break;

case 37:

mensagem += "Seta para esquerda"; break;

case 39:

(15)

break; default:

mensagem += "Al\u00F4 MundoJava!"; }

/* Criando um novo label */

label2 = new HStaticText(mensagem, 100, 135, 500, 30, new Font("Tiresias", 1, 36),

Color.blue, Color.white,

new HDefaultTextLayoutManager()); /* Limpando a cena */

scene.removeAll();

/* Adicionando novamente os labels (label2 alterado) */ scene.add(label1);

scene.add(label2);

/* Exibindo nova cena */ scene.repaint();

} }

Para se compilar esse exemplo, deve-se possuir algumas bibliotecas Java TV e MHP. Isso pode ser conseguido incluindo-se os arquivos javatv.jar e xletview.jar no classpath da compilação. O arquivo javatv.jar pode ser encontrado na implementação Java TV de referência da Sun, disponível para download em http://www.sun.com/software/communitysource/javatv/download.xml. O arquivo xletview.jar faz parte do XletView que, como já mencionado anteriormente, pode ser encontrado em http://xletview.sourceforge.net.

A aplicação apresentada (listagem 4) apenas interage com o usuário, o que é conhecido por interação passiva. Aplicações mais avançadas requerem interação com a difusora (uma enquete ou um serviço de vídeo sob demanda) e isso pode ser implementado utilizando-se Sockets em Java.

TV Digital no Brasil

No ano passado, milhares de pesquisadores de todo Brasil se engajaram nas pesquisas do SBTVD – Sistema Brasileiro de TV Digital. Pesquisadores de universidades e centros de pesquisa de todo país foram convocados a estudar e desenvolver as partes que compõem um sistema de TV Digital. Esse projeto tinha como objetivo oferecer ao governo informações que dessem respaldo a uma decisão quanto ao padrão de TV Digital a ser adotado no Brasil, baseado em requisitos oferecidos pelo Governo (um desses requisitos foi de que a TV Digital fosse instrumento para inclusão digital).

Nunca um projeto envolveu tantas entidades acadêmicas e tantos pesquisadores espalhados por todo Brasil. O retorno para sociedade veio na forma de intercâmbio de conhecimento, capacitação de pessoal e principalmente dos excelentes resultados produzidos, em todas as áreas relacionadas: do desenvolvimento de terminais de acesso de TV Digital mais baratos à alternativas para viabilizar o canal de retorno (possibilidade de envio de informação do receptor para a difusora). O Brasil encontra-se agora na vanguarda da TV Digital.

(16)

Muitas foram as inovações produzidas. O middleware FlexTV, desenvolvido pelo consórcio coordenado pelo professor Guido Lemos, da Universidade Federal da Paraíba (UFPB), conta com recursos inéditos, que viabilizam aplicações com funcionalidades avançadas. Além de primar pela compatibilidade com outros padrões, através da estratégia de seguir as recomendações J.200, J.201 e J.202 da ITU (e consequentemente sendo aderente ao GEM) o FlexTV vai além na convergência, incorporando dispositivos móveis no seu escopo. A possibilidade de comunicação do FlexTV com telefones celulares cria uma nova maneira de se interagir com a TV. O celular pode se tornar o controle remoto do receptor, bem como ser utilizado para outras finalidades, o que possibilita o desenvolvimento de aplicações mais personalizadas e interativas.

A Torcida Virtual, desenvolvida no LAVID-UFPB, é uma aplicação que leva para a TV a experiência coletiva de assistir a um jogo de futebol no estádio. Telespectadores espalhados ao redor do Brasil, sentados em uma arquibancada virtual passam a ouvir não só o som da torcida presente no estádio, mas também dos torcedores que estão em casa assistindo o mesmo evento (de acordo com a disposição na “arquibancada”). Além disso, a aplicação ainda dá suporte a chat de texto e enquetes.

(17)

Para Saber Mais

Digital TV Introduction. Disponível em http://mhp-interactive.org/tutorial/dtv-intro/index.shtml The Java TV Tutorial. Disponível em http://mhp-interactive.org/tutorial/javatv/index.shtml Java TV API. Disponível em http://java.sun.com/products/javatv/

Relatórios dos consórcios do SBTVD. Disponível em: http://www.mc.gov.br/SBTVD.htm.

BECKER, Valdecir, MONTEZ, Carlos. TV Digital Interativa: Conceitos, desafios e perspectivas para o Brasil. EdUFSC, 2004.

SCHWALB, Edward M. iTV Handbook: Technologies and Standards. [S.l.]: Prentice Hal, 2003. Considerações Finais

Esse artigo teve como objetivo introduzir o leitor no universo de TV Digital, com foco na tecnologia Java, que desempenha o importante papel de ser a chave para níveis de interatividade mais avançados. Enquanto essas tecnologias não fazem parte do nosso dia-a-dia (mas acredite, elas farão) analisamos as alternativas tecnológicas disponíveis no mundo e quais são as expectativas para o Brasil. Que o debate prossiga e que mais tecnologias sejam desenvolvidas e agregadas ao universo de TV Digital.

Referências

LEITE, Luiz Eduardo Cunha; BATISTA, Carlos Eduardo Coelho Freire; SOUZA FILHO, Guido Lemos de; KULESZA, Raoni; ALVES, Luiz Gustavo Pacola; BRESSAN, Graça; RODRIGUES, Rogerio Ferreira; SOARES, Luiz Fernando Gomes. FlexTV – Uma Proposta de Arquitetura de Middleware para o Sistema Brasileiro de TV Digital. Revista de Engenharia de Computação e Sistemas Digitais, v. 2, p. 29-50, 2005.

LEITE, Luiz Eduardo Cunha; SOUZA FILHO, Guido Lemos de. Recomendações para o Modelo de

Referência: MIDDLEWARE (RFP 04/2004) FlexTV. Disponível em

http://www.mc.gov.br/SBTVD/pdf/middleware/Recomendacoes_MINICOM.pdf.

BECKER, Valdecir, MONTEZ, Carlos. TV Digital Interativa: Conceitos, desafios e perspectivas para o Brasil. EdUFSC, 2004.

SCHWALB, Edward M. iTV Handbook: Technologies and Standards. [S.l.]: Prentice Hal, 2003.

ITU-T Recommendation J.200, Worldwide common core - Application environment for digital interactive television services, 2001.

ITU-T Recommendation J.201, Harmonization of declarative content format for interactive television applications, 2004.

ITU-T Recommendation J.202, Harmonization of procedural content formats for interactive TV applications, 2003.

A Guide to Platform Harmonisation. DVB White Paper, Abril, 2004. Disponível em http://www.dvb.org/documents/whitepapers/wp05.platform%20harmonisation.final.pdf.

Laboratório de Aplicações de Vídeo Digital. Disponível em: http://www.lavid.ufpb.br. Java Technology in Digital TV. Disponível em: http://java.sun.com/products/javatv/.

(18)

DVB Multimedia Home Platform tutorials and information for interactive TV developers. Disponível em: http://mhp-interactive.org/.

XletView. Disponível em http://xletview.sourceforge.net.

Multimedia Home Platform. Disponível em: http://www.mhp.org. Digital Vídeo Broadcasting. Disponível em http://www.dvb.org.

GEM - Globally Executable Multimedia Home Platform. Disponível em:

http://www.mhp.org/mhp_technology/gem/. HAVi. Disponível em http://www.havi.org.

Referências

Documentos relacionados

No prazo de até um ano da data da compra, é obrigatória a devolução da embalagem vazia, com tampa, pelo usuário, ao estabelecimento onde foi adquirido o produto ou no local indicado

00 Código interno de anomalia secundária 10 Temperatura de ida aquecimento zona 1 01 Temperatura de ida aquecimento 11 Temperatura de ida aquecimento zona 2 02 Temperatura

nascidos ou adotados (recém-nascidos) na vigência deste Contrato, e neste incluído até 30 dias do nascimento, ficarão isentos do cumprimento de qualquer período de carência, desde

Q) exame admissional – trazer uma via do exame junto com os demais documentos.. O comprovante de conclusão de curso deverá ser expedido por instituição oficial de ensino

Os hábitos alimentares das crianças de seis a doze meses de vida foram similares àqueles desenhados para as crianças menores; notando-se, entretanto, o acentu- ado declínio do

Alguns estudos identificaram fatores relacionados à prática da amamentação na primeira hora de vida: tipo de parto, local de nascimento e de seguimento ambulatorial, uso de

geral, cada vez melhores e mais precisos em suas informações, embora saibamos ser esse um campo de estudos árido, com muitos senões e tantas outras influências de ordem linguística,

Quando questa funzione è attiva, la porta dello scomparto del frigo deve essere tenuta chiusa e nessun alimento deve essere lasciato