Home » Blog do Daniel

NCL 3.0 – Programando em Múltiplos Dispositivos

8 dezembro 2010 542 views 4 Comentários

O middleware em um sistema de Televisão Digital é a camada que provê suporte para o desenvolvimento de aplicações independentes de hardware e Sistema Operacional. Um dos requisitos essenciais a um middleware é prover o suporte para o desenvolvimento de aplicações para múltiplos dispositivos, ou seja, posso desenvolver uma aplicação que execute em minha TV Digital e em meu celular ao mesmo tempo, ou ainda melhor, posso controlar uma aplicação na TV usando meu celular ou outro dispositivo portátil, como um controle remoto.

O middleware Ginga através de seu subsistema Ginga-NCL provê este tipo de recurso. Vamos entender então como utilizamos o Ginga-NCL para desenvolver aplicações que executem em múltiplos dispositivos.

Para múltiplos dispositivos, podemos desenvolver aplicações que se cadastram em classes do tipo passiva e do tipoativa. Um dispositivo que se cadastra em uma classe do tipo passiva, ele é apenas capaz de exibir o objeto de mídia que lhe é passado (mapa de memória de vídeo ou amostras de áudio), ou seja, é apenas apresentado na tela do dispositivo o objeto de mídia relacionado, sem dar ao dispositivo o controle total da aplicação. Em uma classe ativa, o controle do dispositivo é passado para o objeto de mídia, permitindo ao usuário ter o controle absoluto da aplicação.

Na linguagem NCL 3.0, cada elemento <regionBase> pode estar associado a uma classe de dispositivos onde ocorrerá a apresentação. Portanto, se quisermos definir em qual dispositivo nossa aplicação irá executar, devemos identificar essa associação no elemento <regionBase>. Para fazer essa associação, devemos utilizar o atributo device, o qual pode conter as classes systemScreen(i)systemAudio(i).

As classes systemScreen(1) ou systemAudio(1) são reservadas como classes passivas e as classessystemScreen(2) ou systemAudio(2) como classes ativas. Por default, se o atributo não for especificado, nenhuma classe é associada, e a execução da aplicação ocorre no dispositivo o qual executa o documento.

– Classe Passiva

Tomemos como exemplo o  programa do Jô, exibido pela Rede Globo de Televisão. Jô Soares utiliza uma caneca durante o seu programa. Queremos que ao pegar a caneca para beber e a camêra focar o apresentador, apareça um ícone interativo na tela da TV em forma de caneca, informando ao usuário a existência de conteúdo interativo. Ao selecionar o ícone através de nossos celulares, a interatividade será carregada nos nossos dispositivos (celulares), interatividade a qual consiste em uma propaganda da caneca e um formulário para a compra da mesma. De forma passiva, o código em NCL ficaria assim:


<regionBase>
<region id=”rgProgramaJo” width=”100%” height=”100%” zIndex=”1″>
<region id=”rgIcone” top=”2%” left=”2%” width=”10%” height=”5%” zIndex=”2″/>

</region>
</regionBase>

<regionBase device=”systemScreen(1)”>
<region id=”rgFundo” width=”100%” height=”100%” zIndex=”1″>
<region id=”rgPropagandaCaneca” width=”80%” height=”100%” zIndex=”2″/>
<region id=”rgFormulario” right=”20%” width=”20%” height=”100%” zIndex=”2″/>
</region>
</regionBase>

Veja como é simples especificar que a minha aplicação será apresentada em múltiplas classes de dispositivos. Para isso, defini apenas um elemento (<regionBase device=”systemScreen(1)”>) para diferenciar a apresentação que será executada em múltiplos dispositivos, daquela que será apresentada na minha TV. Entretanto neste tipo de aplicação, devemos notar que se o ícone da caneca for selecionado, o vídeo da propaganda e o formulário de compra aparecerão em todos os dispositivos cadastrados como systemScreen(1). Para uma navegação independente em cada dispositivo, devemos adotar a próxima solução.

– Classe Ativa

Para um melhor controle de nossa aplicação, seria interessante criarmos um novo documento NCL (CelControle.ncl), o qual seria o responsável pelos níveis de interatividade em meu celular. Este novo objeto de mídia ao ser startado tomaria o controle dos dispositivos cadastrados na classe systemScreen(2).

Para que possamos passar o controle dos dispositivos para o novo objeto de mídia, devemos usar a variável globalservice.currentKeyMaster do elemento <media type=”application/x-ncl-settings”>. Para uso, devemos definí-la em um elemento <property>.

<media id=”variavelGlobal” type=”application/x-ncl-settings”>
<property name=”service.currentKeyMaster”/>
</media>

Para dar o controle de foco para o objeto de mídia CelControle.ncl, devemos usar o mesmo elo, o qual ele é iniciado (startado). A propaganda ao ser iniciada,  a variável global usada por nós recebe o identificador do objeto CelControle.ncl,  possibilitando então a navegação por teclas do aparelho de exibição.

<regionBase>
<region id=”rgPrograma” width=”100%” height=”100%” zIndex=”1″>
<region id=”rgIcone” top=”2%” left=”2%” width=”10%” height=”5%” zIndex=”2″/>

</region>
</regionBase>

<regionBase device=”systemScreen(2)”>
<region id=”CelControle” width=”100%” height=”100%” zIndex=”1″>
</regionBase>

<media id=”variavelGlobal” type=”application/x-ncl-settings”>
<property name=”service.currentKeyMaster”/>

</media>

<link id=”iniciaCelControle” xconnector=”onBeginSetStart”>
<bind role=”onBegin” component=”video”>
<bind role=”start” component=”CelControle”/>
<bind role=”set” component=”variavelGlobal” interface=”service.currentKeyMaster”>
<bindParam name=”var” value=”CelContole”/>
</bind>
</link>

@DanielCruz733

Para conhecimento:

ABNT NBR 15606-5 - Ginga-NCL para receptores portáteis – Linguagem de aplicação XML para codificação de aplicações.

Programando em NCL 3.0 - Desenvolvimento de Aplicações para o Middleware Ginga

“A dúvida é o principio da sabedoria”
Aristóteles

Popularity: 83% [?]

Related posts:

  1. Uma Breve Descrição do NCL 3.0
  2. Projeto WStripesInterativo – Desenvolvendo uma Aplicação Interativa pra TV Digital utilizando o Ginga-NCL
  3. Interatividade e Aplicações Interativas
  4. O Middleware Ginga
  5. A API JavaTV
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...
  • http://www.facebook.com/dennisjoelsdb Dennis Joel

    Oi Daniel, é muito interessante saber que Ginga-NCL poder ter interactividade em multiplos dispositivos, agora uma pergunta da pra fazer testes con emulador de Ginga-NCL Virtual Set-top box, porque na maquina virtual VMWare posso ter conexões por USB então sim eu tenho um ipod, Como que é pra sincronizar com os dispositivos que eu quero emular.

    Muito obrigado por sua resposta

    Dennis Joel

    [Reply]

    danielcruz733 Reply:

    Olá Dennis !

    Você pode emular a sua aplicação pra TVD móvel na própria máquina virtual. Você deve apenas restringir seu código ao perfil NCL para dispositivos móveis (como explicado no texto acima). Para testar basta executar na máquina virtual.

    Agora existe uma implementação protótipo para dispositivos móveis baseados na plataforma Android. Por ser um protótipo essa implementação não contempla todas funcionalidades previstas pelas normas do SBTVD (ISDB-Tb). Porém, aplicações puramente escritas em NCL são suportadas. Acesse o link abaixo e veja mais informações e faça o download. Se quiser compartilhar seus testes conosco é só entrar em contato.
    http://gingamobile.lprm.inf.ufes.br/

    Abraços !

    [Reply]

  • Robert

    Daniel, tem como postar os arquivos de código-fonte utilizados no exemplo? Não consegui fazer rodar… Grato!

    [Reply]

    Daniel Cruz Reply:

    Ola Anderson, este artigo nao trata de nenhum aplicativo completo. Os trechos de código que usei para exemplificar estao no proprio artigo.

    [Reply]