domingo, 24 de fevereiro de 2008

tutorial de instalação do Java TV e XletView

você ouviu falar de TV Digital, descobriu que é possível desenvolver aplicações interativas para ela, pesquisou no Google e descobriu que existe uma API chamada Java TV e resolveu fazer seu trabalho de conclusão sobre o assunto.

você pesquisou um pouco mais e descobriu que existe o middleware Ginga, que será utilizado nos set-top-boxes (sim, vc já sabe que o nome do aparelho receptor da TV digital é esse) do padrão brasileiro de TV digital terrestre.

você já programa em Java e gostaria de desenvolver aplicações para o Ginga-J, mas como esta possibilidade não está disponível ainda, resolveu utilizar diretamente as bibliotecas JavaTV na sua IDE preferida e o emulador XletView para rodar seus Xlets.

assim como eu e você tivemos essa idéia, muitas outras pessoas estão tendo neste momento e terão no futuro.

como eu já passei alguns maus bocados até entender como a coisa funciona e conseguir desenvolver algo, resolvi escrever esse tutorial sobre como preparar o ambiente para compilar sua aplicação e colocar o seu primeiro Xlet para rodar.

eu vou descrever os passos que EU fiz, sei que existem outras ferramentas e maneiras de fazer a mesma tarefa, talvez mais produtivas, talvez melhores, mas do jeito que eu fiz funcionou... e fui aprovado no meu TCC, que era o objetivo maior : )

primeiro, baixe e instale as seguintes programas e bibliotecas:

- Net Beans IDE com JDK (Java Development Kit)
- JavaTV API 1.0
- XletView - o emulador (recomendo baixar os arquivos fonte)
- JMF (Java Media Framework) - para exibir vídeos

obviamente, você pode usar outra IDE de sua preferência, como o Eclipse.. mas como falei anteriormente, estou descrevendo os passos que eu segui.
ah, e instalei o Net Beans em português - o que me arrependi depois, mas nada que comprometa o sucesso da operação : ) portanto, vou descrever os ítens de menu em português, mas se você é ninja o suficiente para instalar em inglês, saberá traduzir.

tendo tudo isso instalado, o segredo agora está nos CLASSPATHs da sua aplicação.

- abra o Net Beans (ou sua outra IDE favorita)
- crie um novo projeto, defina onde ele será salvo, blablabla...
- referencie as seguintes bibliotecas no CLASSPATH do seu projeto:
  • - arquivo "javatv_fcs\javatv.jar"
  • - arquivo "xletview.jar"
  • - pasta "javatv_fcs\lib"
o local dos arquivos dependerá de onde vc instalou, no meu caso - porque instalei tudo na pasta "C:\Arquivos de programas\Java", estão em:
C:\Arquivos de programas\Java\javatv_fcs\javatv.jar
C:\Arquivos de programas\Java\xletview-0.3.6\xletview.jar
C:\Arquivos de programas\Java\javatv_fcs\lib

dica: utilizando o Net Beans, para adicionar clique com o botão direito em "Bibliotecas", depois "Adicionar Jar/Pasta", e aí selecione os arquivos e a pasta descritos acima.

o resultado deve ficar como na imagem abaixo:

você pode estar perguntando "por que adicionar o xletview.jar?"
porque é a maneira mais fácil de referenciar as bibliotecas do MHP e do HAVi, que estão contidas no pacote, e assim você poderá usar suas classes na aplicação e compilar sem problema nenhum.

- vamos pegar um atalho (afinal, pra que reinventar a roda?) e baixar um exemplo de código disponibilizado pela revista Mundo Java edição 17:
baixe aqui o exemplo

- agora é so compilar e gerar os arquivos .class

para executar o seu Xlet no emulador:
- abra o XletView
dica: abra via console, pois clicando diretamente no arquivo xletview.jar você não conseguirá ver o resultado de comandos como System.out.println() e mensagens de erro. para isso, execute o comando:

C:\WINDOWS\system32\java.exe -jar "C:\Arquivos de programas\Java\xletview-0.3.6\xletview.jar"
dica 2: crie um atalho para o comando acima, pra facilitar a sua vida ; )

- no menu "Applications", selecione "Manage applications":

- na janela que se abre, escolha "New Application":
- informe o nome para referência da sua aplicação, o caminho onde se encontra o arquivo .class gerado na compilação e o .class propriamente dito:
- salve e execute o Xlet. para executar, basta abrir o menu "Applications" e selecionar o nome que você deu anteriormente.

o resultado será o seguinte:
para cada tecla que você pressiona no controle remoto (lado direito da imagem) será exibido o nome do botão.

atingimos assim o objetivo desse tutorial, que era demonstrar os passos para instalação, configuração do ambiente e execução do seu primeiro Xlet.

agora você deve se aprofundar nos estudos para entender o ciclo de vida do Xlet, dominar a criação de elementos como botões e campos e uma série de outras características próprias de Xlets.

e o maior desafio: conseguir carregar seu Xlet em uma aplicação Ginga-NCL. se você conseguir, me ensine como : )

um abraço e sucesso! qualquer dúvida, entre em contato através de comentários ou pelo grupo Desenvolvimento para TV digital


importante: se você deseja copiar ou distribuir este conteúdo, utilize o arquivo disponibilizado em:
http://devdtv.googlegroups.com/web/Tutorial_JavaTV_XletView.pdf
mantendo a referência ao autor e ao site

27 comentários:

  1. Bem-humorado e esclarecedor o seu tutorial! :)

    Mas porque é um desafio carregar o XLet em um Ginga-NCL? Há um Wiki sobre isso no site do Software Publico.

    Uma correção: Ginga-J não é uma linguagem e sim parte do middleware nacional Ginga para TV digital.

    Carlos de Salles

    ResponderExcluir
  2. csallesneto,

    eu segui o tutorial do Wiki, mas rodando pelo NCL Player, simplesmente não acontece nada.

    já pela Máquina Virtual, ocorreram uma série de erros e a aplicação pendurava.

    eu não sei se é alguma classe que eu uso (uso as APIs HAVi e MHP) que não está disponibilizada na Máquina Virtual, mas segui todos os passos dos tutoriais da comunidade e não funcionou.

    quanto ao Ginga-J, realmente, foi uma falha de expressão. a linguagem é Java : )


    abraço,

    Marcos

    ResponderExcluir
  3. Olá Marcos,

    Assim como você profetizou em seu blog, sou mais um que se interessou sobre Java TV... :)

    Minha idéia era fazer meu trabalho de graduação interdisciplinar (TGI) - é assim que se chama no Mackenzie - com alguma coisa relacionada ao Java...

    A primeira idéia era fazer algo para dispositivos móveis, mas já existem alguns projetos e eu não queria ser repetitivo no assunto. Foi então que ouvi falar sobre a aplicabilidade da TV Digital e sobre a API Java TV e me interessei bastante, não só como TGI, mas para desenvolvimento profissional a um médio prazo!

    Dei umas pesquisadas no google, estou começando a coletar informações mas ainda não tive muito tempo para filtrar tudo o que achei... foi então que encontrei seu blog e achei muito interessante! Parabéns pelo trabalho!

    Enfim, estou decidido a fazer meu TGI em cima desse tema, minha idéia é apresentar uma teoria sobre TV Digital e JavaTV e além disso desenvolver algum aplicativo em JavaTV.

    Gostaria de poder contar com a sua ajuda na medida do possível, inclusive se você tiver sugestões de livros ou materiais... eu agradeceria muito!

    Fabio P. Pincello

    ResponderExcluir
  4. Fábio,

    fico muito agradecido pelo seu comentário, o objetivo desse blog e do grupo que criei é justamente trocar informações e experiências, e também reunir referências para quem está começando.

    Você pode começar explorando os links aqui do blog, na coluna ao lado.

    Vou postar ainda hoje a bibliografia que utilizei no meu trabalho, para ajudar vocês que estão começando.

    Abraço e sucesso!

    Marcos Henke

    ResponderExcluir
  5. gostei bastante do tutorial, segui exatamente o que você descreveu mas obtive alguns erros:

    1- tentei executar o xletview pelo terminal mas obtive o seguinte erro:
    Exception in thread "main" java.lang.NoClassDefFoundError: javassist/ClassMap
    e não executa, mas se eu rodas clicando 2x no jar do xletview ele roda normalmente.

    2- baixei o exemplo e tentei rodar mas só aparece os 2 labels e o fundo "choviscado" na aplicação, sem aquele relógio.

    estou procurando o motivo dos problemas mas ainda não achei nada :(

    ResponderExcluir
  6. maran,

    1- talvez seja alguma configuração de classpath. dê uma lida aqui:
    http://xletview.sourceforge.net/manual.html

    2- hehehe o relógio é um vídeo que eu uso de background. o "choviscado" é a imagem padrão do XletView.
    procure dentro da pasta do Xletview um arquivo de configurações, lá você pode alterar diversos parâmetros do Xletview.

    (desculpe eu não lhe passar informações mais precisas agora, como a sintaxe exata da linha de comando ou o nome do arquivo de configurações, pois neste computador não tenho o ambiente montado... mas espero ter ajudado)

    qualquer coisa, pergunte novamente!

    abraço,

    marcos

    ResponderExcluir
  7. marcos, obrigado pela ajuda, consegui resolver o problema aqui hehe

    estou começando o meu tcc e pensei em fazer alguma coisa relacionada a uma api gráfica para java tv.

    no que se refere a essa área (api's gráficas) o que o java tv oferece ?

    pensei em fazer alguma coisa utilizando o básico do java, garantindo alguma mobilidade entre plataformas.

    um abraço

    ResponderExcluir
  8. Maran,
    Estou com o mesmo problema seu aqui.

    1. Não consigo roda o xletview pwlo terminal dá o mesmo erro q o seu.

    2. é preciso executar o arquivo javatv.jar??? pq tb tá dando erro.

    3. quando abro o xletview dando um duplo clique e crio a aplic~ção ele naum roda nada , vc pode me ajudar e dizer como fez pra resolver seu pro??

    Obrigado

    ResponderExcluir
  9. Caro Marcos,
    Se eu quisesse que o meu também aparecesse o relógio eu teria que baixar a imagem, né isso??

    Pois tá funcionando tudo, só que a image de fundo ainda é o choviscado. é isso mesmo né??

    ResponderExcluir
  10. Emerson,

    sobre a exibição de vídeo, preparei este tutorial.

    sobre rodar o xletview pela console, informe o caminho completo:
    C:\WINDOWS\system32\java.exe -jar "C:\Arquivos de programas\Java\xletview-0.3.6\xletview.jar"

    Espero ter respondido suas questões.

    Abraço,

    Marcos Henke

    ResponderExcluir
  11. Olá Marcos,
    Agora sim.. consegui rodar o XletView da console. porém a forma foi a seguinte:

    Entrei no diretório onde de encontra o arquivo xletview.jar e executei a linha:
    java -jar xletview.jar

    e aí deu tudo certo.
    Obrigado pelas dicas e o tutorial sobre o vídeo.

    ResponderExcluir
  12. Olá, meu nome é Damiana e estou começando a trabalhar com desenvolvimento de aplicações para TV Digital. Estou estudando muito e tenho algumas dúvidas.
    Eu gostaria de saber se alguém tem algum material falando sobre a linguagem javatv em portugues. Só encontrei materias referentes á classes e métodos, apenas no site da sun e td em inglês e o meu ainda nao está está lá essas coisas.
    Por favor, quem tiver, envie por email por favor.
    Adorei esse blog.
    Um abraço.

    damiana.costa@yahoo.com.br

    Obrigada pessoal

    ResponderExcluir
  13. Como faço para rodar um xlet na tv mesmo e não no emulador ?

    ResponderExcluir
  14. Róberson,

    como desenvolvedor, você precisa encontrar um set-top-box de desenvolvimento (tarefa árdua), ou ter um laboratório de testes que gere o carrossel e transmita para um set-top-box a sua aplicação.

    Esqueça a hipótese de fazer um laboratório se vc tiver menos de 100 mil reais.

    E quanto ao set-top-box de desenvolvimento, se vc encontrar, me avise porque eu tb quero.

    Por enquanto, nós, pobres desenvolvedores que utilizamos software livre, temos que nos contentar com o set-top-box virtual disponibilizado na comunidade Ginga. Para exibir na TV? Conecte um cabo na saída de TV do seu computador, se ele tiver uma.

    Abraço,

    Marcos

    ResponderExcluir
  15. Amigo, compramos um decoder Aiko, mas não conseguimos carregar nenhum aplicativo. Você tem idéia de como se faz?

    ResponderExcluir
  16. Edu,

    primeiro lugar: o decoder tem o Ginga?

    se tiver, creio eu, falando assim, superficialmente, que você precisará de um gerador de carrossel no formato entendível pelo Ginga e um transmissor.

    andei sondando por aí, equipamentos de testes para TV Digital não saem por menos de R$80 mil.

    por favor, quem puder confirmar ou desmentir essa informação, poste um comentário aqui!

    abraço,

    Marcos

    ResponderExcluir
  17. Olá Marcus,

    Bom,depende do tipo de laboratório que vc está afim de montar.
    Na empresa em que eu trabalho, temos alguns receptores nos quais rodam nosso próprio middleware. Claro que aí, englobam alguns fatores, como por exemplo: TV, antena, repectores, etc.
    Dependo do que vc quer utilizar ou fazer, creio que não saia td isso não.

    Também não estou muito certa disso, falo apenas pelo q sei em relação onde eu trabalho.

    Att,

    Damiana

    ResponderExcluir
  18. Hey folks, em teoria o decoder tem Ginga(*), mas não roda o arquivos .ncl. O decoder ter um entrada ethernet e usb, gravamos o programa em um pen drive tentamos rodar pelo menu do decoder ... mas nada aconteceu. É esse o procedimento?
    *O fabricante diz que o Ginga está instalado ...

    ResponderExcluir
  19. Bom Dia Edu!

    Bom, até onde eu sei, ainda não se tem no mercado para uso, um Ginga que rode nos receptores. O primeiro será lançado agora em Julho. O que temos, são receptores que que transmitem qualidade de som e imagem. Como os receptores da Net. Porém neles, ainda não suportam muito bem aplicações interativas e muito menos, canal de retorno. Coisa que o Ginga que será lançado agora em Julho suporta e bem.
    Se te interessar dê uma olhada nesse site: www.tqtvd.com . É uma empresa especializada em TV Digital.

    Att,

    Damiana

    ResponderExcluir
  20. dam, fiquei confuso ...

    A Caixa Econômica fez uma apresentação usando o decoder da Aiko, para um simulador de empréstimo ....

    http://www.convergenciadigital.com.br/cgi/cgilua.exe/sys/start.htm?infoid=11597&sid=8

    pelo que li em outros blog, esse aplicativo estava em um pen drive.

    ResponderExcluir
  21. Não fique confuso não Edu, vou tentar explicar melhor:
    A Aplicação que a Caixa Econômica mostrou, realmente utiliza um pendrive e pq? PQ simplesmente o Ginga está dentro do pendrive, simples assim. Então é colocado o pendrive no receptor e é dado um boot pelo pendrive. Por isso que eu disse que ainda não foi lançado o Ginga nos receptores. Isso ainda está em desenvolvimento para seguir a Norma. Será lançado um, agora em meados de Julho.

    Clareou mais?

    Att,

    Damiana

    ResponderExcluir
  22. Pessoal,

    pelo jeito esse assunto de rodar aplicações nos set-top-box atuais está em alta essa semana.

    mas, sendo um pouco chato, este post não é o lugar mais apropriado para manter esta discussão.

    vou pedir a vocês que continuem no grupo de discussão ou na comunidade do Ginga, ok?

    links:
    Grupo DEVDTV
    Fórum Ginga

    peço para que façam apenas comentários relativos aos posts aqui, para nos organizarmos.

    Obrigado,

    Marcos Henke

    ResponderExcluir
  23. rs ... eh, essa discussão deu pano para manga, DamDam, continuamos no Grupo DEVDTV (http://groups.google.com/group/devdtv/browse_thread/thread/9aacfa8eda351c02) ? Preciso fazer uma apresentação dessa bicho funcionando ... me ajuda?

    ResponderExcluir
  24. Srs. onde neste link passado no tutorial esta o dowload do API do java Tv....??? só vi as especificações e referências de implementação ...mas nada de dowload ...
    vlaew

    ResponderExcluir
  25. Deyvidson,

    no tutorial há um link para: JavaTV API 1.0

    abra a página, procure na parte central por "Specification:", clique em Java TV API 1.0

    na página seguinte, marque a opção "I agree to the Software License Agreement" e prossiga com o download.

    ResponderExcluir
  26. Good Sir, could you please make a guide for implementing NetBeans, Java TV API, XletView and JMF in English so that I could understand PLEASE. For my project.

    ResponderExcluir
  27. Andreieli,

    use Google Translator, please:

    http://translate.google.com/translate

    try this:
    http://translate.google.com/translate?prev=hp&hl=pt-BR&u=http%3A%2F%2Fb4dtv.blogspot.com%2F2008%2F02%2Ftutorial-de-instalao-do-java-tv-e.html&sl=pt&tl=en

    I have no time to translate at the moment, sorry.

    (and PLEASE, be more polite. this blog is moderated, so, write and WAIT the comment publication.)

    ResponderExcluir