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.

Slides:



Advertisements
Presentaciones similares
Lenguaje de programación Java
Advertisements

SERVIDOR DNS Y WINS INTEGRANTES: Farroñan Beltran Brenher
Servicios Web.
Arquitectura Orientada a Servicios (SOA)
Arquitectura CLARO-TECNOTREE
Tema: Técnicas Básicas Excel (III) Trucos, opciones y personalización de Excel Índice: 1 Vínculos absolutos y relativos, conectando datos de Excel con.
Las estructuras de arreglos fueron usadas en las primeras computadoras digitales, cuando la programación se hacía todavía en lenguaje máquina, para tablas.
CÓMO REALIZAR UN PROYECTO
Capitulo 4 Excepciones.
Informática II Prof. Dr. Gustavo Patiño MJ
RMI (Remote Method Invocation)
Aplicación del paradigma orientado a objetos
Windows XP sp3.
Encapsulamiento y Abstracción
Johanna Lizeth Rodríguez Lorena Fda. Chávarro Ramos
PROGRAMACIÓN ORIENTADA A OBJETOS
DE LAS CUENTAS DE USUARIO Y OPCIONES DE CARPETA
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Lic. Rosemary Torrico Bascopé
UNIVERSIDAD TECNOLÓGICA DE HERMOSILLO T.S.U. EN T.I.C., Área: Sistemas Informáticos Ing. José Padilla Duarte y estudiantes de Sistemas Informáticos Hermosillo,
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Direcciones físicas y direcciones virtuales (lógicas)
Técnicas avanzadas de programación Interfaces
Arquitectura del Computador
TRADUCTOR DE UN PROGRAMA
Igor Santos Grueiro. Ahora tenemos datos y datos …
Un hilo es un único flujo de ejecución dentro de un proceso. Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones. Los.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
UNIDAD 2:Crear, abrir y cerrar una base de datos Hacer clic sobre la opción Nuevo de la pestaña Archivo. Se mostrarán las distintas opciones para nuevos.
 El primer navegador Web incluía un lenguaje de estilo interno que utilizaba dicho navegador para mostrar las páginas HTML.  Sin embargo estos primeros.
Ing. Karen Torrealba de Oblitas
Archivos.
ESTRUCTURA DE DATOS EN JAVA
Tema 11: Excepciones Antonio J. Sierra.
InfoPath Ventajas y Uso.
Clase 10: Estructuras de datos y arreglos.
Valor X Valor Y Punto (0,0) Coordenadas.
Streams. / En casi todo programa se necesita traer o enviar información a una fuente externa. / Dicha información puede estar en un archivo en el disco.
Teoría de Sistemas Operativos
Java Media Framework. Sergio Catalán Osorio & Christian Nievas Grondona. Programación de Sistemas 2003.
Publicación de bases de datos Access en la web
Introducción a Java Media Frameworks Rodrigo Loyola A. Gustavo Valdés A.
Java Applets David Gil
COMPONENTES DEL SISTEMA OPERATIVO.
CICLO DE VIDA Y NORMAALIZACION DE UN SISTEMA DE BASE DE DATOS
Programación Orientada a Objetos
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Punto 3 – Servicio de Vídeo Juan Luis Cano. El podcasting consiste en la distribución de archivos multimedia mediante un sistema de redifusión (RSS) que.
Programación orientada a objetos
Sistemas de Archivos Sistemas Operativos.  Se debe proporcionar un almacenamiento secundario que respalda a la memoria principal  El Sistema de archivos.
Servicio “streaming”.
INTRODUCCION A LA PROGRAMACION
File Transfer Protocol.
Hoja de Cálculo EXCEL Introducción a la informática
Microsoft Office Project INTRODUCCIÓN A LA GESTIÓN DE PROYECTOS Microsoft Office Project 2010.
MIA - Grupo 5 Unidad 2.
Un requerimiento es una condición o capacidad a la que el sistema (siendo construido) debe conformar [ Rational ]. Un requerimiento de software puede.
UD 8: “Instalación y administración de servicios de audio y video” Servicio “streaming” Luis Alfonso Sánchez Brazales.
MEMORIA DINÁMICA.
Clases “ Es una Abstracción de un elemento del mundo real ”
Tratamientos Secuenciales Generalizados II Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 19 Versión
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

Control de medios en MHP Leire Urriza Oiz

22/09/ 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/09/ 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.

22/09/ 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.

22/09/ 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/09/ 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…)

22/09/ 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é.

22/09/ 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/09/ 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

22/09/ 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.

22/09/ 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

22/09/ 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.

22/09/ 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){ }

22/09/ 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

22/09/ 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.

22/09/ 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

22/09/ 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.

22/09/ 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.

22/09/ 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/09/ 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");

22/09/ 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/09/ 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

22/09/ 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/09/ 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.

22/09/ 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/09/ 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.

22/09/ 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();

22/09/ 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();

22/09/ 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();

22/09/ 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]; }

22/09/ 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/09/ 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_ , V1.2.1, Specification (Sección )

22/09/ 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.

22/09/ 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));

22/09/ 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_ , V1.2.1, Specification (Sección )

22/09/ 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.

22/09/ 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){ }

22/09/ 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/09/ 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

22/09/ 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");

22/09/ 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á.

22/09/ 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.

22/09/ 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

22/09/ 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

22/09/ 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();

22/09/ 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

22/09/ 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

22/09/ 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

22/09/ 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();

22/09/ 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.

22/09/ 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

22/09/ 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.

22/09/ 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.

22/09/ 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 = ; 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);

22/09/ 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_ , V1.2.1, Specification (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/ 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/09/ E.T.S de Ingenieros de Telecomunicación Bibliografía  Interactive TV Standards (Steven Morris) Capítulo 8 y 11  ntrol.shtml ntrol.shtml a.shtml a.shtml tml tml  ETSI_TS_ , V1.2.1, Specification 1.0.2

Gracias por su atención