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]