Interfaz MHP -APIs y paquetes


APIs y paquetes incluidos

En esta sección se da una breve descripción de las APIs y paquetes considerados como imprescindibles dentro de una implementación mínima de la norma MHP. No se pretende dar una especificación completa de cada API, sino una idea aproximada sobre su funcionalidad y los motivos para incluirla dentro del diseño general del prototipo de Set-Top-Box.

Los paquetes a implementar serán los siguientes:

La API Xlet.

API de acceso al protocolo de transporte por difusión

API de listado y lanzamiento de aplicaciones

API de informacion sobre servicio.

API de filtrado de secciones MPEG-2.

APIs propias de la plataforma MHP.


API Xlet

El propósito fundamental de esta API es la de controlar el ciclo de vida de las aplicaciones DVB-J. Este control es una tarea imprescindible, con lo cual la inclusión de esta API es obligada. También se ocupará de dar a las aplicaciones un contexto de ejecución. Esta API supone que las aplicaciones implementan las interfaces adecuadas para la comunicación con el gestor de aplicaciones.

A la hora de ejecutar una aplicación, el gestor cargará la clase que implemente la interfaz Xlet. La API en general permite que el gestor de aplicaciones actúe sobre el ciclo de vida de las mismas, cambiando su estado. También permite a las aplicaciones informar al gestor sobre sus cambios de estado, así como solicitarlos. También permite dotar a las aplicaciones de un contexto de ejecución.

Figura de ciclo de vida de una Xlet


API de acceso al protocolo de transporte por difusión

El propósito fundamental de esta API es permitir a las aplicaciones el acceso a los datos contenidos en un carrusel de objetos. Consideramos que esta API es una parte imprescindible de la implementación, desde el momento en que las clases de las aplicaciones DVB-J (y sus datos asociados) van a llegar a través del carrusel de objetos.

El carrusel de objetos es la principal fuente de adquisición de datos del sistema. Esta API proporciona una interfaz de alto nivel que se permite a las aplicaciones abstraerse de la naturaleza de la red subyacente y acceder a los datos de forma similar a un sistema de ficheros tradicional.


API de listado y lanzamiento de aplicaciones

Esta API permite que una aplicación pueda controlar el ciclo de vida de otra, actuando siempre a través del gestor de aplicaciones. Servirá de base para la aplicación DVB-J que monitorice las aplicaciones presentes en el Set-Top-Box en un momento dado, ya que, por ejemplo, desde esta aplicación se podrá parar a otra que se estuviese ejecutando.

Esta API permite, entre otras cosas, que el usuario actuar sobre el ciclo de vida de determinadas aplicaciones, a través de otra que presente una interfaz gráfica y haga uso de la API. Incluye además una base de datos de las aplicaciones disponibles en cada momento en el Set-Top Box, con la información asociada que se puede presentar al usuario.


API de información sobre servicio.

Esta API proporciona acceso a la información sobre servicios presente en el flujo de transporte: servicios disponibles, hora de inicio, hora de final, etc. Es imprescindible para la elaboración de EPGs.

Se ha optado por la API dependiente del protocolo, es decir, la API DVB, por sencillez y por la mayor adaptación al flujo en sí.

La API de información sobre servicios independiente de protocolo queda postergada para una futura implementación, ya que se incluye dentro de JavaTV como una interfaz hacia las aplicaciones que se abstraen del protocolo subyacente, y da acceso a una cantidad de información menor. Puesto que las aplicaciones concebidas en el marco del proyecto son DVB-J, no tiene excesivo sentido que usen interfaces que se abstraigan de la norma DVB, o, al menos, esto no parece una característica esencial.

La implementación de esta API no va a ser completa, ya que sólo tendremos en cuenta las clases e interfaces que se refieran a elementos que se encuentren presentes dentro del flujo de transporte que podamos tener disponible. La intención inicial es no implementar métodos que accedan a elementos de los que no podamos disponer.


API de filtrado de secciones MPEG-2.

La funcionalidad de esta API es la de dar acceso a las aplicaciones a las secciones privadas del flujo MPEG-2. En la norma MHP se indica que ciertos paquetes y otras APIs harán uso de ella para el acceso al flujo, caso de acceso a carrusel o a información sobre servicios. De todas formas, en la norma se sugiere una implementación en código nativo, lo cual complicaría un poco su implementación y debería ser desarrollada al unísono con la creación del carrusel de objetos.


APIs propias de la plataforma MHP

Paquete org.dvb.lang

Este paquete contiene la clase DVBClassLoader.Se trata de una clase fundamental que nos permite cargar clases remotas de aplicaciones DVB-J y ejecutarlas en nuestra máquina virtual Java.

En su definición del cargador de clases, la norma MHP define un modelo de delegación, el mismo que el presentado para Java 1.2, este modelo permite delegar la búsqueda de las clases solicitadas por la aplicaciones DVB-J, en otro cargador de clases padre.

Este modelo facilita la tarea de búsqueda, ya que el cargador de clases desarrollado se encargará de la búsqueda, únicamente en el caso de que el cargador de clases padre fracase en la misma. Este modelo también permite desarrollar lo que se denomina una cadena de cargadores de clases, pudiendo extender el modelo de delegación a varios niveles.

La utilización de ambas posibilidades (delegación y encadenado de cargadores), permite disponer de cargadores de clases desarrollados mediante la unión de pequeños cargadores de clases especializados, con las ventajas que aporta esta especialización en cuanto a velocidad y rendimiento.

Debido a que las clases solicitadas por las aplicaciones pueden encontrarse en localizaciones no seguras, la norma MHP también define una serie de criterios de seguridad que deben seguirse para cargar las clase, como ya se ha comentado anteriormente en el documento, estos aspectos de seguridad no serán tratados en el desarrollo de este prototipo.

Estado de implementación: El paquete org.dvb.lang, básicamente, consiste en desarrollar un cargador de clases (ClassLoader) para el entorno DVB-J. El diseño ya está realizado y su implementación, utilizando las facilidades que ofrece Java 1.2 en este sentido, no entraña mucha complicación.


Paquete org.dvb.event

Este paquete contiene el mecanismo de gestión de eventos DVB que las aplicaciones DVB-J podrán solicitar (y recibir) aunque no tengan el foco de atención en el momento de producirse el evento. También permite que ciertas aplicaciones se registren para reclamar eventos en exclusividad.

Este paquete permitirá que las aplicaciones DVB-J puedan influir en el encaminamiento de los eventos, permitiéndoles elegir el modo en el que desean recibir los eventos, básicamente podrán elegir entre el mecanismo habitual de Java, o el mecanismo definido en este paquete.

Es una adaptación del marco de geston de recursos escasos definido en el anexo F de la norma DAVIC REFERENCIA, que define una serie de métodos e interfaces para la gestión de dichos recursos escasos. En el entorno del paquete org.dvb.event, estos recursos escasos se identifican con un conjunto de eventos de usuario, agrupados en lo que se denomina un almacén de eventos de usuario (event repository).

Su implementación es necesaria desde el punto de vista de que hay aplicaciones que podrán ser activadas por el usuario sin que tengan el foco, caso de las EPGs o el propio Home Navigator.

Estado de implementación: El paquete org.dvb.event está diseñado e implementado prácticamente en su totalidad. En estos momentos, se está y diseñando alguna aplicación sencilla de prueba.

La especificación de la API de eventos DVB-J, parece que no funciona correctamente y hay algún caso en el que las aplicaciones pueden no darse cuenta de haber perdido el acceso a un conjunto de eventos (almacén). Para mayor información se recomienda consultar en el foro DVB-MHP las preguntas relacionadas con los eventos DVB-J