La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Control de medios en MHP Leire Urriza Oiz. 22/09/2006.2 E.T.S de Ingenieros de Telecomunicación Índice  Introducción: accediendo a contenidos  Referenciando.

Presentaciones similares


Presentación del tema: "Control de medios en MHP Leire Urriza Oiz. 22/09/2006.2 E.T.S de Ingenieros de Telecomunicación Índice  Introducción: accediendo a contenidos  Referenciando."— Transcripción de la presentación:

1 Control de medios en MHP Leire Urriza Oiz

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

3 22/09/2006.3 E.T.S de Ingenieros de Telecomunicación 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.

4 22/09/2006.4 E.T.S de Ingenieros de Telecomunicación 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.

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

6 22/09/2006.6 E.T.S de Ingenieros de Telecomunicación 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…)

7 22/09/2006.7 E.T.S de Ingenieros de Telecomunicación 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é.

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

9 22/09/2006.9 E.T.S de Ingenieros de Telecomunicación 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.MediaLocator

10 22/09/2006.10 E.T.S de Ingenieros de Telecomunicación Tipos de locators (2/10) Locators para contenidos DVB Streaming  Locators para contenidos DVB Streaming Sintaxis: dvb://.. [. [& ]][; ][/ ] onID  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) tsID  transport stream ID, que identifica un transport stream específico que la red esta difundiendo. sID  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. evID  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.

11 22/09/2006.11 E.T.S de Ingenieros de Telecomunicación 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.MediaLocator

12 22/09/2006.12 E.T.S de Ingenieros de Telecomunicación 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.

13 22/09/2006.13 E.T.S de Ingenieros de Telecomunicación 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 miObjetoDSMCC; miObjetoDSMCC = new DSMCCObject("audios/audio1.mp2"); //Se obtiene la URL llamando al método getURL() URL miURL = miObjetoDSMCC.getURL(); //Una vez que se tiene la URL se puede crear un javax.tv.locator.Locator, //un javax.media.MediaLocator y a partir de él crear el player o bien //crear el player directamente. A modo de ejemplo se muestra la primera //opcion try{ LocatorFactory lf = LocatorFactory.getInstance(); Locator miLocalizador = lf.createLocator(miURL.toString()); } catch (MalformedLocatorException e){ }

14 22/09/2006.14 E.T.S de Ingenieros de Telecomunicación 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.MediaLocator

15 22/09/2006.15 E.T.S de Ingenieros de Telecomunicación Tipos de locators (7/10) Locators para VideoDrips  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 I-frame. 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.

16 22/09/2006.16 E.T.S de Ingenieros de Telecomunicación 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.MediaLocator

17 22/09/2006.17 E.T.S de Ingenieros de Telecomunicación 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.DvbLocator  para referir a transport streams y servicios en redes DVB. –org.dvb.locator.FrequencyLocator  para referir a servicios transportados en transport streams que no tienen información de servicio. javax.media.MediaLocator 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.MediaLocator  para servir de puente entre JMF y el resto del sistema, es decir, entre JMF MediaLocator y los JavaTV Locator.

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

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

20 22/09/2006.20 E.T.S de Ingenieros de Telecomunicació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.MediaLocator y org.davic.net.Locator Ejemplo: javax.media.MediaLocator localizador; localizador = new javax.media.MediaLocator("dvb://1.3.1"); Creación indirecta a través de la clase LocatorFactory Aplicable a javax.tv.locator.Locator, de hecho, instancias de esta clase sólo se pueden crear usando la clase javax.tv.locator.LocatorFactory. Esta clase proporciona un método createLocator() que coge como argumento una URL. Ejemplo: javax.tv.locator.Locator localizador; javax.tv.locator.LocatorFactory lf = javax.tv.locator.LocatorFactory.getInstance(); localizador = lf.createLocator("dvb://1.3.1.cb");

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

22 22/09/2006.22 E.T.S de Ingenieros de Telecomunicación Player, Control, DataSource  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 DataSource Objeto encargado de proporcionar los datos media que el player va a decodificar. Todos los players están siempre asociados a un objeto DataSource ya que es imposible crear un player que no tenga un objeto DataSource asociado Todos los DataSource son subclases de javax.media.protocol.DataSource

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

24 22/09/2006.24 E.T.S de Ingenieros de Telecomunicación La clase Manager  No se pueden crear instancias de Player y DataSource directamente  hay que usar la clase Manager para crearlos. public class Manager { public static Player createPlayer(URL sourceURL); public static Player createPlayer(MediaLocator sourceLocator); public static Player createPlayer(DataSource source); public static DataSource createDataSource(URL sourceURL); public static DataSource createDataSource(MediaLocator sourceLocator); public static TimeBase getSystemTimeBase(); public static Vector getDataSourceList(String protocolName); public static Vector getHandlerClassList(String contentName); }  Los métodos más interesantes de esta clase son: createDataSource() Crea una nueva instancia de la clase DataSource que traerá los datos desde el lugar referido por la URL o por el MediaLocator (según el método utilizado) createPlayer() Crea una nueva instancia de la clase Player que podrá ser usada para reproducir un media clip.

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

26 22/09/2006.26 E.T.S de Ingenieros de Telecomunicación Proceso de creación de un player (1/5)  Todo player está asociado siempre a un objeto DataSource por lo que parece lógico pensar que los players se crean a partir de DataSources. Sin embargo, de acuerdo a la clase Manager, existen otros mecanismos: A partir de una URL A partir de un MediaLocator en los que la clase Manager creará primero el DataSource 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.

27 22/09/2006.27 E.T.S de Ingenieros de Telecomunicación 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 createPlayer(). Normalmente invocando a métodos del tipo getURL() o bien toURL(). getURL() DSMCCObject miObjetoDSMCC; miObjetoDSMCC = new DSMCCObject(“audios/audio1.mp2”); URL miURL = miObjetoDSMCC.getURL(); toURL() File archivo = new File(“audios/audio1.mp2”); URL miURL = archivo.toURL(); Crear el player usando la clase Manager Player player = javax.media.Manager.createPlayer(miURL); Invocar al método start() del player. Es entonces cuando comienza a reproducirse el contenido. player.start();

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

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

30 22/09/2006.30 E.T.S de Ingenieros de Telecomunicación 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. XletContext contexto; ServiceContextFactory scf = null; ServiceContext sc = null; scf = ServiceContextFactory.getInstance(); sc = scf.getServiceContext(contexto); Obtener el player para el servicio actual. Los objetos ServiceMediaHandler 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. ServiceContentHandler[] sch = sc.getServiceContentHandlers(); for (int i = 0; i < sch.length; i++) { if (sch[i] instanceof ServiceMediaHandler) { Player player = (Player)sch[i]; }

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

32 22/09/2006.32 E.T.S de Ingenieros de Telecomunicación Controls (1/6)  JMF usa el concepto de control para añadir funcionalidades extra al player.  Cada control es una subclase de javax.media.MediaControl.  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 getControls() de un player obtenemos la lista de controls disponibles para ese player.  Explicaremos los dos controls usados en este proyecto: javax.tv.media.AWTVideoSizeControl javax.tv.media.MediaSelectControl  Para información más detallada sobre controls: Interactive TV Standards (Capítulo 11) ETSI_TS_101 812, V1.2.1, Specification 1.0.2 (Sección 11.4.2)

33 22/09/2006.33 E.T.S de Ingenieros de Telecomunicación Controls (2/6) javax.tv.media.AWTVideoSizeControl (1/2)  Permite a las aplicaciones controlar el escalado y posicionamiento de la capa de video  javax.tv.media.AWTVideoSizeControl public interface AWTVideoSizeControl extends javax.media.Control { public AWTVideoSize getSize(); public AWTVideoSize getDefaultSize(); public java.awt.Dimension getSourceVideoSize(); public boolean setSize(AWTVideoSize sz); public AWTVideoSize checkSize(AWTVideoSize sz); }  Para usar este control la aplicación crea un objeto javax.tv.media.AWTVideoSize.  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 AWTVideoSize calculará automáticamente las transformaciones que necesite, por lo que la aplicación no se debe preocupar de esto.

34 22/09/2006.34 E.T.S de Ingenieros de Telecomunicación Controls (3/6) javax.tv.media.AWTVideoSizeControl (2/2) public class AWTVideoSize extends java.lang.Object { private java.awt.Rectangle source; private java.awt.Rectangle destination; private float xScale; private float yScale; public AWTVideoSize(java.awt.Rectangle source, java.awt.Rectangle dest); public java.awt.Rectangle getSource(); public java.awt.Rectangle getDestination(); public float getXScale(); public float getYScale(); public int hashCode(); public boolean equals(java.lang.Object other); public java.lang.String toString(); }  Comentarios de este control: El hardware del receptor puede imponer limitaciones en el posicionamiento y escalado del video y el método setSize() puede fallar si no puede soportar la transformación requerida. Con el método checkSize() 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); AWTVideoSizeControl vsc; vsc = (AWTVideoSizeControl)player.getControl("javax.tv.media.AWTVideoSizeControl"); vsc.setSize(new AWTVideoSize(NORMAL_DIMENSION,QUARTER_DIMENSION));

35 22/09/2006.35 E.T.S de Ingenieros de Telecomunicación Controls (4/6)  JMF usa el concepto de control para añadir funcionalidades extra al player.  Cada control es una subclase de javax.media.MediaControl.  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 getControls() de un player obtenemos la lista de controls disponibles para ese player.  Explicaremos los dos controls usados en este proyecto: javax.tv.media.AWTVideoSizeControl javax.tv.media.MediaSelectControl  Para información más detallada sobre controls: Interactive TV Standards (Capítulo 11) ETSI_TS_101 812, V1.2.1, Specification 1.0.2 (Sección 11.4.2)

36 22/09/2006.36 E.T.S de Ingenieros de Telecomunicación Controls (5/6) javax.tv.media.MediaSelectControl (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.AWTVideoSizeControl public interface MediaSelectControl 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 fromComponent, javax.tv.locator.Locator toComponent); public void addMediaSelectListener( MediaSelectListener listener); public void removeMediaSelectListener( MediaSelectListener listener); public javax.tv.locator.Locator[] getCurrentSelection(); }  Limitación de este control: únicamente puede seleccionar componentes que estén dentro del servicio actual.

37 22/09/2006.37 E.T.S de Ingenieros de Telecomunicación Controls (6/6) javax.tv.media.MediaSelectControl (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. MediaSelectControl msc = (MediaSelectControl)player.getControl("javax.tv.media.MediaSelectControl"); Locator localizador_audio = null; LocatorFactory lf = LocatorFactory.getInstance(); try{ localizador_audio = lf.createLocator( "dvb://1.3.1.cb" ); } catch (MalformedLocatorException e){ } try{ msc.select(localizador_audio); } catch (InvalidServiceComponentException e){ } catch (InsufficientResourcesException e){ } catch (SecurityException e){ } catch (InvalidLocatorException e){ }

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

39 22/09/2006.39 E.T.S de Ingenieros de Telecomunicación 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

40 22/09/2006.40 E.T.S de Ingenieros de Telecomunicación 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 DataSource 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 MediaSelectControl MediaSelectControl msc; msc = (MediaSelectControl)player.getControl("javax.mediaMediaSelectControl");

41 22/09/2006.41 E.T.S de Ingenieros de Telecomunicación 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.MediaLocator, así que la forma de crear el locator será mediante la clase LocatorFactory. Locator localizador_audio = null; LocatorFactory lf = LocatorFactory.getInstance(); try { localizador_audio = lf.createLocator("dvb://1.3.1.cc"); //locator al nuevo audio } catch (MalformedLocatorException e) { } try { msc.select(localizador_audio); } catch (InvalidServiceComponentException e) { } catch (InsufficientResourcesException e) { } catch (SecurityException e) { } catch (InvalidLocatorException e) { }  Una vez hechos los pasos anteriores, el audio stream que se está presentando cambiará.

42 22/09/2006.42 E.T.S de Ingenieros de Telecomunicación 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.

43 22/09/2006.43 E.T.S de Ingenieros de Telecomunicación 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

44 22/09/2006.44 E.T.S de Ingenieros de Telecomunicación 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 HSound(); public void load(java.lang.String location); public void load(java.net.URL contents); public void set (byte[] data); public void play(); public void stop(); public void loop(); public 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

45 22/09/2006.45 E.T.S de Ingenieros de Telecomunicación 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 miObjetoDSMCC; miObjetoDSMCC = new DSMCCObject(“audios/audio1.mp2”); //Se obtiene la URL llamando al método getURL() URL miURL = miObjetoDSMCC.getURL(); Player player_archivo_audio = null; try { player_archivo_audio = javax.media.Manager.createPlayer(miURL); } catch (NoPlayerException e) { } catch (IOException e) { } player_archivo_audio.start();

46 22/09/2006.46 E.T.S de Ingenieros de Telecomunicación 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 pu blic class HSound { public HSound(); public void load(java.lang.String location); public void load(java.net.URL contents); public void set (byte[] data); public void play(); public void stop(); public void loop(); public 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

47 22/09/2006.47 E.T.S de Ingenieros de Telecomunicación 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. HSound player_archivo_audio = new HSound(); try { player_archivo_audio.load(“audios/audio1.mp2”); //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

48 22/09/2006.48 E.T.S de Ingenieros de Telecomunicación 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 pu blic class HSound { public HSound(); public void load(java.lang.String location); public void load(java.net.URL contents); public void set (byte[] data); public void play(); public void stop(); public void loop(); public 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

49 22/09/2006.49 E.T.S de Ingenieros de Telecomunicación 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/audio1.mp2”); MediaLocator localizador_archivo_audio = null; try { localizador_archivo_audio = new javax.media.MediaLocator(archivo_audio.toURL().toExternalForm()); } catch (MalformedURLException e1) { } Player player_archivo_audio = null; try { player_archivo_audio = javax.media.Manager.createPlayer(localizador_archivo_audio); } catch (NoPlayerException e) { } catch (IOException e) { } player_archivo_audio.start();

50 22/09/2006.50 E.T.S de Ingenieros de Telecomunicación Ejemplos (12/17) Acceso y presentación de un ARCHIVO DE AUDIO (7/7)  Restricciones en MHP: Único formato soportado: MPEG-1 (MP1 o MP2) WAV y MP3 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.

51 22/09/2006.51 E.T.S de Ingenieros de Telecomunicación 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

52 22/09/2006.52 E.T.S de Ingenieros de Telecomunicación 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.

53 22/09/2006.53 E.T.S de Ingenieros de Telecomunicación 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:// dripfeed://   DataSource   player Su uso no es necesario porque existe una subclase de DataSource, DripDataSource que permite crear una fuente de datos capaz de alimentar progresivamente el decodificador con pequeñas partes del clip MPEG-2.

54 22/09/2006.54 E.T.S de Ingenieros de Telecomunicación 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[] datosDrip = new byte[tam_buffer_lectura]; Se crea una instancia de la clase DripDataSource para poder alimentar el decodificador progresivamente DripFeedDataSorce dfds = new DripFeedDataSource(); Se crea el player a partir del DripDataSource anterior y se invoca a su método start() Player playerDrip = Manager.createPlayer(dfds); playerDrip.start(); Se crea una instancia de la clase FileInputStream pasando como parámetro de entrada el video que se quiere presentar. Los objetos FileInputStream típicamente representan ficheros de texto accedidos en orden secuencial, byte a byte. Con FileInputStream, se puede elegir acceder a un byte, varios bytes o al fichero completo. FileInputStream fis = new FileInputStream("videos/videoSinAudio2.mpg"); Se invoca al método read() del FileInputStream para comenzar la lectura de los datos que se guardarán en el array datosDrip definido en el primer paso y se cierra el stream de entrada cuando la lectura haya finalizado. fis.read(datosDrip); fis.close(); Por último se invoca al método feed() del objeto DripFeedDataSource para comenzar la alimentación progresiva del decodificador con el array en el que tenemos los datos. dfds.feed(datosDrip);

55 22/09/2006.55 E.T.S de Ingenieros de Telecomunicación 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, V1.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.

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

57 22/09/2006.57 E.T.S de Ingenieros de Telecomunicación Bibliografía  Interactive TV Standards (Steven Morris) Capítulo 8 y 11  http://www.interactivetvweb.org/ http://www.interactivetvweb.org/ http://www.interactivetvweb.org/tutorial/mhp/mediaco ntrol.shtml http://www.interactivetvweb.org/tutorial/mhp/mediaco ntrol.shtml http://www.interactivetvweb.org/tutorial/mhp/javamedi a.shtml http://www.interactivetvweb.org/tutorial/mhp/javamedi a.shtml http://www.interactivetvweb.org/tutorial/mhp/sound.sh tml http://www.interactivetvweb.org/tutorial/mhp/sound.sh tml  ETSI_TS_101 812, V1.2.1, Specification 1.0.2

58 Gracias por su atención


Descargar ppt "Control de medios en MHP Leire Urriza Oiz. 22/09/2006.2 E.T.S de Ingenieros de Telecomunicación Índice  Introducción: accediendo a contenidos  Referenciando."

Presentaciones similares


Anuncios Google