Antes de terminar (1)

Anuncio
Antes de terminar (1)


det
Optimizar el tiempo para que la aplicación se lance
 Los usuarios son impacientes: no quieren esperar por la
TV
 Ver qué ficheros son necesarios para tener el primer
gráfico en pantalla
 Ajustar nuestra difusión para que se carguen juntos y
de forma rápida
 Decodificar imágenes es lento (Ej.: JPEGS a pantalla
completa)
 Realizar cargas asíncronas (por ejemplo de imágenes)
Hacer lo mismo en las principales transiciones entre
diferentes partes de nuestra aplicación
 !El difusor no sabrá lo suficiente sobre nuestra
aplicación para hacerlo por nosotros!
TV Digital Interactiva: Arquitecturas y servicios
89
Antes de terminar (2)

det
Comprobar que nuestra aplicación finaliza adecuadamente
 La especificación MHP da una lista de cosas que las
aplicaciones deben haces antes de terminar. Por ejemplo:
 Hacer que las threads creadas terminen
voluntariamente
 Parar (stop()), liberar ( deallocate()) y cerrar (close())
cualquier reproductor JMF que hayamos creado
 Parar (stop()) y destruir (destroy()) cualquier
ServiceContext que hayamos creado
 Vaciar las imágenes pendientes utilizando el método
Image.flush()
 No retrasar innecesariamente el método
Xlet.destroy()
 Hacer esto es ser considerado con las demás aplicaciones
del STB.
TV Digital Interactiva: Arquitecturas y servicios
90
Antes de terminar (3)




det
Un STB no es una plataforma de altas prestaciones
 No esperar prestaciones “PC”.
Fiabilidad y robustez son vitales
 En el entorno de consumo los usuarios no toleran
aplicaciones que se “cuelgan”
 Aplicaciones no fiables hacen que el STB parezca no
fiable
Recordar que nuestra aplicación puede ser detenida y
relanzada en cualquier momento
Los recursos son muy escasos, y podemos perderlos en
cualquier momento
 Pero también podemos recuperarlos en cualquier
momento
TV Digital Interactiva: Arquitecturas y servicios
91
Infraestructura de desarrollo de aplicaciones



det
Se puede empezar el desarrollo en cualquier ordenador
utilizando JDK o equivalente
 Se necesitan algunas APIs MHP (por ejemplo JavaTV)
 No se pueden probar fácilmente las interfaces de usuario
sobre un TV
Disponer de una versión de desarrollo de un STB MHP
 Permite hacer cosas mucho más próximas a la realidad
Para optimizar el tiempo de arranque de la aplicación:
 Entorno de generación de carruseles de objetos DSMCC
 Modulador/multiplexor MPEG para “alimentar” el STB
TV Digital Interactiva: Arquitecturas y servicios
92
det
Ejemplo de aplicación
TV Digital Interactiva: Arquitecturas y servicios
93
import org.dvb.ui.*;
javax.tv.xlet.*;
import java.awt.*;
org.havi.ui.*;
import org.havi.ui.*;
public class xlet implements Xlet
{
Public
class NuevaEscena extends HContainer {
//HScene:
logo;
window frame que
contiene
todos
los elementos
que se
añadan
 image
Cada
aplicación
debe
tener
una
clase que
extienda
el
HScene Escena;
interface {Java Tv Xlet
NuevaEscena
MainScene() EscenaNueva1;
public
logo
void
=
Toolkit.getDefaultToolkit().getImage(“logo.gif”);
initXlet(XletContext
ctx) throws
{ ()),
 Debe
contener código
paraXletStateChangeException
inicializar (initXlet
Escena
MediaTracker
= HSceneFactory.getInstance().getBestScene(null);
trk = new MediaTracker(this);
empezar= new
(startXlet
()), parar (pauseXlet()) y acabar
EscenaNueva1
trk.addImage(logo,0);
NewScene();
} try {trk.waitForAll();}
catch (Exception ex) {}
(destroyXlet())
public
System.out.println(“Got
void initXlet() throwsImage”);
XletStateChangeException {
} NuevaEscena1.setBounds(Escena.getBounds());
 Ya
tenemos un Xlet, ahora podemos añadir elementos a la
Escena.add(NuevaEscena1);
public
Escena.setVisible(true);
void paint
HScene
: (Graphics g) {
Escena.repaint();
g.setColor(new DVBColor(0, 0, 255, 128));
NuevaEscena1.requestFocus();
g.fillRect(80,
80, 480,
340);
 Nosotros
añadiremos
un componente simple basado en
} g.setColor(new Color(0, 0, 255));
HComponent
de HAVi en el que dibujaremos con
public
g.fillRect(100,
void pauseXlet()
100, 440, 300);
{ Escena.setVisible(false);}
g.drawImage(logo,
120, estándar
this);
funciones 120,
AWT
public
g.setColor(Color.white);
void destroyXlet(boolean unconditional) throws XletStateChangeException {
 El MediaTracker
pauseXlet();
g.setFont(new
Font(“Tiresias”,espera
0, 50)); a que llegue la imagen en el
HSceneFactory.getInstance().dispose(Escena);
g.drawString(“Hello
carrusel. World!”, 140, 300);
}
}
Ejemplo de aplicación DVB-J
TV Digital Interactiva: Arquitecturas y servicios
det
el
94
Descargar