Desarrollo de Juegos para Decodificadores SATVD-T

Anuncio
Desarrollo de Juegos para Decodificadores
SATVD-T
Mariana Bernagozzi, Lautaro Woites, Federico Balaguer
Lab. de Investigación y Formación en Informática Avanzada
Facultad de Informática - Universidad Nacional de La Plata
[mariana.bernagozzi|lautaro.woites
|federico.balaguer]@lifia.info.unlp.edu.ar
Resumen La puesta en marcha del SATVD-T pone a disposición de
los productores y transmisores de contenidos una nueva tecnologı́a que
permite transmitir programas de televisión y aplicaciones.
Ginga es la especificación de un middleware que da un ambiente uniforme
para el desarrollo de servicios y aplicaciones en un decodificador de TV
Digital.
Una de las áreas de aplicación que se propone para Ginga y TVDi son
juegos. Este tipo de aplicaciones suele tener demandas altas respecto a
recursos como procesador y memoria. Los decodificadores son equipos
con recursos limitados tanto en procesador como memoria.
Este trabajo resume los avances realizados en nuestro laboratorio en lo
que respecta al uso eficiente de los diferentes componentes del sistema
de televisión digital para el desarrollo de juegos.
1.
Introducción
El Sistema Argentino de Televisión Digital Terrestre está basado en la norma
Integrated Service Data Broadcasting (ISDB-Tb) en la que se definen formas
para transmitir contenidos digitales por aire. Los contenidos digitales pueden
ser programas de televisión y datos. Los datos pueden ser actualizaciones de
software, o pueden ser sistemas de archivos (con aplicaciones NCL/Lua) [3].
El Sistema Argentino de Televisión Digital Terrestre (SATVD-T) se perfila
como una posible plataforma para distribuir juegos considerándolos como un
medio de expresión, como son otros contenidos que distribuye la televisión [6].
Cordeiro et al presenta la implementación de un Framework Java de juegos como
una extensión a Ginga [7].
Este trabajo describe la experiencia de desarrollar juegos con otro lenguaje
soportado por Ginga: NCL/Lua [2].
2.
Módulos del SATVD-T
El Sistema Argentino de Televisión Digital Terrestre abarca una gama muy
amplia de disciplinas. Las próximas secciones describen tres aspectos importantes para el foco de este trabajo: Creación del Flujo de Transporte, Recepción del
Figura 1: Transport Stream
Flujo de Transporte y Ejecución de Aplicaciones NCL/Lua. El flujo de transporte o “Transport Stream” (TS) es una abstracción que encapsula todo aquello
que se puede transmitir en una frecuencia UHF.
2.1.
Creación del Flujo de Transporte
El Flujo de Transporte según la norma ISDB define una estructura en donde existe la posibilidad de transmitir más de un programa televisivo en forma
simultánea. A su vez, cada programa está dividido en diferentes servicios: video principal, múltiples audios, closed caption (CC), y carrousel de datos, entre
otros. La Figura 1 muestra un diagrama donde se representa un ejemplo de un
flujo de transporte.
En el diagrama se distinguen tres grupos definidos (de arriba hacia abajo):
flujo de transporte principal (MPEG2 TS), canal de metainformación (ISDB-Tb
SI) y, por último, los parámetros de transmisión (Parametros TMCC). Dentro del
flujo de transporte principal, se encuentran dos programas o subcanales (PMT1
y PMT2). En el diagrama, el PMT1 agrupa un video de alta definición (Video
HD), un canal de audio, y el servicio de teletexto (CC).
Generalmente los subcanales están definidos alrededor de un Video Principal
al cual una aplicación (Ginga) está generalmente asociada dentro de un carrousel
de datos[9,10,5], pero ésto no es mandatorio. La norma ISDB-T permite que
múltiples aplicaciones viajen en un carrousel. Más aún, un PMT puede contener
múltiples carrouseles de datos. En todo caso, los receptores son responsables de
listar las aplicaciones Ginga asociadas de una u otra manera a un subcanal (que
esta definido en un PMT data). La Figura 2 muestra un ejemplo del menú de
un decodificador mostrando varias aplicaciones disponibles.
2.2.
Recepción del Flujo de Transporte
Un flujo de transporte —como el mostrado en la Figura 1— es transmitido en
una frecuencia UHF. Los receptores sintonizan las frecuencias UHF y procesan
Figura 2: Menú de Aplicaciones Disponibles
estos Flujos de Transporte. De tal manera que en ocasiones cuando el televidente
cambia de canal, en realidad el receptor sólo debe mostrar el siguiente sub-canal
definido con otro PMT.
Un receptor puede estar incorporado en un televisor o estar implementado
como un dispositivo decodificador (set-top-box) que se conecta a un televisor o
computadora. La Figura 3 muestra una vista general de los módulos que comprende un decodificador ISDB-Tb.
La secuencia de eventos que ocurren cuando un decodificador recibe un
“Transport Stream” se describe a continuación. Se recibe un Flujo de Transporte (BTS) que viene desde la antena el cual ingresa en el Sintonizador. El
Sintonizador selecciona uno de los programas (representado como un PMT) y lo
envı́a al Procesador de TS. El Procesador de TS separa el audio y video (señal
tradicional de TV) de los paquetes que representan el Flujo de Datos. El audio y video son procesados y renderizados según la salida que esté activa en el
receptor. El Flujo de Datos se conoce como carrousel de datos debido a que se
transmite en forma cı́clica. Este flujo se utiliza para crear un sistema de archivos (también conocido como carrousel de objetos) el cual contiene programas
NCL/Lua y archivos de datos.
Las capacidades del receptor marcan el lı́mite de los juegos que se podrán
ejecutar. Por ejemplo, receptores basados en chipset ST 7101 cuentan con un
procesador de propósito general de entre 200 y 300Mhz, procesadores dedicados
para renderizar la señal de televisión (audio y video) y una memoria de 256
MBytes. La memoria es compartida entre los módulos de decodificación (audio
y video), un disco volátil (ram-disk) y memoria volátil de trabajo. Al final de
cuentas, la memoria de trabajo para Ginga es cercana a los 20 MBytes. Dentro
Figura 3: Esquema del Receptor ISDB-Tb
de la familia del chipset ST existen modelos que implementan OpenGL en forma
nativa, pero éstos son para decodificadores de alta gama y mayor costo.
2.3.
Ejecución de Aplicaciones NCL/Lua
Una aplicación NCL/Lua puede correr en pantalla completa o también puede
correr junto con el video principal, compartiendo la pantalla. Las aplicaciones
NCL/Lua tienen la posibilidad de procesar eventos de dos tipo: eventos de Flujo
de Transporte y eventos de Control Remoto (generados por el televidente).
La ejecución de aplicaciones NCL/Lua se basa en dos elementos fundamentales. Primero, la existencia de un carrousel de objetos que contiene las aplicaciones
a correr y los archivos de datos. Segundo, la señalización por medio de eventos
que llegan por el Flujo de Transporte (BTS). Los eventos le indican al receptor
como debe lanzar la aplicación NCL/Lua. Un posible escenario es cuando el receptor debe lanzar la aplicación de manera inmediata. Otro posible escenario es
cuando el receptor debe lanzar la aplicación transcurrido un cierto tiempo asociado con el video principal. Otro posible escenario es cuando el receptor debe
esperar que el televidente arranque la aplicación por sı́ mismo.
Los documentos NCL definen regiones (de la pantalla), recursos multimediales y eventos. La estructura de un documento NCL puede dividirse en tres partes
[11]:
Encabezado del Documento Esta sección describe la meta-data del formato
XML que sigue el resto del documento.
Encabezado del Programa Esta sección tiene tres partes: regiones, descriptores de medios y conectores
Cuerpo del Programa Esta sección describe la relación entre regiones, medias, eventos y los estados que tendrá la aplicación.
La Figura 4 muestra una porción de código NCL que maneja la recepción del
evento de botón rojo. Esta porción de código es parte de las aplicaciones que se
presentan en este trabajo en la Sección 3.
<link xconnector="onKeySelectionSet">
<bind component="background" role="onSelection">
<bindParam name="keyCode" value="RED"/>
</bind>
<bind component="redImg" role="start"/>
</link>
Figura 4: Código NCL que define el manejo del botón rojo
En la definición de un programa NCL, los scripts Lua son tratados como una
“Media” más. Ésto es, es un elemento del programa que puede ser iniciado y detenido. Además, scripts Lua pueden definir funciones como co-rutinas. La norma
ISDB-Tb especifica que los scripts Lua tiene acceso a los siguientes módulos:
Sistema de Eventos que permite manejar los eventos del sistema de manera
uniforme entre Lua y NCL. Se definen primitivas para enviar, recibir y crear
eventos.
Canvas que define una acceso a un layer transparente para dibujar texto y
elementos gráficos. Se definen primitivas de dibujo de elementos geométricos
simples y texto.
Además los scripts Lua tiene acceso a otros módulos definidos en ese lenguaje,
el más sobresaliente es posiblemente lua.sockets. Por otro lado, los scripts Lua
no pueden utilizar funciones de la librerı́a que modifiquen el estado persistente
del decodificador, por ejemplo un script Lua no deberı́a poder modificar un
archivo que sea parte del carrousel de datos o de la memoria interna (compact
flash) del decodificador.
3.
Juegos Desarrollados
Balaguer et al presenta el primer juego desarrollado en el grupo de TV Digital
del Lifia denominado: Flechas y Colores [4]. Éste es un juego casual que busca
ejercitar el uso de las teclas de color y las teclas de navegación (flechas).
Para validar las diferentes partes del middleware, se desarrollaron diferentes
tipos de juegos: se hicieron pruebas con juegos de lógica similares a Denki Blocks! [8] y Flood-It[1]; y también se implementaron juegos tradicionales como el
Snake, Sokoban y Tateti. Pueden verse capturas de pantalla de algunos de estos
juegos en la Figura 5.
En la mayorı́a de los juegos desarrollados, el rendering de gráficos, manejo de
eventos de teclado (control remoto) y la lógica del juego están implementados
ı́ntegramente en Lua. La aplicación NCL simplemente contiene una media Lua
que ocupa toda la pantalla. Para el rendering de gráficos se utilizaron primitivas
del módulo canvas y para el manejo de eventos del control remoto se hizo uso del
módulo event. Lua, al ser un lenguaje de script y debido a su sencillez, velocidad
y tamaño, es un lenguaje muy adecuado para codificar la lógica de los juegos.
(a) Flood-it!
(b) Snake.
(c) Sokoban.
(d) Tateti.
Figura 5: Capturas de pantalla de los juegos desarrollados.
Sin embargo, el módulo canvas es muy limitado, haciendo que sea engorroso el
desarrollo de juegos atractivos visualmente.
El juego Tateti no está desarrollado ı́ntegramente en Lua. La navegación
sobre el tablero está programada en NCL haciendo uso del atributo focusIndex,
links y conectores. El rendering gráfico se realiza en forma compartida entre NCL
y Lua: las medias gráficas están definidas y ubicadas usando NCL mientras que
con Lua se resuelve dinámicamente las imágenes que se deben mostrar en cada
caso. Para saber cual es el turno del jugador actual y para verificar la existencia
de un ganador se utiliza Lua.
Para juegos como Snake, que renderizan en forma continua, fue un problema
la ausencia de un mecanismo preciso para el manejo de eventos de tiempo. No
fue posible utilizar la función sleep dentro del manejador de eventos ya que la
misma no permitı́a que otros eventos sean procesados, por lo que se optó por
utilizar la función event.timer(ms, f), la cual dispara un temporizador que
realizará una llamada a la función f luego de ms milisegundos. Una desventaja de
la utilización event.timer es que la función que f no puede recibir parámetros.
En los juegos Denki Blocks! y Flood-It la pantalla es borrada y redibujada
completamente en cada turno del juego. En un principio, se utilizó esta misma
modalidad para los juegos Sokoban y Tateti, pero como el redibujado de la
pantalla es una operación costosa, los juegos no tenı́an una buena performance
cuando se corrı́an en un STB. Luego se optó por repintar solamente las áreas
de la pantalla que son necesarias en cada turno del juego y se logró una mejora
significativa en la performance.
Si bien los estándares de Ginga definen que la mayorı́a de las teclas del control
remoto puede ser utilizadas por las aplicaciones NCL/Lua, ésto no siempre es
ası́ en los set-top-boxes reales. En el caso de Sokoban, se habı́an configurado las
teclas numéricas del 1 al 7 para elegir el nivel a jugar, pero esta funcionalidad
tuvo que ser removida dado que algunos set-top-boxes no permitı́an usarlas, ya
que éstos terminaban cambiando de canal. Por lo tanto se utilizaron dos teclas
para el cambio de nivel: una para retroceder al nivel anterior y otra para avanzar
al nivel siguiente.
4.
Conclusiones
El desarrollo de juegos despierta el interés de diferentes actores de la comunicación, y la Televisión Digital no es una excepción. En ocasiones se presenta a
los juegos como una herramienta de T-learning. En otras, como una herramienta
de inclusión social. Aunque los juegos, al igual que la televisión, son, para una
gran mayorı́a, entretenimiento.
Sin importar la finalidad, la plataforma de ejecución es un determinante
importante de los juegos que podrı́an estar disponibles para los televidentes. En
la actualidad es posible desarrollar juegos con Ginga NCL/Lua. En estos juegos
Lua juega un papel muy importante aunque el gran limitante es la potencia de
procesamiento de los equipos receptores.
El Sistema Argentino de Televisión Digital Terrestre no es todavı́a una plataforma madura, al momento de escribir este artı́culo se están realizando transmisiones de prueba y ajuste. Esperamos que en el futuro junto con la madurez
del sistema también se hagan realidad las oportunidades que plantea hacia el
sector académico y productivo del desarrollo de juegos.
Referencias
1. Flood-It. http://floodit.appspot.com.
2. Associação Brasileira de Normas Técnicas. ABNT NBR 15606-2: GingaNCL para
Receptores Fixos e Móveis.
3. Associação Brasileira de Normas Técnicas. ABNT NBR 15606-3: Espicificação de
transmissão de dados.
4. F. Balaguer, A. Alvarez, F. Costa, and L. Woites. Aplicaciones Casuales de Televisión Digital con Ginga NCL/Lua. In Proceedings of the Argentine Simposium of
Technology, 2010.
5. S. D. J. Barbosa and L. F. Gomes Soares. TV Digital Interativa no Brasil se faz
com Ginga. JAI, 2008.
6. I. Bogost. Persuasive Games: The Expressive Power of Videogames. The MIT
Press, 2007.
7. D. Cordeiro Barboza and E. W. Gonzales Clua. Ginga game: A framework for
game development for the interactive digital television. In Brazilian Simposium on
Games and Digital Entertaintment, 2009.
8. Denki. Denki Blocks! http://www.denki.co.uk/games/denki-blocks/.
9. R. Ferreira Rodrigues and L. F. Gomes Soares. Produção de Conteúdo Declarativo
para TV Digital.
10. L. F. Gomes Soares, R. Ferreira Rodrigues, R. Cerqueira, and S. D. J. Barbosa.
Variable Handling in Time-Based XML Declarative Languages. In 2009 ACM
Symposium on Applied Computing, 2009.
11. L. F. Gomes Soares, R. Ferreira Rodrigues, and M. Ferreira Moreno. Ginga-ncl:
the declarative environment of the brazilian digital tv system. In Journal of the
Brazilian Computer Society, vol. 12; No. 4, Mars 2007; pp. 37-46. ISSN: 01046500, 2007.
Descargar