Control de medios en MHP Leire Urriza Oiz

  • Slides: 58
Download presentation
Control de medios en MHP Leire Urriza Oiz 22/09/2006 E. T. S de Ingenieros

Control de medios en MHP Leire Urriza Oiz 22/09/2006 E. T. S de Ingenieros de Telecomunicación .

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 2

Introducción: accediendo a contenidos (1/2) | Los contenidos accesibles por una aplicación MHP se

Introducción: accediendo a contenidos (1/2) | Los contenidos accesibles por una aplicación MHP se pueden dividir en: ü Contenidos DVB Streaming • Transport strems, servicios, elementary streams y eventos. ü Contenidos del Object Carousel (broadcast file system) • Archivos de audio o video. | Necesaria una estandarización de cómo el receptor accede a estos diferentes contenidos. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 3

Introducción: accediendo a contenidos (2/2) | Objetivo: crear referencias al Object Carousel útiles para:

Introducción: accediendo a contenidos (2/2) | Objetivo: crear referencias al Object Carousel útiles para: ü Diseñador de aplicaciones (que es el que escribe el código que crea estas referencias) ü Middleware (que es el que realmente las usa) | Primera aproximación: ü Usar una URL. Pero la clase java. net. URL fue diseñada pensando sobre todo en conexiones IP y no es fácil la adaptación para su uso en TV digital. | Solución: ü Para evitar los problemas de la clase URL, MHP utiliza el concepto de locator. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 4

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 5

Referenciando contenidos (Locators) (1/2) | Locator: ü Objeto que representa una referencia a un

Referenciando contenidos (Locators) (1/2) | Locator: ü Objeto que representa una referencia a un determinado contenido. ü NO define como se almacena esta referencia. Es el middleware el que elije el formato que mejor convenga y sea más eficiente para un tipo de locator dado. ü Pueden usar como representación interna una URL u otra representación que optimice las cosas (números, punteros…) 22/09/2006 E. T. S de Ingenieros de Telecomunicación 6

Referenciando contenidos (Locators) (2/2) | Ventajas de los locators: ü Facilitan el trabajo a

Referenciando contenidos (Locators) (2/2) | Ventajas de los locators: ü Facilitan el trabajo a los implementadores de middleware porque pueden almacenar cualquier información que necesiten sobre la localización de un contenido determinado. | Desventajas de los locators: ü Hacen que los diseñadores de aplicaciones deban trabajar con locators Necesaria una representación externa estandarizada para los locators (external form) que, a día de hoy, es un string representando una URL. | Ni la URL es el locator ni tampoco el locator es la URL. ü Son dos objetos distintos pero que refieren al mismo contenido. ü El locator puede usar como representación interna una URL pero no tiene porqué. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 7

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 8

Tipos de locators (1/10) | Tipos de locators ü En función del contenido al

Tipos de locators (1/10) | Tipos de locators ü En función del contenido al que refieren: • Locators para contenidos DVB Streaming • Locators para archivos • Locators para Video Drips ü En función de la clase que los implementa: • org. davic. net. Locator • javax. media. Media. Locator 22/09/2006 E. T. S de Ingenieros de Telecomunicación 9

Tipos de locators (2/10) Locators para contenidos DVB Streaming | Locators para contenidos DVB

Tipos de locators (2/10) Locators para contenidos DVB Streaming | Locators para contenidos DVB Streaming ü Sintaxis: dvb: //<on. ID>. <ts. ID>. <s. ID>[. <ctag>[&<ctag>]][; <ev. ID>][/<path>] • on. ID original network ID, que identifica al broadcaster o a la red que produce el contenido (no la red que actualmente está siendo difundida, si son diferentes) • ts. ID transport stream ID, que identifica un transport stream específico que la red esta difundiendo. • s. ID service ID, que identifica un servicio dentro del transport stream anterior. • ctag component Tag, que identifica un elementary stream específico que ha sido etiquetado (tagged) en el service information. • ev. ID event ID, que identifica un evento específico que forma parte del servicio. • path ruta hasta un archivo en el object carousel en el que está siendo transmitido el elementary stream. ü Solo los tres primeros elementos son necesarios Una URL en sistemas DVB debe referir siempre a un servicio. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 10

Tipos de locators (3/10) | Tipos de locators ü En función del contenido al

Tipos de locators (3/10) | Tipos de locators ü En función del contenido al que refieren: • Locators para contenidos DVB Streaming • Locators para archivos • Locators para Video Drips ü En función de la clase que los implementa: • org. davic. net. Locator • javax. media. Media. Locator 22/09/2006 E. T. S de Ingenieros de Telecomunicación 11

Tipos de locators (4/10) Locators para archivos (1/2) | Locators para archivos ü Aunque

Tipos de locators (4/10) Locators para archivos (1/2) | Locators para archivos ü Aunque el formato anterior también puede referir a un archivo, puede resultar una tarea un poco ardua ya que los locators dvb: // pueden referir a cualquier archivo en cualquier object carousel de cualquier servicio. ü Se pueden usar URL’s del tipo file: // seguida de la ruta absoluta hasta el archivo de interés. ü Problema: no se sabe dónde MHP va a montar el object carousel difícil conocer la ruta completa. ü Solución: obtener la URL de un archivo en el object carousel a partir del propio archivo. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 12

Tipos de locators (5/10) Locators para archivos (2/2) | Ejemplo (acceso a un archivo

Tipos de locators (5/10) Locators para archivos (2/2) | Ejemplo (acceso a un archivo de audio): //Se crea un objeto DSM-CC que refiera al archivo en el carousel //Destacar que la ruta es relativa al directorio root (Service Gateway) //de la aplicación DSMCCObject mi. Objeto. DSMCC; mi. Objeto. DSMCC = new DSMCCObject("audios/audio 1. mp 2"); //Se obtiene la URL llamando al método get. URL() URL mi. URL = mi. Objeto. DSMCC. get. URL(); //Una vez que se tiene la URL se puede crear un javax. tv. locator. Locator , //un javax. media. Media. Locator y a partir de él crear el player o bien //crear el player directamente. A modo de ejemplo se muestra la primera //opcion try{ Locator. Factory lf = Locator. Factory. get. Instance(); Locator mi. Localizador = lf. create. Locator(mi. URL. to. String()); } catch (Malformed. Locator. Exception e) { } 22/09/2006 E. T. S de Ingenieros de Telecomunicación 13

Tipos de locators (6/10) | Tipos de locators ü En función del contenido al

Tipos de locators (6/10) | Tipos de locators ü En función del contenido al que refieren: • Locators para contenidos DVB Streaming • Locators para archivos • Locators para Video Drips ü En función de la clase que los implementa: • org. davic. net. Locator • javax. media. Media. Locator 22/09/2006 E. T. S de Ingenieros de Telecomunicación 14

Tipos de locators (7/10) Locators para Video. Drips | Locators para Video Drips ü

Tipos de locators (7/10) Locators para Video. Drips | Locators para Video Drips ü Video drips: • Formato que provee un mecanismo eficiente, en cuanto a memoria, para mostrar varias imágenes similares. • Pequeños video clips MPEG-2 compuestos únicamente por : – Una I-frame que es la que primero se decodifica. – Una o varias P-frames que son decodificadas en base a la primera -frame. I ü Los datos se pasan a la API de control de medio a través de un array de bytes, por lo que el contenido debe estar ya en memoria realmente este formato no tiene un locator que indique de dónde se cargan los datos. ü Aún así existe un formato URL para crear locators a Video Drips dripfeed: //, que informa al locator acerca del formato del contenido pero sin necesidad de referir a un contenido específico. | En el apartado de ejemplos veremos esto con más detalle. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 15

Tipos de locators (8/10) | Tipos de locators ü En función del contenido al

Tipos de locators (8/10) | Tipos de locators ü En función del contenido al que refieren: • Locators para contenidos DVB Streaming • Locators para archivos • Locators para Video Drips ü En función de la clase que los implementa: • org. davic. net. Locator • javax. media. Media. Locator 22/09/2006 E. T. S de Ingenieros de Telecomunicación 16

Tipos de locators (9/10) En función de la clase que los implementa (1/2) |

Tipos de locators (9/10) En función de la clase que los implementa (1/2) | Gran variedad de clases que implementan a los locators pero afortunadamente hay dos jerarquías principales y están relacionadas: ü org. davic. net. Locator • Usada para todo menos para el “media control”. Tiene como clase padre a javax. tv. locator. Locator y refiere a cualquier contenido broadcast. • Subclases: – org. davic. net. dvb. Dvb. Locator para referir a transport streams y servicios en redes DVB. – org. dvb. locator. Frequency. Locator para referir a servicios transportados en transport streams que no tienen información de servicio. ü javax. media. Media. Locator • Sólo se usa para el “media control”. Lo usa JMF para referir al media clip que va a presentar, con lo que puede referir a un servicio DVB, a un componente del servicio, a un audio clip o a un video drip. • Subclase: – org. davic. media. Media. Locator para servir de puente entre JMF y el resto del sistema, es decir, entre JMF Media. Locator y los Java. TV Locator. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 17

Tipos de locators (10/10) En función de la clase que los implementa (2/2) |

Tipos de locators (10/10) En función de la clase que los implementa (2/2) | No es posible convertir un Media. Locator en un org. davic. net. Locator ni construir el segundo a partir del primero. Habrá que usar la external form del Media. Locator para crear un org. davic. net. Locator. | La existencia de la clase org. davic. media. Media. Locator en la segunda jerarquía hace posible que las aplicaciones puedan construir Media. Locators a partir de org. davic. net. Locators. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 18

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 19

Creación de locators | Existen dos propuestas para la construcción de locators: ü Creación

Creación de locators | Existen dos propuestas para la construcción de locators: ü Creación directa a partir de una URL • Aplicable a javax. media. Media. Locator y org. davic. net. Locator • Ejemplo: javax. media. Media. Locator localizador; localizador = new javax. media. Media. Locator("dvb: //1. 3. 1"); ü Creación indirecta a través de la clase Locator. Factory • Aplicable a javax. tv. locator. Locator, de hecho, instancias de esta clase sólo se pueden crear usando la clase javax. tv. locator. Locator. Factory. Esta clase proporciona un método create. Locator() que coge como argumento una URL. • Ejemplo: javax. tv. locator. Locator localizador; javax. tv. locator. Locator. Factory lf = javax. tv. locator. Locator. Factory. get. Instance(); localizador = lf. create. Locator("dvb: //1. 3. 1. cb"); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 20

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 21

Player, Control, Data. Source | MHP confía la tarea de decodificación y reproducción de

Player, Control, Data. Source | MHP confía la tarea de decodificación y reproducción de contenidos audio/video a la API JMF (Java Media Framework) | JMF tiene 3 conceptos principales: ü Player • Es el elemento principal de la API MHP • Responsable de decodificar y reproducir el media • Todos los players son subclases de javax. media. Player ü Control • Extensión del objeto player que permite añadir nuevas funcionalidades al player sin tener que crear una subclase. • Típicamente se usan para proporcionar control sobre elección de lenguaje, tamaño de video, intercambio de elementary streams… • Todos los controls son subclases de javax. media. Control ü Data. Source • Objeto encargado de proporcionar los datos media que el player va a decodificar. • Todos los players están siempre asociados a un objeto Data. Source ya que es imposible crear un player que no tenga un objeto Data. Source asociado • Todos los Data. Source son subclases de javax. media. protocol. Data. Source 22/09/2006 E. T. S de Ingenieros de Telecomunicación 22

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 23

La clase Manager | No se pueden crear instancias de Player y Data. Source

La clase Manager | No se pueden crear instancias de Player y Data. Source directamente hay que usar la clase Manager para crearlos. public class { public Manager static Player create. Player(URL source. URL); static Player create. Player(Media. Locator source. Locator); static Player create. Player(Data. Source source); public static Data. Source create. Data. Source(URL source. URL); public static Data. Source create. Data. Source(Media. Locator source. Locator); public static Time. Base get. System. Time. Base(); public static Vector get. Data. Source. List(String protocol. Name); public static Vector get. Handler. Class. List(String content. Name); } | Los métodos más interesantes de esta clase son: ü create. Data. Source() • Crea una nueva instancia de la clase Data. Source que traerá los datos desde el lugar referido por la URL o por el Media. Locator (según el método utilizado) ü create. Player() • Crea una nueva instancia de la clase Player que podrá ser usada para reproducir un media clip. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 24

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 25

Proceso de creación de un player (1/5) | Todo player está asociado siempre a

Proceso de creación de un player (1/5) | Todo player está asociado siempre a un objeto Data. Source por lo que parece lógico pensar que los players se crean a partir de Data. Sources. Sin embargo, de acuerdo a la clase Manager, existen otros mecanismos: ü A partir de una URL ü A partir de un Media. Locator en los que la clase Manager creará primero el Data. Source del tipo apropiado. | También es posible que una aplicación no cree un player nuevo sino que obtenga el player del servicio actual en el que se está ejecutando. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 26

Proceso de creación de un player (2/5) | Ejemplo 1: Creación de un nuevo

Proceso de creación de un player (2/5) | Ejemplo 1: Creación de un nuevo player a partir de una URL: ü Obtener una instancia de la clase URL para poder pasarla como argumento al método create. Player(). Normalmente invocando a métodos del tipo get. URL() o bien to. URL(). • get. URL() DSMCCObject mi. Objeto. DSMCC; mi. Objeto. DSMCC = new DSMCCObject(“audios/audio 1. mp 2”); URL mi. URL = mi. Objeto. DSMCC. get. URL(); • to. URL() File archivo = new File(“audios/audio 1. mp 2”); URL mi. URL = archivo. to. URL(); ü Crear el player usando la clase Manager Player player = javax. media. Manager. create. Player(mi. URL ); ü Invocar al método start() del player. Es entonces cuando comienza a reproducirse el contenido. player. start(); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 27

Proceso de creación de un player (3/5) | Ejemplo 2: Creación de un nuevo

Proceso de creación de un player (3/5) | Ejemplo 2: Creación de un nuevo player a partir de un Media. Locator: ü Crear un Media. Locator a partir de un string URL Media. Locator mi. Media. Locator = new Media. Locator("dvb: //1. 3. 1"); ü Crear el player usando la clase Manager Player player = javax. media. Manager. create. Player(mi. Media. Locator); ü Invocar al método start() del player. Es entonces cuando comienza a reproducirse el contenido player. start(); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 28

Proceso de creación de un player (4/5) | Ejemplo 3: Creación de un nuevo

Proceso de creación de un player (4/5) | Ejemplo 3: Creación de un nuevo player a partir de un Data. Source: ü Crear un Media. Locator a partir de un string URL Media. Locator mi. Media. Locator = new Media. Locator("dvb: //1. 3. 1"); ü Crear el Data. Source a partir del Media. Locator Data. Source datos = javax. media. Manager. create. Data. Source(localizador); ü Conectar el Data. Source con la localización especificada por el locator. Hasta que no se haga esto no hay forma de acceder a los datos. connect(); ü Invocar al método start() del Data. Source para indicar que el Data. Source ya tiene datos para pasar al player. datos. start(); ü Crear el player usando la clase Manager Player player = javax. media. Manager. create. Player(datos); ü Invocar al método start() del player. Es entonces cuando comienza a reproducirse el contenido. player. start(); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 29

Proceso de creación de un player (5/5) | Ejemplo 4: Obtención del player del

Proceso de creación de un player (5/5) | Ejemplo 4: Obtención del player del servicio actual: ü Obtener el service context del servicio en el que se ejecuta la xlet. Xlet. Context contexto; Service. Context. Factory scf = null; Service. Context sc = null; scf = Service. Context. Factory. get. Instance(); sc = scf. get. Service. Context(contexto); ü Obtener el player para el servicio actual. Los objetos Service. Media. Handler son responsables de presentar las distintas partes del servicio, esto incluye los media components. Buscamos el player entre los distintos Handlers, normalmente suele ser el primero. Service. Content. Handler[] sch = sc. get. Service. Content. Handlers(); for (int i = 0; i < sch. length; i++) { if (sch[i] instanceof Service. Media. Handler) { Player player = (Player)sch[i]; } } 22/09/2006 E. T. S de Ingenieros de Telecomunicación 30

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 31

Controls (1/6) | JMF usa el concepto de control para añadir funcionalidades extra al

Controls (1/6) | JMF usa el concepto de control para añadir funcionalidades extra al player. | Cada control es una subclase de javax. media. Media. Control. | Funcionalidades separadas: ü Player controla el proceso de obtener el “media”, decodificarlo y reproducirlo. ü Control responsable de manipular cómo presentar el “media” y de hacer cambios que no afecten al ciclo de vida del player. | Invocando al método get. Controls() de un player obtenemos la lista de controls disponibles para ese player. | Explicaremos los dos controls usados en este proyecto: ü javax. tv. media. AWTVideo. Size. Control ü javax. tv. media. Media. Select. Control | Para información más detallada sobre controls: ü Interactive TV Standards (Capítulo 11) ü ETSI_TS_101 812, V 1. 2. 1, Specification 1. 0. 2 (Sección 11. 4. 2) 22/09/2006 E. T. S de Ingenieros de Telecomunicación 32

Controls (2/6) javax. tv. media. AWTVideo. Size. Control (1/2) | Permite a las aplicaciones

Controls (2/6) javax. tv. media. AWTVideo. Size. Control (1/2) | Permite a las aplicaciones controlar el escalado y posicionamiento de la capa de video | javax. tv. media. AWTVideo. Size. Control public interface AWTVideo. Size. Control extends javax. media. Control { public AWTVideo. Size get. Size(); public AWTVideo. Size get. Default. Size(); public java. awt. Dimension get. Source. Video. Size(); public boolean set. Size(AWTVideo. Size sz); public AWTVideo. Size check. Size(AWTVideo. Size sz); } | Para usar este control la aplicación crea un objeto javax. tv. media. AWTVideo. Size. | Esta clase toma dos rectángulos como argumentos en su constructor: ü el primero es el rectángulo fuente (representa el área del video origen que se quiere presentar) ü el segundo es el rectángulo destino (identifica el lugar y tamaño en el que va a ser presentado el contenido del primer rectángulo) El objeto AWTVideo. Size calculará automáticamente las transformaciones que necesite, por lo que la aplicación no se debe preocupar de esto. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 33

Controls (3/6) javax. tv. media. AWTVideo. Size. Control (2/2) public class AWTVideo. Size extends

Controls (3/6) javax. tv. media. AWTVideo. Size. Control (2/2) public class AWTVideo. Size extends java. lang. Object { private java. awt. Rectangle source; private java. awt. Rectangle destination; private float x. Scale; private float y. Scale; public AWTVideo. Size(java. awt. Rectangle source, java. awt. Rectangle dest); public java. awt. Rectangle get. Source(); public java. awt. Rectangle get. Destination(); public float get. XScale(); public float get. YScale(); public int hash. Code(); public boolean equals(java. lang. Object other); public java. lang. String to. String(); } | Comentarios de este control: ü El hardware del receptor puede imponer limitaciones en el posicionamiento y escalado del video y el método set. Size() puede fallar si no puede soportar la transformación requerida. ü Con el método check. Size() se puede chequear antes si la transformación está permitida. | Ejemplo: mover video a la esquina superior derecha Rectangle NORMAL_DIMENSION = new Rectangle(0, 0, 720, 576); Rectangle QUARTER_DIMENSION = new Rectangle(720/2, 0, 720/2, 576/2); AWTVideo. Size. Control vsc; vsc = (AWTVideo. Size. Control)player. get. Control("javax. tv. media. AWTVideo. Size. Control"); vsc. set. Size(new AWTVideo. Size(NORMAL_DIMENSION, QUARTER_DIMENSION)); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 34

Controls (4/6) | JMF usa el concepto de control para añadir funcionalidades extra al

Controls (4/6) | JMF usa el concepto de control para añadir funcionalidades extra al player. | Cada control es una subclase de javax. media. Media. Control. | Funcionalidades separadas: ü Player controla el proceso de obtener el “media”, decodificarlo y reproducirlo. ü Control responsable de manipular cómo presentar el “media” y de hacer cambios que no afecten al ciclo de vida del player. | Invocando al método get. Controls() de un player obtenemos la lista de controls disponibles para ese player. | Explicaremos los dos controls usados en este proyecto: ü javax. tv. media. AWTVideo. Size. Control ü javax. tv. media. Media. Select. Control | Para información más detallada sobre controls: ü Interactive TV Standards (Capítulo 11) ü ETSI_TS_101 812, V 1. 2. 1, Specification 1. 0. 2 (Sección 11. 4. 2) 22/09/2006 E. T. S de Ingenieros de Telecomunicación 35

Controls (5/6) javax. tv. media. Media. Select. Control (1/2) | Permite a las aplicaciones

Controls (5/6) javax. tv. media. Media. Select. Control (1/2) | Permite a las aplicaciones controlar la presentación de los elementary streams que componen el servicio: ü ü Seleccionar streams Añadir streams Eliminar streams Reemplazar streams | javax. tv. media. AWTVideo. Size. Control public interface Media. Select. Control extends javax. media. Control { public void select(javax. tv. locator. Locator component); public void select(javax. tv. locator. Locator[] components); public void add(javax. tv. locator. Locator component); public void remove(javax. tv. locator. Locator component); public void replace(javax. tv. locator. Locator from. Component, javax. tv. locator. Locator to. Component); public void add. Media. Select. Listener( Media. Select. Listener listener); public void remove. Media. Select. Listener ( Media. Select. Listener listener); public javax. tv. locator. Locator[] get. Current. Selection(); } | Limitación de este control: únicamente puede seleccionar componentes que estén dentro del servicio actual. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 36

Controls (6/6) javax. tv. media. Media. Select. Control (2/2) | Ejemplo: seleccionar nuevo elementary

Controls (6/6) javax. tv. media. Media. Select. Control (2/2) | Ejemplo: seleccionar nuevo elementary stream de audio y reproducirlo. Se da por hecho que se ha creado un player mediante cualquiera de los métodos propuestos. Media. Select. Control msc = (Media. Select. Control)player. get. Control("javax. tv. media. Media. Select. Control"); Locator localizador_audio = null; Locator. Factory lf = Locator. Factory. get. Instance(); try{ localizador_audio = lf. create. Locator( "dvb: //1. 3. 1. cb" ); } catch (Malformed. Locator. Exception e){ } try{ msc. select(localizador_audio); } catch (Invalid. Service. Component. Exception e){ } catch (Insufficient. Resources. Exception e){ } catch (Security. Exception e){ } catch (Invalid. Locator. Exception e){ } 22/09/2006 E. T. S de Ingenieros de Telecomunicación 37

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 38

Ejemplos (1/17) | Explicación detallada de los pasos a seguir para reproducir los distintos

Ejemplos (1/17) | Explicación detallada de los pasos a seguir para reproducir los distintos contenidos introducidos en el primer apartado: ü Acceso a contenidos DVB Streaming • Acceso y presentación de un nuevo elementary stream de audio. ü Acceso a contenidos del Object Carousel (broadcast file system) • Acceso y presentación de un ARCHIVO DE AUDIO • Acceso y presentación de un ARCHIVO DE VIDEO 22/09/2006 E. T. S de Ingenieros de Telecomunicación 39

Ejemplos (2/17) Acceso y presentación de un nuevo elementary stream de audio (1/3) |

Ejemplos (2/17) Acceso y presentación de un nuevo elementary stream de audio (1/3) | Asociar un player al servicio en el que se ejecuta la xlet: ü Crear un locator al servicio y a partir de él crear el Data. Source y el player. Para ello debemos conocer el string dvb: // específico del servicio. ü No crear un nuevo player sino obtener el player del servicio actual. | Obtener los controls que se necesiten. En este caso Media. Select. Control msc; msc = (Media. Select. Control)player. get. Control("javax. media. Media. Select. Control"); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 40

Ejemplos (3/17) Acceso y presentación de un nuevo elementary stream de audio (2/3) |

Ejemplos (3/17) Acceso y presentación de un nuevo elementary stream de audio (2/3) | Crear un el locator que refiera al nuevo audio stream que se quiere presentar para luego, invocando al método select() del control, seleccionar este nuevo audio stream. Hay que tener en cuenta que el método select() coge como argumento de entrada un javax. tv. locator. Locator, no un javax. media. Media. Locator, así que la forma de crear el locator será mediante la clase Locator. Factory. Locator localizador_audio = null; Locator. Factory lf = Locator. Factory. get. Instance(); try { localizador_audio = lf. create. Locator("dvb: //1. 3. 1. cc"); //locator al nuevo audio } catch (Malformed. Locator. Exception e) { } try { msc. select(localizador_audio); } catch (Invalid. Service. Component. Exception e) { } catch (Insufficient. Resources. Exception e) { } catch (Security. Exception e) { } catch (Invalid. Locator. Exception e) { } | Una vez hechos los pasos anteriores, el audio stream que se está presentando cambiará. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 41

Ejemplos (4/17) Acceso y presentación de un nuevo elementary stream de audio (3/3) |

Ejemplos (4/17) Acceso y presentación de un nuevo elementary stream de audio (3/3) | Comentarios: ü No hay ninguna particularización para el caso de audio parece que también funcionaría con un elementary stream de video. • El código implementado únicamente selecciona un nuevo locator. ü No se ha podido experimentar por limitaciones del banco de pruebas. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 42

Ejemplos (5/17) | Explicación detallada de los pasos a seguir para reproducir los distintos

Ejemplos (5/17) | Explicación detallada de los pasos a seguir para reproducir los distintos contenidos introducidos en el primer apartado: ü Acceso a contenidos DVB Streaming • Selección y presentación de un nuevo elementary stream de audio. ü Acceso a contenidos del Object Carousel (broadcast file system) • Acceso y presentación de un ARCHIVO DE AUDIO • Acceso y presentación de un ARCHIVO DE VIDEO 22/09/2006 E. T. S de Ingenieros de Telecomunicación 43

Ejemplos (6/17) Acceso y presentación de un ARCHIVO DE AUDIO (1/7) | Para acceder

Ejemplos (6/17) Acceso y presentación de un ARCHIVO DE AUDIO (1/7) | Para acceder a un archivo de audio que viaja en el Object Carousel se tienen varias opciones: ü Hacer uso de la clase DSMCCObject y crear un player a partir de una URL. ü Aprovechar que se trata de un archivo de audio y hacer uso de la clase HSound. public class HSound { public public HSound(); void load(java. lang. String location); void load(java. net. URL contents); void set (byte[] data); void play(); void stop(); void loop(); void dispose(); } Simplemente se puede elegir cuando empieza, cuando se acaba o si se desees reproducción en bucle del audio ü Usar API JMF para tener más control sobre el audio 22/09/2006 E. T. S de Ingenieros de Telecomunicación 44

Ejemplos (7/17) Acceso y presentación de un ARCHIVO DE AUDIO (2/7) | Crear un

Ejemplos (7/17) Acceso y presentación de un ARCHIVO DE AUDIO (2/7) | Crear un locator que refiera al archivo del object carousel. DSMCCObject mi. Objeto. DSMCC; mi. Objeto. DSMCC = new DSMCCObject(“audios/audio 1. mp 2”); //Se obtiene la URL llamando al método get. URL() URL mi. URL = mi. Objeto. DSMCC. get. URL(); Player player_archivo_audio = null; try { player_archivo_audio = javax. media. Manager. create. Player(mi. URL); } catch (No. Player. Exception e) { } catch (IOException e) { } player_archivo_audio. start(); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 45

Ejemplos (8/17) Acceso y presentación de un ARCHIVO DE AUDIO (3/7) | Para acceder

Ejemplos (8/17) Acceso y presentación de un ARCHIVO DE AUDIO (3/7) | Para acceder a un archivo de audio que viaja en el Object Carousel se tienen varias opciones: ü Crear un locator que refiera al archivo del object carousely a partir de él el player. ü Aprovechar que se trata de un archivo de audio y hacer uso de la clase HSound public class HSound { public public HSound(); void load(java. lang. String location); void load(java. net. URL contents); void set (byte[] data); void play(); void stop(); void loop(); void dispose(); } Simplemente se puede elegir cuando empieza, cuando se acaba o si se desees reproducción en bucle del audio ü Usar API JMF para tener más control sobre el audio 22/09/2006 E. T. S de Ingenieros de Telecomunicación 46

Ejemplos (9/17) Acceso y presentación de un ARCHIVO DE AUDIO (4/7) | Aprovechar que

Ejemplos (9/17) Acceso y presentación de un ARCHIVO DE AUDIO (4/7) | Aprovechar que se trata de un archivo de audio y hacer uso de la clase HSound player_archivo_audio = new HSound(); try { player_archivo_audio. load(“audios/audio 1. mp 2”); //ruta relativa al directorio //root de la aplicación //(Service Gateway) } catch (Exception e){ } player_archivo_audio. play(); //se podría invocar al método loop() si se //deseara una reproducción ininterrumpida 22/09/2006 E. T. S de Ingenieros de Telecomunicación 47

Ejemplos (10/17) Acceso y presentación de un ARCHIVO DE AUDIO (5/7) | Para acceder

Ejemplos (10/17) Acceso y presentación de un ARCHIVO DE AUDIO (5/7) | Para acceder a un archivo de audio que viaja en el Object Carousel se tienen varias opciones: ü Crear un locator que refiera al archivo del object carousel y a partir de él el player. ü Aprovechar que se trata de un archivo de audio y hacer uso de la clase HSound public class HSound { public public HSound(); void load(java. lang. String location); void load(java. net. URL contents); void set (byte[] data); void play(); void stop(); void loop(); void dispose(); } Simplemente se puede elegir cuando empieza, cuando se acaba o si se desees reproducción en bucle del audio ü Usar API JMF para tener más control sobre el audio 22/09/2006 E. T. S de Ingenieros de Telecomunicación 48

Ejemplos (11/17) Acceso y presentación de un ARCHIVO DE AUDIO (6/7) | Usar API

Ejemplos (11/17) Acceso y presentación de un ARCHIVO DE AUDIO (6/7) | Usar API JMF para tener más control sobre el audio File archivo_audio = new File(“audios/audio 1. mp 2”); Media. Locator localizador_archivo_audio = null; try { localizador_archivo_audio = new javax. media. Media. Locator(archivo_audio. to. URL(). to. External. Form()); } catch (Malformed. URLException e 1) { } Player player_archivo_audio = null; try { player_archivo_audio = javax. media. Manager. create. Player(localizador_archivo_audio); } catch (No. Player. Exception e) { } catch (IOException e) { } player_archivo_audio. start(); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 49

Ejemplos (12/17) Acceso y presentación de un ARCHIVO DE AUDIO (7/7) | Restricciones en

Ejemplos (12/17) Acceso y presentación de un ARCHIVO DE AUDIO (7/7) | Restricciones en MHP: ü Único formato soportado: MPEG-1 (MP 1 o MP 2) • WAV y MP 3 no son soportados ü Deben ser de tamaño pequeño porque van a ser descargados del object carousel. • Archivos grandes: – Tardan mucho tiempo en descargarse y pueden afectar a los tiempos de carga de otros archivos. – Usan más memoria y esto puede ser un problema en receptores de poco memoria RAM. ü Sólo se puede reproducir un audio a la vez ya que los receptores MHP no son capaces de mezclar audios. • Para reproducir un nuevo audio hay que esperar a que el audio que actualmente se está reproduciendo acabe. • Esto es aplicable también al audio del servicio asociado a la aplicación, por lo que cualquier efecto de sonido que introduzca la aplicación hará que el audio del servicio se silencie. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 50

Ejemplos (13/17) | Explicación detallada de los pasos a seguir para reproducir los distintos

Ejemplos (13/17) | Explicación detallada de los pasos a seguir para reproducir los distintos contenidos introducidos en el primer apartado: ü Acceso a contenidos DVB Streaming • Selección y presentación de un nuevo elementary stream de audio. ü Acceso a contenidos del Object Carousel (broadcast file system) • Acceso y presentación de un ARCHIVO DE AUDIO • Acceso y presentación de un ARCHIVO DE VIDEO 22/09/2006 E. T. S de Ingenieros de Telecomunicación 51

Ejemplos (14/17) Acceso y presentación de un ARCHIVO DE VIDEO (1/4) | La norma

Ejemplos (14/17) Acceso y presentación de un ARCHIVO DE VIDEO (1/4) | La norma MHP no soporta la reproducción de videos desde archivo. | No existe ningún mecanismo de reproducción de video que no sea el de un elementary stream. | Se ha intentado reproducir videos mediante la técnica de los Video Drips ü Formato de contenido nuevo y único en la TV digital ü Provee un mecanismo eficiente, en cuanto a memoria, para mostrar varias imágenes similares. ü Pequeños video clips MPEG-2 compuestos únicamente por • Una I-frame que es la que primero se decodifica. • Una o varias P-frames que son decodificadas en base a la primera I -frame. pero sin resultados satisfactorios ya que esta técnica no tiene este propósito. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 52

Ejemplos (15/17) Acceso y presentación de un ARCHIVO DE VIDEO (2/4) | Funcionamiento de

Ejemplos (15/17) Acceso y presentación de un ARCHIVO DE VIDEO (2/4) | Funcionamiento de los Video Drips: ü Existe un formato de locator para referenciar Video Drips dripfeed: // Data. Source player ü Su uso no es necesario porque existe una subclase de Data. Source, Drip. Data. Source que permite crear una fuente de datos capaz de alimentar progresivamente el decodificador con pequeñas partes del clip MPEG-2. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 53

Ejemplos (16/17) Acceso y presentación de un ARCHIVO DE VIDEO (3/4) | Pasos a

Ejemplos (16/17) Acceso y presentación de un ARCHIVO DE VIDEO (3/4) | Pasos a seguir para reproducir un Video Drip: ü Se define el array donde vamos a guardar la lectura del fichero que contiene el video a mostar static final int tam_buffer_lectura = 320000; byte[] datos. Drip = new byte[tam_buffer_lectura]; ü Se crea una instancia de la clase Drip. Data. Source para poder alimentar el decodificador progresivamente Drip. Feed. Data. Sorce dfds = new Drip. Feed. Data. Source(); ü Se crea el player a partir del Drip. Data. Source anterior y se invoca a su método start() Player player. Drip = Manager. create. Player(dfds); player. Drip. start(); ü Se crea una instancia de la clase File. Input. Stream pasando como parámetro de entrada el video que se quiere presentar. Los objetos File. Input. Stream típicamente representan ficheros de texto accedidos en orden secuencial, byte a byte. Con File. Input. Stream, se puede elegir acceder a un byte, varios bytes o al fichero completo. File. Input. Stream fis = new File. Input. Stream("videos/video. Sin. Audio 2. mpg"); ü Se invoca al método read() del File. Input. Stream para comenzar la lectura de los datos que se guardarán en el array datos. Drip definido en el primer paso y se cierra el stream de entrada cuando la lectura haya finalizado. fis. read(datos. Drip); fis. close(); ü Por último se invoca al método feed() del objeto Drip. Feed. Data. Source para comenzar la alimentación progresiva del decodificador con el array en el que tenemos los datos. dfds. feed(datos. Drip); 22/09/2006 E. T. S de Ingenieros de Telecomunicación 54

Ejemplos (17/17) Acceso y presentación de un ARCHIVO DE VIDEO (4/4) | Restricciones en

Ejemplos (17/17) Acceso y presentación de un ARCHIVO DE VIDEO (4/4) | Restricciones en MHP: (sobre el formato del clip MPEG usado para los Video Drips) ü No pueden contener streams de audio ü Deben estar compuestos únicamente por I-frames y P-frames. ü Más información: ETSI_TS_101 812, V 1. 2. 1, Specification 1. 0. 2 (Sección 7. 1. 3) | Los resultados no han sido muy satisfactorios pero han servido para comprender mejor las restricciones que MHP impone sobre el formato de los video clips usados para generar los Video Drips. | Mejor resultado obtenido: conseguir que el STB decodifique únicamente el primer frame del video pero entremezclado ligeramente con el video del elementary stream. | Conclusión: para reproducir un video el único mecanismo válido es difundirlo como un elementary stream. ü Para que esta última solución propuesta proporcione resultados óptimos hay que disponer de suficiente ancho de banda en el carousel para evitar problemas de tiempos de carga de archivos demasiado altos. 22/09/2006 E. T. S de Ingenieros de Telecomunicación 55

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators

Índice | Introducción: accediendo a contenidos | Referenciando contenidos (Locators) ü Tipos de locators ü Creación de locators | Reproduciendo contenidos ü Player, Control, Data. Source ü La clase Manager ü Proceso de creación de un player ü Controls | Ejemplos | Bibliografía 22/09/2006 E. T. S de Ingenieros de Telecomunicación 56

Bibliografía | Interactive TV Standards (Steven Morris) ü Capítulo 8 y 11 | http:

Bibliografía | Interactive TV Standards (Steven Morris) ü Capítulo 8 y 11 | http: //www. interactivetvweb. org/ ü http: //www. interactivetvweb. org/tutorial/mhp/mediacon trol. shtml ü http: //www. interactivetvweb. org/tutorial/mhp/javamedi a. shtml ü http: //www. interactivetvweb. org/tutorial/mhp/sound. sht ml | ETSI_TS_101 812, V 1. 2. 1, Specification 1. 0. 2 22/09/2006 E. T. S de Ingenieros de Telecomunicación 57

Gracias por su atención 22/09/2006 E. T. S de Ingenieros de Telecomunicación .

Gracias por su atención 22/09/2006 E. T. S de Ingenieros de Telecomunicación .