Control de medios en MHP - PowerPoint PPT Presentation

About This Presentation
Title:

Control de medios en MHP

Description:

Locators para Video Drips. En funci n de la clase que los implementa: org.davic.net.Locator ... para crear locators a Video Drips dripfeed://, que informa al ... – PowerPoint PPT presentation

Number of Views:43
Avg rating:3.0/5.0
Slides: 59
Provided by: LeireU
Learn more at: http://www.mhproject.org
Category:
Tags: mhp | control | drips | medios

less

Transcript and Presenter's Notes

Title: Control de medios en MHP


1
Control de medios en MHP
  • Leire Urriza Oiz

2
Í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
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
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
Í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
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
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
Í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
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
Tipos de locators (2/10)Locators para contenidos
DVB Streaming
  • Locators para contenidos DVB Streaming
  • Sintaxis
  • dvb//ltonIDgt.lttsIDgt.ltsIDgt.ltctaggtltctaggtltevI
    Dgt/ltpathgt
  • 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
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
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 URLs 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
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.mp
    2")
  • //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.t
    oString())
  • catch (MalformedLocatorException e)

14
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
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
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
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
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.MediaLoc
    ator en la segunda jerarquía hace posible que las
    aplicaciones puedan construir MediaLocators a
    partir de org.davic.net.Locators.

19
Í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
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
Í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
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
Í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
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(MediaL
    ocator 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
Í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
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
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(m
    iURL)
  • Invocar al método start() del player. Es entonces
    cuando comienza a reproducirse el contenido.
  • player.start()

28
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
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.createData
    Source(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
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.getServiceConten
    tHandlers()
  • for (int i 0 i lt sch.length i)
  • if (schi instanceof ServiceMediaHandler)
  • Player player (Player)schi

31
Í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
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
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
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

35
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
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
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)play
    er.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)

38
Í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
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
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("java
    x.mediaMediaSelectControl")

41
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)

42
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
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
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
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.mp
    2)
  • //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.creat
    ePlayer(miURL)
  • catch (NoPlayerException e)
  • catch (IOException e)
  • player_archivo_audio.start()

46
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

47
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
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

49
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().toE
    xternalForm())
  • catch (MalformedURLException e1)
  • Player player_archivo_audio null
  • try
  • player_archivo_audio javax.media.Manager.cre
    atePlayer(localizador_archivo_audio)
  • catch (NoPlayerException e)
  • catch (IOException e)
  • player_archivo_audio.start()

50
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
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
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
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
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 bytetam_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
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
Í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
Bibliografía
  • Interactive TV Standards (Steven Morris)
  • Capítulo 8 y 11
  • http//www.interactivetvweb.org/
  • http//www.interactivetvweb.org/tutorial/mhp/media
    control.shtml
  • http//www.interactivetvweb.org/tutorial/mhp/javam
    edia.shtml
  • http//www.interactivetvweb.org/tutorial/mhp/sound
    .shtml
  • ETSI_TS_101 812, V1.2.1, Specification 1.0.2

58
Gracias por su atención
Write a Comment
User Comments (0)
About PowerShow.com