Minicurso Básico III
Aquiles Burlamaqui - UERN
Igor Rosberg - UFRN
Diogo Henrique - UERN

Introdução a TV
Digital Interativa

 Ginga-NCL
▪ NCL
▪ Lua
▪ XHTML
 Túnel do tempo
 O que muda?

Middleware para a
TVDI




Sistema Americano
Sistema Europeu
Sistema Japonês
Sistema Brasileiro
Ginga
 Ginga-J
▪ JavaTV, HAVI
▪ XletView

Mercado de TV
Digital
Conhecendo a TVDI
Tecnologias
19 de fevereiro chegaram as
cores na TV do brasileiro
Surgimento da TV no Brasil
2 de dezembro inicia-se a
transmissão
da TVDI no Brasil
Fases da História da TV no Brasil
Fase Populista
Fase Elitista
Fase de
Expansão
Internacional
Fase de
desenvolvimen
to Tecnológico
Fase da
Convergência e
da Qualidade
Digital
Fase de
Globalização e
da TV Paga

Imagem





HDTV
Tela no formato 16:9
MPEG-4
Duas vezes melhor do que
qualidade de DVD
Som
 Qualidade melhor que CD
 Surround 5.1
 HE-AAC (High Efficiency
Advanced Audio Coding)
 Sucessor do mp3
 Utilizado no IPod, Playstation 3,
Nintendo wii
Analógica
Digital
MELHOR SOM
MELHOR IMAGEM
APLICAÇÕES
Mobilidade e
Portabilidade
 Multiprogramação

 Diferentes programas,
mesmo canal

Interatividade
 Compras pela TV
 Votar em
enquetes/pesquisas
 Acesso a serviços
 ...

Hardware
 Display
 Set-top-box
 USB dongle 1-seg
 PSP e DS 1-seg
 Celulares 1-Seg

Largura
 6MHz

Analógico
 Tudo para o vídeo e o áudio em resolução padrão
▪ SDTV (4:3 = 640x480 / 16:9 = 704x480 )

Digital
 6 Mhz
 29,162 Mbps
▪ LDTV ( 240x320)
▪ HDTV(1920x 1080)
Conhecendo a TVDI

Organização do Sistema de TV Digital Interativa

Sistema Americano
 Sistema Brasileiro
 Mais antigo, 1998
 ATSC
 Início
das transmissões
 Sistema
Europeu
▪ Foco na transmissão em 2007
de 15
em HDTV  Utilizado em mais
 SBTVD-T  Sistema Japonês
países
 Middleware DASE
 Datando de 1999
 DVB ▪ HDTV
 ISDB
▪ Multiprogramação
▪ Multiprogramação
▪ Baseado no DVB
▪
Interatividade
▪ Interatividade
▪ Mobilidade aliado a
▪ Mobilidade
 Middleware
MHP
alta definição
 Middleware GINGA
 Middleware ARIB
Construindo aplicações para a TVDI
Envio e execução de
programas de TV Interativos
Aplicação
ITV Middleware (eg. MHP or DASE)
Real-Time Operating System
Device Drivers
Hardware
Áudio
Vídeo
Dados
Datagramas IP
Carrossel de Dados
MPEG
Conditional
Access

Linguagem declarativa;

Não define nenhum objeto de mídia em si;

Possui uma linguagem de script (LUA)


API NCL
APIs XHTML
 CSS
 DOM
 javascript


API NCL-LUA
API NCL-JAVA

Estrutura
 O que?
▪ Nós de Mídia
 Onde ?
▪ Região da tela onde irá tocar
 Como ?
▪ Características como volume, transparência, etc.
 Quando ?
▪ Em que momento ele irá tocar?
MEDIA

Nós de Mídias
AUDIO
IMAGEM
VÌDEO
TEXTO
MEDIA
CONTEXTO
VÌDEO
CONTEXTO
receita.html
i.jpg
O que ?
MEDIA
REGION
i.jpg
O que ?
MEDIA
REGION
i.jpg
O que ?
MEDIA
REGION
i.jpg
O que ?
Onde ?
MEDIA
REGION
DESCRIPTOR
AUDIO
DESCRIPTOR
- VOLUME
O que ?
MEDIA
Onde ?
REGION
DESCRIPTOR
Quando ?
IMAGEM
LINK
LINK
OnSelect
CONNECTOR
CONNECTOR
Start
O que ?
MEDIA
Onde ?
REGION
DESCRIPTOR
Quando ?
IMAGEM
LINK
LINK
OnSelect
CONNECTOR
CONNECTOR
Start

Há diversos ambientes de execução para a
linguagem NCL

Entre os mais usados estão os desenvolvidos pela
PUC-Rio, em JAVA e C++

Atualmente várias empresas privadas desenvolvem
ambientes de execução, sendo que várias delas
situam-se no nordeste

Usado para acessar as pastas do SO Fedorafc7-ginga-i386

Através dele são feitas as transferências de
arquivos do Sistema Operacional em uso para
a máquina virtual do Fedora

É um programa amplamente utilizado na
realização de conexões remotas

Simula um ambiente de terminal de controle

Através dele serão executados os comandos
necessários

Cabeçalho;

Uma seção de cabeçalho do programa (head)

O corpo do programa (body)

Uma porta que indica o ínico do programa

Conclusão do documento;

<?xml version="1.0" encoding="ISO-8859-1"?>

<ncl id="exemplo01">

Inicia com a tag <head> e termina com a tag
</head>

É na seção HEAD que se definem as regiões,
os descritores, os conectores e as regras
utilizadas pelo programa;

Inicia com a tag <regionBase> e termina com
a tag </regionBase >

Na base de regiões, são definidas todas as
regiões nas quais as mídias serão exibidas
<regionBase>
<region id=“rgTela” left=“0” top=“0” width=“800” height=“600”>
<region id=“rgTopo” left=“10” top=“10” width=“780” height=“30”/>
<region id=“rgVideo” left=“10” top=“50” width=“400” height=“250”/>
<region id=“rgDir” left=“420” top=“50” width=“150” height=“250”/>
</region>
</regionBase>
OBS: A região não define a associação com cada mídia
Essa associação é feita através dos
descritores.
particular.
rgTela: 0,0 (800,600px)
rgTopo: 10,10 (780,30px)
rgVideo: 10,50 (400,250px)
rgDir: 420,50
(150,250px)

Inicia com a tag <descriptorBase> e termina com a
tag </descriptorBase>

É através dos descritores que as mídias são
associadas à uma determinada região;

Definem também a forma como a mídia será
apresentada; EX: Volume, transparência etc.
<descriptorBase>
<descriptor id=“dVideo” region=“rgVideo”/>
</descriptorBase>
OBS: Ao se definir um descritor, é necessário definir a
região à qual ele estará associado. Toda mídia que
utilizar esse descritor estará associada à região
corresponde.

Inicia com a tag <connectorBase> e termina
com a tag </connectorBase>

Os conectores definem como os elos são
ativados e o que eles disparam.

Em NCL existe apenas um tipo de conector: o
conector causal.
<connectorBase>
<causalConnector id="onBeginAbortStart">
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="abort" max="unbounded" qualifier="par"/>
<simpleAction role="start" max="unbounded" qualifier="par"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginStart">
<simpleCondition role="onBegin"/>
<simpleAction role="start"/>
</causalConnector>
</connectorBase >

Uma forma de tornar prática a reutilização de
conectores é defini-los em um arquivo
externo semelhante a um .css agrupando
assim dezenas de conectores prontos para o
uso.

Exemplo:
<connectorBase>
<importBase alias="connectors" documentURI="connectorBase.ncl"/>
</connectorBase>

Inicia com a tag <body> e termina com a tag
</body>

O body é um caso particular de contexto,
representando o documento como um todo.

Nele são inseridos os nós (mídias), portas,
elos, âncoras etc.

Uma porta do body define o primeiro nó do documento a ser
apresentado.

Caso haja mais de uma porta no contexto body (fato não
muito comum), os nós mapeados por todas as portas são
iniciados em paralelo.


Exemplo:
<port id=“entryPoint” component=“mainVideo”>

As portas também são definidas como ponto de entrada dos
contextos aninhados.
<?xml version="1.0" encoding="ISO-8859-1"?>
<ncl id="nclClicks" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
<head>
<regionBase>
<region zIndex="0" left="0" top="0" width="550" height="400" id="rgTela">
<region zIndex="1" left="0" top="70" width="379" height="330"
id="rgVideo"/>
</region>
</regionBase>
<descriptorBase>
<descriptor id="dVideo" region="rgVideo"/>
</descriptorBase>
<connectorBase>
<causalConnector id="onBeginStart">
<simpleCondition role="onBegin"/>
<simpleAction role="start"/>
</causalConnector>
</connectorBase>
</head>
<body>
<port id="entryPoint" component="video1"/>
<media type="video/mpeg" id="video1" src="video1.mpg" descriptor="dVideo1“/>
<media type=“image/jpeg" id=“image1" src=“image1.jpeg" descriptor="dImage“/>
<link xconnector="onBeginStart">
<bind role="onBegin" component="video1"/>
<bind role="start" component="image1"/>
</link>
</body>
</ncl>

Os nós são referências para as mídias. O nó
funciona semelhante à tag <a> do html.
Sendo assim, os nós funcionam como links
que, quando ativados, disparam a exibição de
uma determinada mídia.

Os nós podem ser de dois tipos: Nó de
conteúdo (mídia) ou nó de contexto.

Os nós de conteúdo são definitos através da tag <media/>

Esse tipo de nó é associado a um tipo de mídia (txt, html,
jpeg, mpeg etc). Um nó de conteúdo é iniciado através da
tag <media>.

Os tipos mais comuns são: image/gif, image/jpeg,
image/bmp, video/mpeg, text/plain, text/html, audio/mp3

Exemplo:
<media type="video/mpeg" id="video1" src="video1.mpg" descriptor="dVideo1“/>
<media type=“image/jpeg" id=“image1" src=“image1.jpeg" descriptor="dImage“/>

Criação e exibição de um nó de conteúdo

Inicia com a tag <context> e termina com a tag </context>

Contextos ou nós de composição são utilizados para estruturar um
documento hipermídia. Os contextos podem ser aninhados, para
refletir a estrutura do documento e ajudar o autor a organizar
os segmentos do programa audiovisual interativo.
<link id="lSelectBotaoVermelho"
xconnector="connectors#onSelection1SetStartStopDelay">
<bind component="botaoVermelho" role="onSelection">
<bindParam name="keyCode" value="RED" />
</bind>
<bind component="ctxBasico" interface="pBasico" role="start" />
</link>
<context id="ctxBasico">
<port id="pBasico" component="videoPrincipal" />
<!-- nós e elos do contexto ctxBasico -->
<media type="video" id="videoPrincipal"
src="media/video_principal.mpg" descriptor="dVideo1" />
</context>

Através dos elos podemos sincronizar eventos em
um programa NCL

Um exemplo de sincronização é o início de um
determinado nó, imediatamente após o início ou
término de outro nó etc.

Os elos estão intimamente vinculados aos
conectores. Eles definem qual mídia estará
associada ao papél condicional de um conector e
que mídias sofrerão a ação através dos papéis de
ação
<link xconnector="connectors#onBegin1StartN" id=“iniciaTitulo">
<bind role="onBegin" component=“inicio"/>
<bind role="start" component="titulo"/>
</link>

Exibição de um nó de conteúdo
imediatamente após o término de outro nó
de conteúdo.

As âncoras são pontos de entrada para os nós
de mídia ou contextos. O objetivo de se
utilizar âncoras é utilizar segmentos de um nó
de mídia ou contexto, seja como origem ou
destino de elos.

Existem dois tipos de âncoras: A âncora de
conteúdo e a âncora de propriedade.

Define um segmento da mídia (intervalo de tempo
e/ou região no espaço) que poderá ser utilizado
como ponto de ativação de elos.

Uma âncora de conteúdo é definida como uma tag
<area> dentro da tag <media>.

Exemplo de âncora de conteúdo
<media type="vídeo/mpeg" id="video1" src="video1.mpg" descriptor="dVideo1">
<area id="aVideoLegenda01" begin="5s" end="9s"/>
<area id="aVideoLegenda02" begin="10s" end="14s"/>
<area id="aVideoLegenda03" begin="15s" end="19s"/>
</media>

Declaração e utilização de âncoras na
sincronização entre legenda e áudio.

Uma âncora de propriedade se refere a
propriedades de um nó, que podem ser
manipulados pelos elos.

Uma âncora de atributo é definida através da tag
<property> dentro da tag <media> ou <context>

Exemplo:
<media type="video" id="video1" src="media/video1.mpg" descriptor="dVideo1">
<property id="top" name="top"/>
<property id="left" name="left"/>
<property id="width" name="width"/>
<property id="height" name="height"/>
</media>

Utilização de âncoras de propriedade na
redimensionalisação

Lua foi planejada para ser utilizada por qualquer
aplicação que necessite de uma linguagem de script
leve e poderosa.

Lua é implementada como uma biblioteca, escrita
em C

Por ser uma linguagem de extensão, Lua não possui
a noção de um programa principal: ela somente
funciona embarcada em um programa cliente
anfitrião, chamado de programa hospedeiro ou
simplesmente de hospedeiro.

As novas bibliotecas são divididas em módulos
essenciais onde cada um exporta um conjunto de
funções de seu domínio.

Dois módulos serão abordados nesse minicurso.
 event
 canvas

Além dos módulos event e canvas, há também os
módulos persistent e settings que não serão
abordados nesse tutorial.




Uma linguagem de script leve
 Pequena, portátil, eficiente
Uma linguagem tipada dinamicamente
 O tipo da variável depende do valor armazenado
 Toda linguagem pode ter erro de “tipos” em tempo de
execução
Uma linguagem com gerência automática de memória
Pré-compilação em bytecodes
 Pode-se carregar arquivos compilados



Sintaxe convencional
print(“hello world”)
print“hello world”


Comentários de 1 linha -- (dois traços)
Comentários de blocos --[[ bloco ]]


Varáveis globais não precisam de declaração
Variáveis locais são declaradas com a palavra
chave local

8 tipos básicos
 nil – tipo do valor nil que é diferente de qualquer outro, é o valor








default das variáveis
boolean – true, false
number – double
string – array de caracteres, imutável
function – valor de primeira classe, significa que funções podem ser
armazenadas em variáveis, passadas como argumentos, retornadas
userdata – dados C arbitrários, manipulado através da API C
thread – threads independentes de execução
table – arrays associativos
Consulta do tipo da variável através da função type

Aritméticos
 +, -, *, /, ^

Relacionais
 <, >, <=, >=, ==, ~=

Operadores lógicos
 and, or, not
 Avaliação por curto-circuito

Concatenação
 ..




a=0
a, b, c = 0, 0, 0
a, b = b, a -- troca de valores
a, b, c = 0, 0 -- c recebe nil




Resultado da expressão {}
Qualquer valor como chave, exceto nil
Único mecanismo de estruturação de dados
Indexação na forma variável[índice] ou
variável.índice, quando o índice é uma string

for var = inicio, fim [, passo] do bloco end
 Numérico

for var {, var} in expressão do bloco end
 Genérico




while expressão do bloco end
repeat block until expressão
break ou return pode ser usado para
terminar o laço
if expressão then bloco {elseif expressão
then bloco} [else bloco] end

Retorno
 foo()
▪ Nenhum valor de retorno
 x = foo()
▪ Ajustado para 1 valor
 x, y = foo()
▪ Ajustado para 2 valores
 {foo()}
▪ Cria uma tabela com todos os valores retornados






Basic
String
Table
Math
IO
OS

Oferecem funções básicas
 print
 type
 setmetatable
 pairs
 error

Funções para manipulação de strings

Funções para manipulação de tabelas
 table.insert
 table.remove
 table.sort

Funções matemáticas
 math.sqrt
 math.sin
 math.log

Funções de entrada e saída
 io.open
 io.close
 io.read
 io.write

Funções associadas ao sistema operacional
 os.clock
 os.date
 os.execute




Manual
Wiki Lua-Users
Lista de Discussão
IRC

O modelo de execução de um NCLua é todo orientado a
eventos.

Isto quer dizer que para todos os usos do controle remoto,
sincronismos em documentos NCL etc, existem eventos
associados e é através deles que toda dinâmica de um NCLua
se faz presente.

O controle sobre esses eventos ora é feito pelo formatador
NCL que aciona o NCLua (que por sua vez recebe o evento e
o processa); ora é feito pelo NCLua que posta o evento
(sinalizando alguma mudança ao formatador).

Durante a inicialização do script, antes de se
tornar orientado a eventos, um NCLua deve
registrar pelo menos uma função de
tratamento de eventos.

A partir de então, qualquer ação tomada pela
aplicação é somente em resposta a um
evento enviado pelo formatador a essa
função tratadora.
--- example.lua --...
-- código de inicialização
function handler (evt)
...
-- código do tratador
end
event.register(handler) -- registro do tratador no formatador

No módulo event, estão definidas as
seguintes classes:
 ncl, key, tcp, sms, user

Serão abordadas as classes ncl e key

Em um documento NCL, relacionamentos
entre nós de mídia são descritos através de
elos, cujas relações de causalidade são
baseadas em ações e transições sobre seus
eventos.

Há três tipos de eventos NCL: apresentação,
seleção e atribuição.

Apresentação: Eventos de apresentação,
conforme o nome diz, controlam a exibição
do nó de mídia associado ao NCLua.

Eventos de apresentação podem estar
associados a áreas (ou âncoras) específicas ou
ao nó como um todo.

No caso de ações geradas pelo formatador, o
campo action indica a ação a ser tomada pelo
NCLua.
{ class='ncl', type='presentation', area='intro', action='start' }

Para transições geradas pelo NCLua, o campo
transition sinaliza a mudança de estado do seu
evento de apresentação.
{class='ncl', type='presentation', area='intro', transition='stops' }

Atribuição: Atribuições estão sempre associadas a
propriedades do nó de mídia ( no documento NCL).

Eventos de atribuição sempre devem possuir o
campo property com o nome da propriedade em
questão.

Exemplo:
{ class='ncl', type='attribution', property='counter', action='st
art', value='2' }

Seleção: eventos de seleção não são tratados pela classe
'ncl', estando esse suporte na classe de eventos ‘key’.

Usos do controle remoto geram eventos desta classe que são
recebidos pelo NCLua.

Neste caso a comunicação é unidirecional, uma vez que o
controle remoto é um dispositivo de entrada, apenas.

Exemplo:
{ class='key', type='press', key='0' }

Um NCLua tem a possibilidade de fazer
operações gráficas durante a apresentação
de uma aplicação.

A variável canvas do NCLua deve estar
associada à uma região.

Exemplos:
width, height = canvas:attrSize()
canvas:drawLine(0,0, width,height)
img = canvas:new('image.png')
canvas:compose(100, 100, img)
canvas:flush() -- atualiza a região do documento NCL
 Linguagem procedural baseada em Java
 APIs para a implementação de aplicativos para a TVDI










Pacotes da API Java TV
Pacotes DAVIC
Pacotes HAVI
Pacotes DVB
API de controle de tunning
API de fluxos de mídia
API de canal de retorno
API aderentes à especificação ARIB STD-B23
API de integração de dispositivos
API de ponte Ginga-NCL
 Xlets
public interface Xlet
{
public void initXlet(XletContext ctx) throws
XletStateChangeException;
public void startXlet() throws XletStateChangeException;
public void pauseXlet();
public void destroyXlet(boolean unconditional) throws
XletStateChangeException;
}
 XletView – Emulador Java TVw , Emulador Java
TV
 API Java TV
 javax.tv.graphics
 javax.tv.locator
 javax.tv.media
 javax.tv.net
 javax.tv.service
 javax.tv.util
 javax.tv.xlet
Momento para ganhar $....
[email protected]
Download

EPOCA - GINGA RN