AN style="FONT-FAMILY: Verdana; BACKGROUND: white; COLOR: red; FONT-SIZE: 10pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
PAN>
: windowtext; FONT-SIZE: 10pt" lang=EN-US>
: 10pt">
Para que serve:
Enquanto aguardamos definições sobre Java no lado do cliente (Ginga-J), explorar e aprender um pouco mais de NCL e Lua, com o apoio do Ginga-NCL Virtual Set-Top Box.
Em que situação o tema é útil:
Para o desenvolvimento de aplicações interativas para TV Digital, além do Java, será muito útil também o conhecimento das linguagens NCL e Lua.
Conhecendo um pouco mais a TV Digital:
Como toda nova tecnologia, o início é repleto de indefinições e novos aprendizados. Para que o desenvolvedor de software esteja preparado para este novo cenário, este é o momento ideal para embarcar na TV Digital.
No artigo “Conhecendo a TV Digital” (Edição 66) foram apresentados alguns conceitos básicos da TV Digital e uma aplicação com interatividade local, em NCL e Java (Xlet). Neste artigo é apresentada uma aplicação com interatividade remota (cliente-servidor), com NCL e Lua no cliente (set-top box), e Java no servidor. Para emular a aplicação do exemplo é utilizado o Ginga-NCL Set-Top Box Virtual.
No artigo anterior foram apresentados vários conceitos sobre a TV Digital, o middleware Ginga e uma aplicação de exemplo simples, com interatividade local, isto é, sem a comunicação do set-top box com um servidor.
Neste artigo, apresentaremos um exemplo mais elaborado, com interatividade remota, simulando o pedido de uma pizza através da TV. O exemplo é executado no “Ginga-NCL Virtual Set-Top Box”, máquina virtual que contém a implementação de referência do middleware. O servidor é implementado em Java e o cliente nas linguagens Lua e NCL.
Devido ao fato do Ginga-NCL Virtual Set-Top Box não suportar a execução de código Java, não podemos codificar um Xlet no lado do cliente. A parte Java deste exemplo fica por conta apenas do servidor.
Por falar em Java no lado do cliente, temos novidades em relação ao Ginga-J (veja o quadro “JavaDTV”).
Exemplo
O código do exemplo deste artigo, disponível para download no site da revista, é uma aplicação cliente-servidor. O cliente utiliza as linguagens NCL e Lua, e se comunica com o servidor Java através de uma conexão via sockets. A aplicação simula o pedido de compra de uma pizza pela televisão. O cliente insere o número de seu telefone através das teclas 0-9 do controle remoto, e então confirma os dados apertando a tecla verde ou OK do controle. O servidor busca então o cadastro do cliente e retorna suas informações, tais como nome e endereço. A partir daí, o cliente pode então escolher opções de tamanho e sabor da pizza. Para finalizar, é requisitada a confirmação do pedido ao cliente. Se este for confirmado, a requisição é enviada ao servidor. Abaixo seguem instruções para instalação, configuração e execução do servidor e do cliente.
Servidor
O objetivo do servidor neste exemplo é simular um provedor de serviço, como o que será responsável por atender às requisições dos telespectadores que irão interagir com a aplicação deste provedor. No nosso exemplo, o provedor do serviço é a pizzaria.
O código do servidor está na pasta servidor, pacote pizzaserver. É disponibilizado o código-fonte da aplicação no diretório PizzaServer/src. Também está disponível o arquivo build.xml utilizado para compilação com o Ant.
O código já compilado encontra-se no diretório PizzaServer/dist. Para executar utilize o comando:
java -jar PizzaServer.jar
O servidor fica à espera de requisições do cliente, exibindo a mensagem "Pronto para receber requisições...".
Como não é o foco principal do artigo, este servidor é muito simples, mas em uma aplicação real teríamos uma arquitetura com um servidor de aplicações e banco de dados, por exemplo.
Cliente
Faça o download do Ginga-NCL Virtual Set-top Box, versão 0.9.28 (aprox. 320 Mb), que pode ser obtido a partir da comunidade Ginga do Portal do Software Público Brasileiro (seção Links). O Set-top Box Virtual Ginga-NCL é uma máquina virtual que contém o Ginga-NCL versão C++, que em termos de implementação de funcionalidades, é mais completa que o Ginga NCL Player mostrado no artigo anterior. Como já mencionado, esta versão do Set-Top Box Virtual não suporta a execução de Java (Xlets), mas em contrapartida, suporta a execução de scripts Lua.
Descompacte o arquivo fedora-fc7-ginga-i386-0.9.28.zip no diretório de sua preferência. A seguir são descritos os passos necessários para instalação da máquina virtual.
Para executar a máquina virtual, há três opções: VMware Player (Windows ou Linux), VMware Workstation (Windows ou Linux), ou VMware Fusion (Mac OS X). Os dois últimos são trials e podem ser obtidos em http://www.vmware.com/products/ws/ e http://www.vmware.com/products/fusion/, respectivamente. O VMWare Player é gratuito e pode ser obtido em http://www.vmware.com/products/player/.
No exemplo utilizaremos o VMWare Player. A partir da tela inicial do VMware Player, carregue o arquivo fedora-fc7-ginga-i386.vmx da máquina virtual.
Na inicialização da máquina virtual, o boot loader (grub) apresenta duas opções. A opção default, Ginga-NCL Development Set-top Box - v.0.9.28, carrega a máquina virtual.
A Figura 1 mostra a tela inicial apresentada após o boot do set-top box virtual. Esta tela mostra como carregar aplicações no set-top box virtual e como executá-las. Também é mostrado o IP da máquina virtual, que na figura aparece como 192.168.19.128, mas pode mudar na sua instalação, e a correspondência entre os botões que seriam do controle remoto e o teclado padrão do computador.
As teclas direcionais do controle remoto são mapeadas diretamente para as teclas direcionais do teclado. A tecla ENTER do teclado corresponde ao botão OK do controle remoto. Os botões menu e info correspondem às teclas F5 e F6 respectivamente. Já para os botões coloridos do controle remoto, a tecla F1 está associada ao botão vermelho, a tecla F2 ao botão verde, a tecla F3 ao botão amarelo, e a tecla F4 ao botão azul.
Figura 1. Tela inicial do Ginga-NCL Set-top box.
A máquina virtual deve ser acessada remotamente pelo protocolo SSH (Secure Shell). Os arquivos que compõem a aplicação são carregados na máquina virtual com a utilização dos protocolos SFTP ou SCP, que implementam a cópia remota segura de arquivos. Algumas ferramentas que implementam clientes destes protocolos estão disponíveis gratuitamente. Para sistemas Linux, pode ser utilizado o OpenSSH (www.openssh.org). Para Windows, estão disponíveis ainda o WinSCP e o SSH Secure Shell Client (http://www.colorado.edu/its/security/SSHSecureShellClient.exe). Além das citadas, pode ser utilizada qualquer outra de sua preferência. Seja qual for a ferramenta escolhida, o importante é que ela possibilite a conexão por SSH e a cópia remota de arquivos. Neste artigo é utilizada a ferramenta SSH Secure Shell Client, cuja instalação é trivial.
Ao executar o SSH Secure Shell Client, selecione no menu File a opção Quick connect. No campo Host Name insira o endereço IP da máquina virtual, e no campo User Name, o usuário "root", conforme mostra a Figura 2. Ao clicar em Connect, é requisitada a senha de usuário, que é "telemidia".
Figura 2: Inserção de dados para conexão remota por SSH com o set-top box virtual.
Ao conectar-se à máquina virtual, há a opção de salvar os parâmetros de sua conexão (endereço IP e usuário) em um profile, evitando a necessidade de inserir repetidamente os dados de conexão.
Com a conexão estabelecida, o próximo passo é transferir os arquivos da aplicação cliente para o set-top box virtual. A aplicação cliente faz parte do arquivo baixado do site da revista e está no diretório cliente.
Antes de executar a transferência, deve ser modificado o arquivo conexao.lua (Listagem 4) localizado na pasta cliente/lua/. O endereço IP da variável servidor deve ser o da sua máquina.
Ainda no SSH Secure Shell, selecione o menu Window>New File Transfer. É aberta uma nova janela na qual são mostrados os diretórios locais à esquerda e os diretórios internos à máquina virtual, à direita. Através dos ícones de navegação ou digitando diretamente, acesse o diretório /misc/ncl30 da máquina virtual. Selecione do lado esquerdo o diretório em que se encontra a aplicação cliente e arraste-o para a máquina virtual, obtendo o resultado da Figura 3.
Figura 3. Transferência de arquivos do módulo cliente para a máquina virtual.
Neste exemplo, a comunicação do módulo cliente na máquina virtual com o módulo servidor é feita por sockets. Para esta comunicação, o ideal seria fazer de acordo com o que está especificado na norma ABNT NBR 15606-2 (no momento de elaboração deste artigo, versão corrigida 2, de 22/08/2008), na descrição da classe de eventos “tcp”, (tópico “10.3.3.3 Classes de eventos”), que especifica: “O uso do canal de interatividade é realizado por meio desta classe de eventos...” ...