Suporte para desenvolvimento de aplicações multiusuário e multidispositivo para TV Digital com Ginga

Documentos relacionados
Middleware Ginga. Jean Ribeiro Damasceno. Escola de Engenharia Universidade Federal Fluminense (UFF) RuaPassoda Pátria, 156 Niterói RJ Brasil

comum apresentando, em caráter informativo, os três padrões anteriormente mencionados.

Sistema de acesso a dispositivos eletrônicos através da TV Digital interativa. Aluno: Rodrigo Brüning Wessler Orientador: Francisco Adell Péricas

Arquitetura do Sistema Brasileiro. Novos Recursos. Aplicações. Middleware

Norma de TV digital criada a partir do ISDB-T (Integrated Services Digital Broadcasting Terrestrial) e adicionando modificações Brasileiras

As múltiplas possibilidades do middleware Ginga

TV INTERATIVA SE FAZ COM GINGA

1.1. Objetivos e Contribuições

Roteiro. Módulo IV 3 horas. A arquitetura de um sistema digital de televisão Padrões de Middleware DASE MHP ARIB GINGA

3 Trabalhos Relacionados

Aplicativo para TV Digital Interativa de acesso ao Twitter

Middleware é um programa de computador que faz a mediação entre outros

FRAMEWORK PARA GERENCIAMENTO E DISPONIBILIZAÇÃO DE INFORMAÇÕES MULTIMÍDIA GEOLOCALIZADAS NA PLATAFORMA ANDROID

TV Interativa se faz com Ginga

Desenvolvimento de programas de TVDI explorando as funções inovadoras do GINGA-J

Tópicos. Visão geral do sistema Modelo de referência Algumas demonstrações Requisitos para um middleware Ginga Consideraçõesfinais

Middleware Ginga. Jean Ribeiro Damasceno. Escola de Engenharia Universidade Federal Fluminense (UFF) Rua Passo da Pátria, 156 Niterói RJ Brasil

Desenvolvimento de Aplicações Distribuídas

Televisão Digital Interativa se faz com Ginga

GINGAWAY UMA FERRAMENTA PARA CRIAÇÃO DE APLICAÇÕES GINGA NCL INTERATIVAS PARA TV DIGITAL

UM FRAMEWORK DE CONECTIVIDADE PARA APLICAÇÕES MÓVEIS EM JAVA ME

Introdução 15. representações definidas pelo MHEG-1, porém foi cancelado por falta de recursos.

5 Implementação 5.1 Plataforma 5.2 Arquitetura

Um estudo sobre localização de serviços sensíveis ao contexto para Televisão Digital Móvel

Curso online de Fundamentos em Android. Plano de Estudo

Desenvolvedor Android: Avançado. Plano de Estudo

Prof. Me. Sérgio Carlos Portari Júnior

ATIVIDADES PRÁTICAS SUPERVISIONADAS

Técnico em Informática. Web JavaScript. Profª Ana Paula Mandelli

1 Introdução. (Pérez-Luque, 1996). 1 Qualquer ocorrência no tempo de duração finita ou, na maioria das vezes, infinitesimal

5 Integração da Ferramenta de Ajuste com Exibidores de Conteúdo

NCL e Java. Aquiles Burlamaqui

DIGIMAN. WTB Tecnologia

Informática. Aplicativos de Áudio, Vídeo, Multimídia, Uso da Internet na Educação, Negócios, Emergências e outros Domínios. Professor Márcio Hunecke

Curso Online de E-commerce. Plano de Estudo

Introdução ao middleware de TV Digital brasileiro

1.1. Posicionamento e Motivação

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

contidos na descrição do serviço para localizar, contactar e chamar o serviço. A figura mostra os componentes e a interação entre eles.

TC 506 Mídia. Manual do Usuário - versão 1.0

ARIB. ARIB STD-B24, Version 3.2, Volume 3: Data Coding and Transmission Specification for Digital Broadcasting, ARIB Standard, 2002.

Integração de Aplicações para TV Digital Interativa com Redes Sociais

FlexTV Uma Proposta de Arquitetura de Middleware para o Sistema Brasileiro de TV Digital

em Redes IP Guido Lemos de Souza Filho DI CCEN UFPB Coordenador GTVD-RNP

Java RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Desenvolvendo, Executando e Controlando Aplicações de Televisão Digital Interativa no SBTVD

Revista FAMECOS: mídia, cultura e tecnologia ISSN: Pontifícia Universidade Católica do Rio Grande do Sul.

Componente de aplicação. Figura 1 - Elementos funcionais de uma aplicação sendo executados de forma distribuída

SENSIBILIDADE À LOCALIZAÇÃO PARA APLICAÇÕES

Objetos e Componentes Distribuídos: EJB e CORBA

DS-1100KI Teclado para uso em rede. Especificações técnicas

SI06 DIMENSÃO TECNOLÓGICA I

Principais conceitos de CORBA

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Manoel Campos da Silva Filho Mestre em Engenharia Elétrica / UnB 16 de novembro de 2011

Introdução aos Sistemas Operacionais. Subsistema de Entrada e Saída

Desde o surgimento dos primeiros jogos eletrônicos em meados dos anos 50, uma infinidade de aparatos eletrônicos foram desenvolvidos, principalmente

SISTEMAS DISTRIBUÍDOS

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Introdução a Linguagem

De Olho na Pista. Documento de Arquitetura. De Olho na Pista Documento de Arquitetura Data: 23/03/2013. AJA Software

Introdução à TV Digital

Quiz baseado em localização para Symbian OS

Puca Huachi Vaz Penna

Mariana Meirelles de Mello Lula Mestranda em Ciência da Computação

TV Digital. Análise de Sistemas de Comunicações 2017/II Maria Cristina Felippetto De Castro

ESPECIFICAÇÕES PARA MANUAL DE USUÁRIO ELSYS HOME

Desenvolvimento de Software I

HMI: UM MIDDLEWARE PARA OBJETOS DISTRIBUÍDOS SOBRE O PROTOCOLO HTTP

PLUG-IN SAGA EDITOR VISUAL DE APLICAÇÕES INTERATIVAS PARA TV DIGITAL BASEADO NO MIDDLEWARE GINGA

Manual SIGOSMS Aplicação de Gerenciamento e Envio SMS

Conceitos avançados de programação. Módulo 8 Programação e Sistemas de Informação Gestão e Programação de Sistemas Informáticos

Redes de Computadores I

Common Object Request Broker Architecture

Arquiteturas. capítulo

XX Seminário Nacional de Distribuição de Energia Elétrica SENDI a 26 de outubro Rio de Janeiro - RJ - Brasil

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

Desenvolvimento de Aplicações Distribuídas

Objetos e Componentes Distribuídos: EJB

Programação com Sockets

FUNDAMENTOS DE REDES DE COMPUTADORES Unidade 5 Camada de Transporte e Aplicação. Luiz Leão

6 Arquitetura do Sistema

Sistemas Distribuídos

Conferência Internacional Espectro, Sociedade e Comunicação IV. Rafael Diniz - Universidade de Brasília

2 Conceitos Preliminares

RPC e RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Ferramenta MVCASE - Estágio Atual: Especificação, Projeto e Construção de Componentes

Capítulo 7. A camada de aplicação

7 Ciclo de Vida das Aplicações NCL

SAGA Um editor visual de aplicações interativas para TV Digital

TV Digital Interativa: Oportunidade ou Sonho? TV Digital

Sis i te t mas a O perac a i c o i nai a s um p ouco c d a a h is i tó t ria i. a... SO His i t s ó t r ó ic i o

REDES DE COMPUTADORES

Banco de Dados? Banco de Dados Professor Vanderlei Frazão

Desenvolvimento de Aplicações Imperativas para TV Digital no middleware Ginga com Java

Transcrição:

ARTIGO Suporte para desenvolvimento de aplicações multiusuário e multidispositivo para TV Digital com Ginga Lincoln David Nery e Silva, Carlos Eduardo Coelho Freire Batista, Luiz Eduardo Cunha Leite e Guido Lemos de Souza Filho Introdução O presente artigo visa descrever as definições do middleware Ginga que permitem o desenvolvimento de aplicações de TV Digital multiusuário e multidispositivo através da conexão do receptor de TV com dispositivos móveis, em uma HAN (Home Área Network). O Ginga é o padrão de middleware do Sistema Brasileiro de TV Digital, que dá suporte à aplicações declarativas e procedurais, sendo compatível com as definições internacionais ITU J.200 [3], J.201 [4] e J.202 [5]. As definições da parte procedural do Ginga, o Ginga-J, é que incluem as APIs (Application Program Interfaces) que permitem o desenvolvimento de aplicações que podem utilizar recursos disponíveis nos dispositivos conectados ao receptor de TV Digital. Arquitetura do Middleware Ginga O universo das aplicações para televisão digital pode ser dividido em dois conjuntos: o das aplicações declarativas e o das aplicações procedurais. Uma aplicação declarativa é aquela em que sua entidade inicial é do tipo conteúdo declarativo. Analogamente, uma aplicação procedural é aquela em que sua entidade inicial é do tipo conteúdo procedural. Um 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 [4]. Um conteúdo procedural deve ser baseado em uma linguagem não declarativa. Linguagens não declarativas podem seguir diferentes paradigmas. Tem-se assim, as linguagens baseadas em módulos, orientadas a objetos, etc. A literatura sobre televisão digital, no entanto, utiliza o termo procedural para representar todas as linguagens que não são declarativas. Numa programação procedural, o computador deve obrigatoriamente ser informado sobre cada passo a ser executado [5]. Pode-se afirmar que, em 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 - como existem mais recursos disponíveis o grau 75

de complexidade é maior. A linguagem mais usual encontrada nos ambientes procedurais de um sistema de TV digital é Java[6]. O Ginga-NCL[2] (ou Máquina de Apresentação) é um subsistema lógico do Sistema Ginga que processa documentos NCL. Um componente-chave do Ginga-NCL é o mecanismo de decodificação do conteúdo informativo (NCL formatter). Outros módulos importantes são o usuário baseado em XHTML, que inclui uma linguagem de estilo (CSS) e intérprete ECMAScript, e o mecanismo LUA, que é responsável pela interpretação dos scripts LUA. O Ginga-J[1] (ou Máquina de Execução) é um subsistema lógico do Sistema Ginga que processa aplicações procedurais (Xlets Java). Um componente-chave do ambiente do aplicativo procedural é o mecanismo de execução do conteúdo procedural, que tem por base uma Máquina Virtual Java. Decodificadores comuns de conteúdo devem servir para as necessidades de aplicativos tanto procedurais quanto informativos de decodificação e apresentação de conteúdos comuns do tipo PNG, JPEG, MPEG e outros formatos. O Ginga-Core é composto por decodificadores e procedimentos comuns de conteúdo para obter conteúdos transportados em fluxos de transporte MPEG-2 (TS) e através de um canal de retorno. A arquitetura (ver Figura 1) e as facilidades da especificação Ginga devem ser destinadas à aplicação em sistemas e receptores de transmissão para transmissão terrestre (over-the-air). Além disso, a mesma arquitetura e facilidades podem ser aplicadas a outros sistemas de transporte (como sistemas de televisão via satélite ou cabo). Ginga-J A porção procedural do Middleware Brasileiro A Figura 2 apresenta o contexto em que a pilha do software Ginga-J é executada. O Ginga-J é uma especificação de middleware distribuído, que reside em um dispositivo Ginga (dispositivo que embarque o middleware Ginga um receptor de televisão digital), com possibilidade de possuir componentes de software nos dispositivos de interação (celulares, PDA, etc). O dispositivo Ginga deve ter acesso a fluxos de Figura 1 - Arquitetura em alto nível do middleware Ginga Figura 2 - Contexto do Ginga-J 76

vídeo, áudio, dados e outros recursos de mídia, que devem ser transmitidos através do ar, cabo, satélite ou através de redes IP. As informações recebidas devem ser processadas e apresentadas aos telespectadores [8][12]. O telespectador pode interagir com o dispositivo Ginga através de dispositivos de interação que podem conter componentes de software Ginga, de forma que o dispositivo de interação possa enviar informações para o dispositivo Ginga utilizando as funcionalidades providas na especificação Ginga, ou seja, estes componentes de software que podem ser instalados nos dispositivos de interação permitem que as funcionalidades dos mesmos sejam exploradas, utilizando funcionalidades da API Ginga-J, por aplicações nos dispositivos Ginga (receptores de televisão digital). Para que um dispositivo de interação possa ser utilizado ele deve estar registrado com o dispositivo Ginga e durante esse processo o dispositivo de interação pode receber o componente de software necessário para viabilizar a comunicação com o dispositivo Ginga. Como resposta à informação enviada pelo telespectador, o dispositivo de Ginga deve apresentar a saída de vídeo e áudio utilizando seu próprio monitor e alto-falantes ou os dos dispositivos de interação. Um único dispositivo pode ter capacidade de entrada e saída simultâneas. Por exemplo, um dispositivo de interação pode ser um PDA conectado à plataforma Ginga através de uma rede sem fio. Utilizando tal dispositivo de interação, um telespectador pode enviar comandos (eventos de usuário) à plataforma através do teclado PDA e os aplicativos da plataforma podem enviar conteúdo visual para ser apresentado na tela do PDA. Um dispositivo de interação pode também ter capacidades de captura e reprodução de som, de forma que o telespectador possa enviar fluxos de áudio e vídeo para o dispositivo Ginga, utilizando os dispositivos de interação que dêem suporte a essa funcionalidade. Vários telespectadores podem interagir com a plataforma Ginga, simultaneamente. Nesse caso, cada telespectador pode ter um dispositivo de interação e a plataforma deve distinguir os comandos enviados por e para cada dispositivo. O dispositivo Ginga pode também enviar informações para os transmissores de conteúdo quando da existência de um canal de retorno (conexão com a Internet, por exemplo). Inovações do Ginga-J Quando o governo brasileiro guiou as pesquisas no desenvolvimento do middleware de referência para a Televisão Digital Brasileira, ele determinou alguns requisitos importantes a serem preenchidos. Esses requisitos foram em sua maioria baseados em algumas particularidades do contexto social brasileiro. Por exemplo, apenas 32,1 milhões de pessoas têm acesso à Internet, o que representa 21% da população brasileira - o governo brasileiro definiu então que a televisão digital deveria ser uma ferramenta para a inclusão digital, uma vez que a televisão está presente em 91% dos lares brasileiros. Durante o desenvolvimento do middleware procedural de referência para o Sistema de TV Digital Brasileiro foram conduzidos muitos estudos sobre as principais soluções de middleware para TV digital adotadas mundialmente e, uma vez que a maioria das especificações estava baseada nas especificações do GEM[9] e do J.202, ficou claro que alguns requisitos não seriam alcançados, uma vez que o contexto europeu (que guiou o desenvolvimento do MHP[10]) é muito diferente do brasileiro. As funcionalidades inovadoras do Ginga-J, providas por suas APIs, permitem o desenvolvimento de aplicações avançadas, explorando a integração com outros dispositivos tais como telefones celulares, PDAs, etc. Essa integração foi motivada por um outro número: o Brasil correntemente possui 79,5 milhões de telefones celulares. Um telefone celular pode ser utilizado como um canal de retorno para o ambiente de TV, ou usado como um controle remoto, ou ainda como um dispositivo de interação (para responder a enquetes de maneira individual, 77

78 por exemplo), etc. Uma vez que essas funcionalidades são todas implementadas utilizando protocolos comuns tais como Bluetooth, USB, Wi-Fi, etc., o Ginga é compatível com diversos dispositivos. A API de Integração com Dispositivos A API de Integração de Dispositivos agrega ao Ginga funcionalidades relacionadas à maneira como é feita a interação dos usuários com o receptor de TV Digital A API integra as especificações do Ginga-J e foi completamente idealizada e especificada pelo grupo de trabalho responsável pelos estudos do middleware para o Sistema Brasileiro de TV Digital. Não existe nenhuma especificação de middleware no mundo [9][10][13][14] que ofereça funcionalidades equivalentes, sendo o Ginga o primeiro middleware que integra o receptor de TV Digital ao modelo HAN (Home Area Network). As funcionalidades inovadoras oferecidas pela API permitem o uso de diversos dispositivos de interação para comunicação com o receptor que hospeda o middleware Ginga e viabilizam que as aplicações interativas utilizem os recursos disponíveis nesses dispositivos. Tais dispositivos devem possuir um componente (módulo) do Ginga instalado uma pequena parte móvel do Ginga que é responsável por gerenciar o protocolo de comunicação entre a instância Ginga no receptor de TV digital e o componente do Ginga no próprio dispositivo. Dentre os possíveis dispositivos podemos citar celulares, PDAs, computadores portáteis e virtualmente qualquer outro dispositivo móvel com capacidade de processamento e comunicação; podemos imaginar controles remotos avançados compatíveis com o Ginga. Para que os dispositivos possam ser efetivamente utilizados pelo Ginga eles precisam estar registrados junto ao middleware. O registro deve ser feito pela própria interface do sistema, que deve permitir a conexão de dispositivos através de diferentes redes: Bluetooth, wi-fi, infra-vermelho, USB entre outras, ficando a critério do desenvolvedor do receptor decidir que meios de conexão estarão disponíveis. O registro junto ao middleware só é possível para dispositivos que já possuem o módulo Ginga instalado, porém o processo de instalação também pode ser realizado pela interface do sistema: o componente móvel do Ginga pode ser um Midlet num celular com tecnologia Java ou uma aplicação Symbian para dispositivos com sistema operacional Symbian, e o módulo móvel do Ginga pode ser automaticamente transferido do receptor de TV digital para o dispositivo onde o componente deve ser instalado. Uma vez que um dispositivo esteja registrado junto ao Ginga (conectado) sua interação com o mesmo pode ser feita de forma automática: os recursos presentes no dispositivo, como teclado, tela, microfone, câmera, alto-falantes e outros, estarão disponíveis para as aplicações através da API de Integração de Dispositivos do Ginga. Como exemplo de uso simples, podemos conectar um celular ao Ginga e passar a usar o seu teclado como controle remoto e dispor de suas funcionalidades básicas troca de canal, controle do volume do som, etc; em um outro caso, uma aplicação interativa em execução poderá dispor de uma segunda tela de exibição (a tela do celular), que pode ser utilizada para apresentar ao usuário informações adicionais às exibidas na tela da televisão. Os recursos dos dispositivos disponíveis para as aplicações dependem dos dispositivos conectados com o receptor caso um celular possua câmera, será possível, por exemplo, que uma aplicação requisite a captura de uma imagem de tal dispositivo. A API dispõe de métodos para consulta de quais recursos estão disponíveis em cada dispositivo conectado. A API de Integração de Dispositivos oferece a funcionalidade de identificar a origem de cada interação, relacionando-a a cada dispositivo individualmente. Essa característica viabiliza aplicações multiusuário. Uma aplicação simples que pode explorar essa característica seria um Quiz (questionário). Tal aplicação comumente espera a resposta do usuário

para cada pergunta por meio do clique no controle remoto (ou de qualquer dispositivo conectado, caso a aplicação esteja sendo executada no Ginga), e então pula para a próxima pergunta; ao final a pontuação do usuário é apresentada. No Quiz multiusuário, utilizando as APIs Ginga, é possível se identificar qual dispositivo originou cada resposta para o questionário, passando para as próximas perguntas apenas quando todos dispositivos individualmente respondessem a cada pergunta. Cada dispositivo representaria um usuário único da aplicação, e esta controla a pontuação de cada um desses usuários individualmente, e ao final do Quiz a pontuação de cada um seria exibida inclusive nas telas dos dispositivos. A Especificação A especificação já está disponível juntamente com a Norma Ginga-J, atualmente em consulta pública da Associação Brasileira de Normas Técnicas (ABNT). Apesar das funcionalidades avançadas presentes na API, ela é bastante simples, pequena e apresenta uma interface familiar às interfaces já utilizadas para a construção de Xlets algumas funcionalidades foram baseadas no Havi[7] e os desenvolvedores provavelmente não encontrarão problemas para usar a nova API e, assim, incrementarem suas aplicações. A API especifica apenas um pacote, o pacote br.org.sbtvd.interactiondevices, cujas classes componentes serão detalhadas a seguir: a) Classe GRemoteDeviceManager A classe GRemoteDeviceManager define um objeto que deve administrar todas as conexões com os dispositivos de interatividade registrados com o Ginga. Os métodos públicos disponíveis são: static GRemoteDeviceManager getinstance () Este método retorna um objeto GRemoteDeviceManager. GRemoteDevice[] getactivedevicelist() Este método retorna um array conten- do objetos GRemoteDevice referenciando cada um dos dispositivos de interatividade registrados com o Ginga. b) Classe GRemoteDevice A classe GRemoteDevice define um objeto que deve ser uma representação abstrata de um dispositivo de interação. Essa classe oferece métodos que possibilitam a recuperação de informações acerca dos dispositivos registrados (tipo do dispositivo, funcionalidades disponíveis, etc.), bem como explorar as funcionalidades disponíveis do mesmo (utilizar recursos de gravação de áudio, vídeo, captura de imagens, etc.). As constantes públicas estáticas presentes na classe GRemoteDevice são: int KEYBOARD_FACILITY de teclado de um dispositivo de interação. int SCREEN_FACILITY de tela de um dispositivo de interação. int SOUND_CAPTURE_FACILITY de captura de áudio de um dispositivo de interação. int SOUND_PLAYER_FACILITY de reprodução de áudio de um dispositivo de interação. int PICTURE_CAPTURE_FACILITY de captura de imagens de um dispositivo de interação. int VIDEO_CAPTURE_FACILITY de captura de vídeo de um dispositivo de interação. int VIDEO_PLAYER_FACILITY de reprodução de vídeo de um dispositivo de interação. 79

int DIALING_FACILITY de efetuar ligações telefônicas de um dispositivo de interação. Os métodos públicos da classe GRemoteDevice são: int getid() Este método retorna um inteiro representando o identificador de um dispositivo de interação. String getdescription() Este método retorna uma string (cadeia de caracteres) contendo a descrição do dispositivo de interação. int[] getfacilities() Este método retorna um vetor de inteiros onde cada item representa uma funcionalidade suportada pelo dispositivo. String getparameter(string name) Este método recebe uma string contendo um mnemônico para um parâmetro (característica) relacionada a um dispositivo de interação (por exemplo, a área da tela em pixels representado pelo mnemônico screen_area ) e retorna o valor correspondente em uma String (por exemplo 640x480 ). Estes parâmetros (e seus respectivos mnemônicos) dependem do dispositivo de interação em questão. boolean isactive() Este método retorna um valor booleano (verdadeiro ou falso) representando o estado do dispositivo: verdadeiro (true) se o dispositivo estiver ativo, falso (false) se o dispositivo estiver inativo ou não registrado com o Ginga. void addactionlistener(gremotedevicea ctionlistener lis) Este método registra o dispositivo em um Listener do tipo GRemoteDeviceActionListener (passado como parâmetro). void removeactionlistener(hremotedevic eactionlistener lis) Este método desregistra o dispositivo de Listener do tipo GRemoteDeviceActionListener (passado como parâmetro). int submitfile(java.io.file file) throws java. io.ioexception Este método envia um arquivo (passado como parâmetro) para o dispositivo. O método retornará um valor inteiro igual ao tamanho do arquivo em bytes em caso de sucesso ou -1 (menos um) em caso de falha. Este método pode lançar uma exceção do tipo java.io.ioexception. void startaudiorecording() throws IOException Este método inicia a captura de áudio no dispositivo. Este método pode lançar uma exceção do tipo java.io.ioexception. void stopaudiorecording() throws IOException Este método finaliza a captura de áudio no dispositivo. Este método pode lançar uma exceção do tipo java.io.ioexception. void startvideorecording() throws IOException Este método inicia a captura de vídeo no dispositivo. Este método pode lançar uma exceção do tipo java.io.ioexception. void stopvideorecording() throws IOException Este método finaliza a captura de vídeo no dispositivo. Este método pode lançar uma exceção do tipo java.io.ioexception. int takepicture() throws java. io.ioexception Este método dispara a captura de uma fotografia no dispositivo. Este médoto pode lançar uma exceção do tipo java. io.ioexception. void dialnumber(string number) Este método faz com que o dispositivo efetue uma ligação telefônica para o número passado como parâmetro em uma cadeia de caracteres (string). Este método pode lançar uma exceção do tipo java. io.ioexception. 80

org.havi.hscene gethscene() Este método retorna um objeto do tipo org.havi.hscene, relativo ao dispositivo, de forma que elementos de interface possam ser manipulados no objeto HScene de cada dispositivo de interação. c) Interface GRemoteDeviceActionListener A interface GRemoteDeviceActionListener deve conter métodos que devem ser implementados por qualquer objeto que deva ser notificado sobre eventos relacionados às atividades dos dispositivos de interação registrados com o Ginga. O método público que deverá ser implementado: void notifydeviceevent(gremoteevent event) Este método notifica o objeto que implementa a interface GRemoteDevice ActionListener acerca de eventos que ocorreram nos dispositivos, através da passagem de um objeto GRemoteEvent como parâmetro. d) Classe GRemoteEvent A classe GRemoteEvent descreve um objeto que representa um evento relacionado a um dispositivo de interação registrado com o Ginga. Este objeto encapsula dados relacionados ao evento. As constantes públicas estáticas presentes na classe GRemoteEvent são: int AUDIO_REQUEST está relacionado a uma requisição por áudio e contém o estado dessa requisição encapsulado. int VIDEO_REQUEST está relacionado a uma requisição por vídeo e contém o estado dessa requisição encapsulado. int PICTURE_REQUEST está relacionado a uma requisição por são: imagem e contém o estado dessa requisição encapsulado. int FILE_TRANSFER está relacionado a uma requisição por transferência e contém o estado dessa requisição encapsulado. int NUMBER_DIALED está relacionado ao estabelecimento de uma ligação telefônica (por parte do dispositivo de interação) e contém o estado dessa requisição encapsulado. int AUDIO_DATA possui dados de áudio encapsulados. int VIDEO_DATA possui dados de vídeo encapsulados. int PICTURE_DATA possui uma imagem encapsulada. int KEY_DATA possui um evento de teclas encapsulado. Os métodos públicos da classe GRemoteEvent Object getsource() Este método retorna um Object referenciando o dispositivo de interação (GRemoteDevice) que foi a fonte do evento em questão. int gettype() Este método retorna um valor inteiro de acordo com o tipo do evento em questão (de acordo com as constantes estáticas definidas na mesma classe). byte[] getdata() Este método retorna os dados relacionados ao evento em questão. String getdescription() Este método retorna uma cadeia de caracteres (String) relacionada a uma descrição do evento em questão. 81

boolean issuccessful() Este método retorna um valor booleano (verdadeiro ou falso) representando o estado do evento: se verdadeiro (true) o evento foi bem-sucedido, falso (false) em caso contrário. e) Classe GRemoteKeyEvent A classe GRemoteKeyEvent estende java.awt. event.keyevent, e é relacionada a eventos de teclas originados em dispositivos de interatividade. Sua utilização é feita da mesma maneira como nos eventos awt normais, bastando fazer um downcasting quando necessário. Os métodos públicos da classe GRemoteKeyEvent são: GRemoteDevice getsourcedevice() Este método retorna um objeto GRemoteDevice referenciando o dispositivo de interação que foi a fonte do evento em questão. f) Classe GRemoteUserEvent A classe GRemoteUserEvent estende org. dvb.event.userevent, e é relacionada a eventos do usuário originados em dispositivos de interatividade. Os métodos públicos da classe GRemoteUse revent são: GRemoteDevice getsourcedevice() Este método retorna um objeto GRemoteDevice referenciando o dispositivo de interação que foi a fonte do evento em questão. A forma como os eventos de usuário são capturados pela aplicação é idêntica à utilizada pelos padrões de middleware compatíveis com o GEM. Seja usando AWT ou a classe UserEvent do sistema DVB-MHP, os Xlets existentes precisam apenas fazer um downcasting para as classes equivalentes definidas na API e, assim, poderão identificar qual dispositivo gerou eventos para a aplicação. Para captura de eventos convencional, nenhuma chamada no código precisa ser alterada apenas para identificação do dispositivo teremos duas linhas de código adicionadas (com relação a uma aplicação GEM), como pode ser visualizado no código fonte de exemplo presente nesse artigo. Ainda na parte de dispositivos, a notificação de atividade dos mesmos é feita através do uso de ouvintes (listerners), o que facilita o trabalho do desenvolvimento já que essa estratégia é familiar aos desenvolvedores Java[11]. Conclusão O presente artigo descreveu as definições do middleware Ginga que permitem o desenvolvimento de aplicações de TV Digital multiusuário e multidispositivo através da conexão do receptor de TV com dispositivos móveis, em uma HAN (Home Area Network). Utilizando esses novos recursos, uma nova gama de aplicações em TV se torna factível, visto que a interatividade na televisão deixa de ser a experiência individual oferecida pelos sistemas de TV digital atuais e assume a coletividade que é inerente ao ambiente televisivo. 82 Impacto na adaptação de aplicações GEM Um forte requisito considerado durante a fase de especificação e, posteriormente nas primeiras implementações de referência, era a de deixar sua interface a mais familiar possível, além de garantir que as aplicações existentes possam vir a utilizar a API Ginga com pouco impacto na sua reengenharia poucas chamadas devem ser adicionadas ao código da aplicação. BIBLIOGRAFIA [1] SOUZA FILHO, Guido Lemos de; LEITE, Luiz Eduardo Cunha; BATISTA, Carlos Eduardo Coelho Freire. Ginga-J: The Procedural Middleware for the Brazilian Digital TV System. In: Journal of the Brazilian Computer Society. No. 4, Vol. 13. p.47-56. ISSN: 0104-6500. Porto Alegre, RS, 2007.

[2] SOARES, Luiz Fernando Gomes; RODRI- GUES, Rogério Ferreira; MORENO, Márcio Ferreira. Ginga-NCL: the Declarative Environment of the Brazilian Digital TV System. In: Journal of the Brazilian Computer Society. No. 4, Vol. 13. p.37-46. ISSN: 0104-6500. Porto Alegre, RS, 2007. [3] ITU Recommendation J.200:2001, Worldwide common core Application environment for digital interactive television services. [4] ITU Recommendation J.201:2004, Harmonization of declarative content format for interactive television applications. [5] ITU Recommendation J.202:2003, Harmonization of procedural content formats for interactive TV applications. [6] Sun Microsystems, Java TV API, <http://java. sun.com/products/javatv/>. [7] HAVi Level 2 Graphical User-Interface:2006, Specification of the Home Audio/Video Interoperability (HAVi) Architecture. HAVi, Inc. 2001. <http://www.havi. org>. [8] DAVIC 1.4:1998, Part 2 DAVIC Specification Reference Models and Scenarios, <http://www.davic.org>. [9] DVB Document A103 Globally Executable MHP (GEM) Specification 1.1. DVB Bluebook, 2007. <http://www.mhp. org/mhp_technology/gem/a103r1. tm3567r1.gem1.1.1.pdf> [10] TS 102 812:2003, Digital video broadcasting (DVB) multimedia home platform (MHP). [11] Sun Microsystems, Java Media Framework API (JMF), <http://java.sun.com/products/ java-media/jmf/index.jsp> [12] ARIB STD-B10:2004, Service information for digital broadcasting system. [13] ATSC Standard:2005, Advanced Common Application Platform (ACAP) [14] CableLabs:2005, OpenCable Application Platform Specification OCAP 1.0 Profile. Lincoln David Nery e Silva é aluno do curso de mestrado em Informática na Universidade Federal da Paraíba (UFPB). Trabalha há quatro anos com projetos de pesquisa acadêmicos em Vídeo e TV Digital. Atuou no projeto FlexTV, FlexTV, cuja junção com o MAESTRO originou o Ginga, padrão de Middleware adotado no Sistema Brasileiro de TV Digital. Atualmente é membro do Grupo de Trabalho de TV Digital da RNP e trabalha com o desenvolvimento do middleware Ginga para diversas plataformas - lincoln@lavid.ufpb.br Carlos Eduardo Coelho Freire Batista é aluno do curso de mestrado em Informática na Universidade Federal da Paraíba (UFPB). Trabalha há quatro anos com projetos de pesquisa em Vídeo e TV Digital. Atuou como gerente de Qualidade e Processo no projeto FlexTV, cuja junção com o MAESTRO originou o Ginga, padrão de Middleware adotado no Sistema Brasileiro de TV Digital. Atualmente é membro do Grupo de Trabalho de TV Digital da RNP e trabalha no projeto de redação da Norma Brasileira de TV Digital Terrestre (middleware procedural) - bidu@lavid.ufpb.br Luiz Eduardo Cunha Leite é graduado em Engenharia de Computação pela Universidade Federal do Rio Grande do Norte (UFRN) e mestre em Sistemas e Computação pela mesma universidade. Atualmente é aluno de doutorado na Universidade Federal de Pernambuco (UFPE). Foi o responsável pelo gerenciamento técnico do projeto FlexTV, que resultou na proposta do middleware Ginga, adotado como padrão no Sistema Brasileiro de Televisão Digital - leduardo@lavid.ufpb.br Guido Lemos de Souza Filho é professor do Departamento de Informática da Universidade Federal da Paraíba (UFPB). Concluiu o doutorado em 1997, na Pontifícia Universidade Católica do Rio de 83

Janeiro (PUC-Rio). É coordenador do Laboratório de Aplicações de Vídeo Digital da UFPB, onde são desenvolvidas aplicações nas áreas de televisão digital, ambientes virtuais colaborativos e servidores de vídeo. É um dos responsáveis pela definição do middleware Ginga, adotado como padrão no Sistema Brasileiro de Televisão Digital - guido@lavid.ufpb.br Laboratório de Aplicações de Vídeo Digital LAViD Departamento de Informática Universidade Federal da Paraíba (UFPB). 84