580 likes | 773 Views
Control de medios en MHP. Leire Urriza Oiz. Í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
E N D
Control de medios en MHP Leire Urriza Oiz
Í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 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. 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. 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 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…) 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é. 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 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 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>.<tsID>.<sID>[.<ctag>[&<ctag>]][;<evID>][/<path>] • onIDoriginal 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) • tsIDtransport 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. • ctagcomponent 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. 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 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. 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){ } 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 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 Dripsdripfeed://, 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. 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 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. 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. 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 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"); 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 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 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 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 . 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 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. 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(); 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(); 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(); 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]; } } 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 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) 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. 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)); 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) 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. 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){ } 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 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 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"); 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á. 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. 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 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 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(); 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 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 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 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 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 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(); 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. E.T.S de Ingenieros de Telecomunicación