Vous êtes sur la page 1sur 6

Aplicações Java para TV Digital Interativa | Batuque TV Digital Página 1 de 6

Home Tour Blog Sobre Contato

Aplicações Java para TV Digital Interativa

Batuque TV Digital no
Facebook

Curtir

47 pessoas curtiram Batuque TV Digital.

Fabricio Miguel Rafael Arthur

Cesar Cristina João Regis

Curtir 5 7

1 public interface Xlet { ?


2
3 public void initXlet(XletContext ctx)

http://www.batuque.tv/ginga-j/aplicacoes-java-para-tv-digital-interativa 20/12/2011
Aplicações Java para TV Digital Interativa | Batuque TV Digital Página 2 de 6

4 throws XletStateChangeException;
5
6 public void startXlet()
7 throws XletStateChangeException;
8
9 public void pauseXlet();
10 public void destroyXlet(boolean unconditional)
11 throws XletStateChangeException;
12 }

Listagem 1: Interface do Xlet

Na Figura 1 podemos observar o ciclo de vida de um Xlet. A mudança de estado acontece após a
execução de algum dos métodos descritos na Listagem 1.

Figura 1: Máquina de estado do XLet

Alô Mundo em Java


Para relembrar, o exemplo consiste de um vídeo que fica executando até que o telespectador aperte a
tecla verde do controle remoto. Após isso, a aplicação apresenta a frase: “Alô Mundo!”.

Utilizaremos o ambiente de desenvolvimento já apresentado para Ginga-NCL e Ginga-J com a


máquina virtual Open Ginga.

Criando o Projeto
Antes de tudo, devemos criar um novo projeto no Eclipse. Para isso selecione a opção File > New >
Java Project no menu.

A tela da Figura 2 será exibida e nela você precisa:

1. escolher o Nome do Projeto;


2. inserir o caminho /home/openginga/openginga/gingacc/applications/Nome do Projeto;
3. selecionar a opção Use project folder as root for sources and class files;
4. clicar no botão Next
No exemplo, escolhemos AloMundoJava como o nome do projeto.

Figura 2: Tela inicial da criação do projeto

Na tela seguinte (Figura 3), é preciso selecionar a aba Libraries e adicionar os seguintes diretórios
externos (botão Add External Class Folder):

• /home/openginga/openginga/gingaj/classes
• /home/openginga/openginga/gingaj/jvm/build/linux-x86-suse/btclasses
• /home/openginga/openginga/gingaj/jvm/build/linux-x86-suse/basis_classes

Figura 3: Tela final para criação do Projeto

Agora é só clicar no botão Finish para criar seu novo projeto.

Implementando a aplicação

http://www.batuque.tv/ginga-j/aplicacoes-java-para-tv-digital-interativa 20/12/2011
Aplicações Java para TV Digital Interativa | Batuque TV Digital Página 3 de 6

Na Listagem 2 abaixo apresentamos a classe que implementa o Xlet do Alô Mundo Java. São
exibidos somente os seus métodos para que possamos ter uma visão geral. Nas listagens seguintes
iremos detalhar cada um deles.

1 package tv.batuque; ?
2
3 public class AloMundoXlet implements Xlet, UserInputEventListener {
4
5 private static String BASEDIR = "applications/AloMundoJava/";
6
7 private XletContext context;
8 private DTVContainer dtvcontainer;
9 private Plane plane;
10 private PlaneSetup planeSetup;
11 private Form form;
12 private Player player;
13
14 private void configureColoredKeys()
15
16 private void configurePlane()
17
18 private void configureContainer()
19
20 private void startPlayer()
21
22 private void startMedia()
23
24 public void initXlet(XletContext xletContext) throws XletStateChangeException
25
26 public void pauseXlet()
27
28 public void startXlet() throws XletStateChangeException
29
30 public void destroyXlet(boolean bool) throws XletStateChangeException
31
32 public void userInputEventReceived(UserInputEvent inputEvent)
33 }

Listagem 2: Classe que implementa o Xlet

Podemos ver na Listagem 3 que o método initXlet (linhas 1 a 7) invoca os seguintes métodos para
configurar o sistema:

• configureColoredKeys (linhas 10 a 16): adiciona o nosso Xlet como um Listener para receber
notificações quando o usuário pressionar alguma tecla colorida do controle remoto;
• configurePlane (linhas 18 a 29): recupera o plano gráfico da tela para que possamos adicionar
os componentes gráficos, como imagens e botões;
• configureContainer (linhas 31 a 45): inicializa o componente Form (container responsável por
armazenar os demais componentes) e o adiciona ao plano gráfico.

1 public void initXlet(XletContext xletContext) ?


2 throws XletStateChangeException {
3 this.context = xletContext;
4
5 configureColoredKeys();
6 configurePlane();
7 configureContainer();
8 }
9
10 private void configureColoredKeys() {
11 Screen currentScreen = Device.getInstance().getDefaultScreen();
12 UserInputEventManager manager = UserInputEventManager.getUserInputEventManager(currentScreen);
13
14 RemoteControlEvent anyColoredKeyTyped = new RemoteControlEvent(null, java.awt.event.KeyEvent.KEY_TYPED,
15 manager.addUserInputEventListener(this, anyColoredKeyTyped);
16 }
17
18 private void configurePlane() {
19 Plane[] planes = Device.getInstance().getDefaultScreen().getAllPlanes();
20
21 for (int i = 0; i < planes.length; i++) {
22 Capabilities cap = planes[i].getCapabilities();
23 if (cap.isGraphicsRenderingSupported()) {
24 plane = planes[i];
25 planeSetup = plane.getCurrentSetup();
26 break;
27 }
28 }
29 }
30
31 private void configureContainer() {
32 this.form = new Form();
33
34 form.setLayout(null);
35 form.getContentPane().setLayout(null);
36 form.setSize(planeSetup.getScreenResolution());
37
38 dtvcontainer = DTVContainer.getDTVContainer(plane);
39
40 dtvcontainer.setLayout(null);
41 dtvcontainer.setSize(planeSetup.getScreenResolution());
42
43 dtvcontainer.addComponent(form);
44 dtvcontainer.setVisible(true);
45 }

Listagem 3: Métodos para configuração inicial do Xlet

Já na Listagem 4, detalhamos o método startXlet (linhas 1 a 6) que inicia o Xlet. Invocamos os


seguintes métodos para a inicialização:

http://www.batuque.tv/ginga-j/aplicacoes-java-para-tv-digital-interativa 20/12/2011
Aplicações Java para TV Digital Interativa | Batuque TV Digital Página 4 de 6

• startPlayer (linhas 8 a 25): configura e inicia o player do vídeo. Destaque para as linhas 17 a 22
que captura o controlador responsável pelo redimensionamento e altera a largura e a altura do
vídeo a ser apresentado.
• startMedia (linhas 27 a 42): utiliza o componente Label para carregar a imagem correspondente à
tecla verde do controle remoto. Aqui não utilizamos o componente Button porque não queremos a
interação pela tecla OK.

1 public void startXlet() throws XletStateChangeException { ?


2 startPlayer();
3 startMedia();
4
5 dtvcontainer.repaint();
6 }
7
8 private void startPlayer() {
9 try {
10 player = Manager.createPlayer(new URL("file:///home/openginga/openginga/gingacc/
11 } catch (Exception e) {
12 e.printStackTrace();
13 }
14
15 Control[] controls = player.getControls();
16
17 for (int i = 0; i < controls.length; i++) {
18 if (controls[i] instanceof javax.tv.media.AWTVideoSizeControl) {
19 Dimension dimension = planeSetup.getScreenResolution();
20 ((AWTVideoSizeControl) controls[i]).setSize(new AWTVideoSize(new Rectangle(
21 }
22 }
23
24 player.start();
25 }
26
27 private void startMedia() {
28 Label labelBotaoVerde = new Label();
29
30 try {
31 labelBotaoVerde.setIcon(Image.createImage(BASEDIR + "resources/botao_verde.gif"
32 } catch (IOException e) {
33 e.printStackTrace();
34 }
35
36 labelBotaoVerde.setX(50);
37 labelBotaoVerde.setY(310);
38 labelBotaoVerde.setSize(new Dimension(25, 25));
39
40 form.removeAll();
41 form.addComponent(labelBotaoVerde);
42 }

Listagem 4: Métodos para iniciar o Xlet

Por fim, detalhamos o método userInputEventReceived na Listagem 5. Este método é definido na


interface UserInputEventListener e é invocado sempre que o usuário pressiona alguma tecla do
controle remoto.

No nosso caso, devemos verificar se a tecla verde foi pressionada (linha 5) para interromper o vídeo
(linhas 18 a 20) e a imagem (linha 22) exibidos e iniciar a apresentação da frase “Alô Mundo!” (linhas 6
a 16 e 23).

1 public void userInputEventReceived(UserInputEvent inputEvent) { ?


2 KeyEvent event = (KeyEvent) inputEvent;
3
4 switch (event.getKeyCode()) {
5 case RemoteControlEvent.VK_COLORED_KEY_1: {
6 Label labelAloMundo = new Label();
7
8 try {
9 labelAloMundo.setIcon(Image.createImage(BASEDIR+ "resources/aloMundo.png"
10 } catch (IOException e) {
11 e.printStackTrace();
12 }
13
14 labelAloMundo.setX(200);
15 labelAloMundo.setY(168);
16 labelAloMundo.setSize(new Dimension(388, 59));
17
18 player.stop();
19 player.close();
20 player.deallocate();
21
22 form.removeAll();
23 form.addComponent(labelAloMundo);
24
25 dtvcontainer.repaint();
26
27 break;
28 }
29
30 case RemoteControlEvent.VK_ESCAPE:{
31 try {
32 form.removeAll();
33 destroyXlet(false);
34 } catch (XletStateChangeException e) {
35 e.printStackTrace();
36 }
37
38 break;
39 }
40
41 default:
42 break;
43 }
44 }

http://www.batuque.tv/ginga-j/aplicacoes-java-para-tv-digital-interativa 20/12/2011
Aplicações Java para TV Digital Interativa | Batuque TV Digital Página 5 de 6

Listagem 5: Método para capturar interação do usuário com as teclas do controle remoto

Agora só precisamos inserir a nossa aplicação no arquivo applications.xml. Ainda não sabe como? O
nosso post Ginga-NCL e Ginga-J: Ambiente de Desenvolvimento explica detalhadamente a edição do
applications.xml.

Se você conseguiu acompanhar tudo corretamente até aqui, a execução da aplicação ficará
semelhante à Figura 4.

Figura 4: Aplicação Alô Mundo Java executando

A aplicação completa está logo abaixo. Bom proveito! Não esqueça de deixar um comentário
sobre o exemplo.

Attachments

1. Alô Mundo Java (57 KiB)

About The Author

Hildebrando Trannin

4 Comments

David Campelo 21/07/2011

Segundo o JAVADTV 1.3 (componente base para o Ginga-J) a engine Java do Ginga
deve ser capaz de executar _pelo menos_ duas aplicações em modo concorrente,

Reply

Hildebrando Trannin 28/07/2011

David, coloquei um link para a especificação do JavaDTV no início do post para


quem quiser maiores detalhes. Obrigado pela contribuição.

Reply

Anderson Kerlly 17/11/2011

Bom dia amigo

Eu estou querendo trabalhar este assunto no meu TCC. Você poderia mim informar
aonde posso obter mais informações e aonde eu poderia obter referências
bibliográficas para estudo?

Reply

Hildebrando Trannin 20/11/2011

Olá Anderson,

acredito que os sites dos laboratórios Telemídia (http://www.telemidia.puc-rio.br/)


e LAVID (http://www.lavid.ufpb.br/) te ajudarão com bastante informação sobre
os projetos e bibliografia relacionada à TV Digital.

Você vai trabalhar o Ginga completo ou só a parte do Ginga-J? Dependendo do


que for feito posso te indicar algumas outras referências.

http://www.batuque.tv/ginga-j/aplicacoes-java-para-tv-digital-interativa 20/12/2011
Aplicações Java para TV Digital Interativa | Batuque TV Digital Página 6 de 6

Reply

Leave a Reply

Name *

Email * (never pulished)

Website

Post Comment

© 2010-2011 Batuque TV Digital . Todos os direitos reservados.

http://www.batuque.tv/ginga-j/aplicacoes-java-para-tv-digital-interativa 20/12/2011

Vous aimerez peut-être aussi