🔥 Apps, books, system as a service, podcast and more



Desenvolvimento de Aplicativos para TV Digital . Parte 4

    Desenvolver aplicativos para TV Digital, tem se tornado cada dia mais popular, tanto no Brasil quanto fora. No Brasil, a linguagem Ginga-NCL tem reinado mais do que outras linguagens, não quer dizer que o Ginga-J ou Java-TV estão fora do mercado; mesmo assim é bom ficar atento com todas as linguagens de software.
    Todos os passos anteriores mostro exemplos em Ginga-NCL, um passo a passo importante para você que está começando a desenvolver. Só a linguagem não faz com que o software desenvolvido apareça na TV, é necessário uma aparelhagem, ou seja, um Set-top box preparado, com framework instalado e muito mais.
    Tentei falar com alguns fabricantes e, ninguém conseguiu ainda me mostrar um set-top box preparado com Ginga-NCL, isto é, pronto e funcionando com conectividade.
    Está muito perto de ser lançado esse aparelho, porém, aos desenvolvedores; fiquem atentos e desenvolvam software para TV Digital. Essa foi só uma dica do que tenho visto junto ao mercado.

Aplicativo

    O exemplo mostrado no artigo, reproduz um título e um vídeo numa região da tela de forma sincronizada, com início e término da mídia.
    Utilizei um arquivo .HTML e um vídeo .MPG, os mesmos estão dentro de uma pasta chamada media; para ficar mais organizado com os arquivos do programa. A ferramenta para desenvolvimento é o Eclipse com o plugin instalado.

Primeiro Passo
Gerar um projeto no eclipse.


Referência 4-1

    Cliquei em file / new e Other... Automaticamente apareceu a tela de Wizard, posso escolher o tipo de documento que gostaria criar. (Referência 4-2)

 
Referência 4-2

    Cliquei na pasta NCL e no documento NCL Document, como mostrado na referência 4-2. O próximo passo foi clicar em Next. (Referência 4-3)

 
Referência 4-3

    No campo Container, coloquei “/exemplo02”, é apenas uma pasta específica do projeto, assim não fica diretamente ligado a outros projetos. No campo id, alterei o nome para exemplo02.ncl que, automaticamente apareceu o mesmo nome no campo file name.
    Isso porque um id é o mesmo nome do arquivo dentro do NCL.
    Depois de atribuir os valores, cliquei no botão Finish e criou o arquivo.




Codificação

<ncl id="exemplo02"
xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">

   <head>

      <regionBase>
         <region id="rgTV" width="1920" height="1080">
            <region id="rgTitulo1" left="200" top="116" width="600" height="40" />
            <region id="rgVideo1" left="200" top="156" width="600" height="768" />
         </region>
      </regionBase>

Code 4.1

    O primeiro passo na codificação foi, criar uma base de regiões com definições em tela onde, serão apresentadas as mídias ou arquivos; como no meu caso; um arquivo .HTML contendo o título do programa que está sendo passado.
    Uma região coloquei com o nome rgTitulo1 com left, top, width e height que significa a posição em tela, altura em tela, tamanho do vídeo em largura e tamanho do vídeo em altura, ou seja, verticalmente falando.    
    Uma observação importante, o rdTitulo1 deve estar com o atributo top menor do que o rgVideo1, para que possa ficar acima do vídeo. Não coloque acento nos atributos ou variáveis criadas.
    A área total é da minha região é de 1920 com o id rgTV.
    O próximo passo é, criar uma base de descritores que definem como as mídias são apresentadas. (Code 4.2)


      <descriptorBase>
         <descriptor id="dTitulo1" region="rgTitulo1">
            <descriptorParam name="border" value="none" />
         </descriptor>
         <descriptor id="dVideo1" region="rgVideo1">
            <descriptorParam name="soundLevel" value="1" />
         </descriptor>
      </descriptorBase>


Code 4.2
    É importante entender que as variáveis sempre se relacionam dentro do código. Para criar os descritores, criei variáveis começando com a letra “d”. As mesmas se relacionam com uma região criada anteriormente.
    O descritor dTitulo1 se relaciona com a região rgTitulo1; o descritor dVideo1 se relaciona com a região rgVideo1.
    Coloquei uma tag a mais no código, chamada de descriptorParam, coloquei a borda da região sem nada, ou seja, com o valor none.
    A mesma coisa fiz com o soundLevel, coloquei o valor igual a 1 para ouvir o som caso tenha o mesmo no vídeo. O próximo passo é, definir o comportamento dos elos, ou seja, dos relacionamentos. Preciso criar uma base de conectores; em outro arquivo. (Referência 4-4)
 

Referência 4-4

    Cliquei em file / new / Other..., em seguida escolhi o documento do tipo Connector Base Document. Coloquei o nome e cliquei no botão Finish. (Referência 4-5)


 Referência 4-5

    Coloquei o nome de ConnectorBase.NCL. Para iniciar o vídeo, gerei um id causalConnector chamado onBegun1StartN e outro onEnd1StopN.  (Code 4.3)



<?xml version="1.0" encoding="ISO-8859-1"?>

<ncl id="connectorBase"
xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ncl.org.br/NCL3.0/EDTVProfile http://www.ncl.org.br/NCL3.0/profiles/NCL30EDTV.xsd">

<head>

<connectorBase>

<causalConnector id="onBegin1StartN">
  <simpleCondition role="onBegin"/>
  <simpleAction role="start" max="unbounded" qualifier="par"/>
</causalConnector>


<causalConnector id="onEnd1StopN">
  <simpleCondition role="onEnd"/>
  <simpleAction role="stop" max="unbounded" qualifier="par"/>
</causalConnector>

</connectorBase>

</head>

</ncl>


Code 4.3

    Existe condições simples onBegin1StartN e onEnd1StopN. Os mesmos recebem como parâmetro e regra onBegin e onEnd.
    Para importar o arquivo novo criado dentro do exemplo02.ncl, preciso colocar o comando importBase. (Code 4-4)


     <connectorBase>
         <importBase alias="connectors" documentURI="connectorBase.ncl" />
      </connectorBase>


Code 4-4


    Depois de definir o conector base, fecho a tag de cabeçalho e começo o corpo do programa. (Code 4-5)


</head>

   <body>



Code 4-5

    Dentro do corpo, coloquei um ponto de entrada que, indica o componente do programa inicialmente. (Code 4-6)


<port id="pInicio" component="video1" />


Code 4-6

    Até o momento as mídias não foram definidas, dessa forma, elas não serão executadas. Na parte de mídias, defini o local dos arquivos de mídia e as associo com os descritores criados anteriormente. (Code 4-7)


<media type="text/html" id="titulo1" src="media/titulo1.html" descriptor="dTitulo1" />
<media type="video/mpeg" id="video1" src="media/video1.mpg" descriptor="dVideo1" />


Code 4-7

    Cada media type possui um tipo diferente. No final, coloquei o descritor relacionado anteriormente. A tag src é o endereço do arquivo localmente, um .html e outro .mpg.
    Estou quase acabando o programa para ser executado na TV Digital, porém preciso definir os ELOS de sincronismo simultâneo entre as mídias. Ao iniciar o vídeo, simultaneamente será iniciado o título1 atribuído logo no início do artigo. Para isso, uso o conector base. (Code 4-8).


      <link id="lVideo1Titulo1Start" xconnector="connectors#onBegin1StartN">
         <bind component="video1" role="onBegin" />
         <bind component="titulo1" role="start" />
      </link>

      <link id="lVideo1Titulo1Stop" xconnector="connectors#onEnd1StopN">
         <bind component="video1" role="onEnd" />
         <bind component="titulo1" role="stop" />
      </link>

   </body>
</ncl>


Code 4-8

    A tag link possui um atributo chamado xconnector onde indico o nome definido do connectors (a tag especificamente) separado por # (sharp ou jogo da velha) e o nome do comando.
    Esse nome pode ser o que você quiser, lembre-se que deve ser relacionado de uma forma correta, nos arquivos, mídias e elos.
    A tag bind é necessária para setar a regra (role) com o mesmo nome do arquivo connectorBase.ncl. Existem dois links, um com start e outro com stop.
    Para executar o programa, cliquei em RUN / RUN AS / 1 NCL Presentation. (Referência 4-6).

 

Referência 4-6.

    O emulador entra em ação. (Referência 4-7).
 

Referência 4-7.

    O resultado foi. (Referência 4-8)



Referência 4-8.

    Bom, fico por aqui e espero ter ajudado. Qualquer coisa, favor entrar em contato.
Mauricio Junior.

Sign up to our newsletter

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.

Top