Aplicaciones Telemáticas Avanzadas Programación n con Java Media Framework
Java Media Framework Java Media Framework (JMF) proporciona una arquitectura unificada y un protocolo de mensajes para gestionar la adquisición, procesamiento y entrega de datos multimedia
Modelo básico JMF soporta la mayoría de las representaciones multimedia (WAV, MPEG, AU, AVI, etc) Las aplicaciones JMF pueden presentar, capturar, manipular y almacenar información multimedia. Modelo de Procesamiento de los datos: Los datos multimedia pueden obtenerse de diferentes fuentes: Ficheros locales o de red Cámaras Micrófonos Difusiones en directo (live broadcast)
Conceptos y Definiciones El formato en el que los datos son almacenados se denomina content-type Un media stream (flujo de datos multimedia o simplemente flujo multimedia) consiste en datos multimedia obtenidos de un fichero local, adquiridos a través de la red, o capturados de una cámara o un micrófono. Los media streams a menudo contienen varios canales de datos (channels) denominados tracks. Estos media streams también son denominados complejos o multiplexados El proceso de demultiplexación se encarga de extraer los tracks de un flujo multimedia complejo El tipo (type) de un track identifica el tipo de datos que contiene, como audio o video El formato de un track define como se estructura u organizan los datos
Conceptos y Definiciones Un flujo multimedia (media stream) puede ser identificado por su localización y el protocolo utilizado para acceder a él URL: describir la localización de un fichero en un sistema local o remoto LOCAL: protocolo FILE REMOTO, en un servidor Web: protocolo HTTP Un media locator (localizador multimedia) proporciona una forma de identificar la localización de un flujo multimedia cuando no es posible utilizar una URL. Clasificación de los flujos multimedia de acuerdo a cómo se entregan o reparten los datos: PULL: la transferencia de datos se inicia y controla desde el lado del servidor (HTTP, FILE) PUSH: El servidor inicia la transferencia de datos y controla el flujo de datos (RTP)
Medium Medium Mediu m QuickTime AVI ndeo QuickTime AVI RTP JPEG Low Medium Mediu m QuickTime AVI RTP.263 Medium Medium Low AVI RTP.261 MPEG PEG- 1 Low Mediu m AVI QuickTime inepa k Bandwidth Requirements CPU Requirements Quality Content Type ormat Low Medium Mediu m WAV RTP G.723. 1 Low Low Low WAV RTP GSM Medium MPEG MPEG Layer3 MPEG MPEG- 1 Medium Medium Mediu m AVI QuickTime WAV RTP ADPC M (DVI, IMA4) Low Low AVI QuickTime WAV RTP Mu- Law Low AVI QuickTime WAV PCM Bandwidth Requirements CPU Requirements Quality Content Type Format Formatos de Vídeo Formatos de Vídeo Formatos de Audio Formatos de Audio
Presentación de Datos Multimedia El audio y el vídeo se presenta a través de dispositivos de salida como altavoces y monitores. Estos dispositivos son los destinos (destination) más comunes para la salida de datos. Los flujos multimedia pueden ser enviados a otros destinos, salvarlo a un fichero o transmitirlo a través de la red. Un destino de salida de datos multimedia es a veces referido como data sink
Modelos de JMF Modelo de Tiempo Precisión de nanosegundos Managers La API de JMF consiste principalmente en interfaces que definen el comportamiento y la interacción de los objetos Java utilizados para capturar, procesar y presentar flujos multimedia. El uso de objetos intermedios los manager permiten la integración de nuevas implementaciones de estas interfaces. JMF usa 4 managers: Manager: Permite la construcción de Players Processors, DataSources y DataSinks. PackageManager: Paquetes de clases JMF que implementan Players Processors, DataSources y DataSinks propios. CaptureDeviceManager: Dispositivos de captura disponibles PlugInManager: Componentes de procesamiento
Modelos de JMF (II) Modelo de Eventos Los objetos utilizan un mecanismo basado en eventos para informar del estado. Clase MediaEvent Las subclases de la clase MediaEvent identifican tipos de eventos particulares. Para recibir notificaciones cuando se envía un evento es necesario implementar la interfaz listener adecuada y registrarse como clase listener
Modelos de JMF (III): Modelo de Datos Un objeto DataSource encapsula: La localización de la información multimedia El protocolo y el software utilizado para su distribución Un objeto DataSource se identifica por: MediaLocator URL Existen varios tipos de DataSource, dependiendo de: la unidad de transferencia De forma estándar utiliza un array de bytes como unidad de transferencia. BufferDataSource utiliza un objeto Buffer como unidad de transferencia. Cómo se inicia la transferencia de datos PullDataSource: El cliente inicia la transferencia de datos y controla el flujo de datos desde los PullDatasource. Hay PullDataSource y PullBufferdataSource. Ej. HTTP, FILE PushDataSource: El servidor inicia la transferencia de datos y controla el flujo de datos. Hay PushDataSource y PushBufferDataSource. Ej. RTP
Modelos de JMF (IV). Modelo de Datos JMF define dos DataSource especiales: Cloneable. Datasources que se pueden clonar a través del Manager (createcloneabledatasource) Debe implementar la interfaz SourceCloneable Merging. Permiten combinar los SourceStreams de varios DataSources del mismo tipo en un único DataSource. El formato de un objeto se representa por un objeto Format, que describe el nombre del formato de codificación y el tipo de datos que requiere el formato.
Controles La clase Control proporciona un mecanismo para establecer y consultar atributos de un objeto Controller, DataSource, DataSink,... También proporciona acceso a la interfaz de usuario Player
Presentación: Componentes de Interfaz Estándar En JMF el proceso de presentación se modela por la interfaz Controller. Envía eventos para notificar cambios en su estado Dos tipos de Controladores: Player Processor
Almacenamiento y Transmisión Clase DataSink se utiliza para leer datos de un DataSource y lo envía a algún destino (normalmente diferente de un dispositivo de presentación). Escribir datos a un fichero Escribir datos a la red Funcionar como un difusor RTP
Extensibilidad de JMF Es posible implementar nuevos componentes que obtengan, procesen o traten datos multimedia MediaHandler: Leen datos de un Datasource Player Processor DataSink MediaProxy: Transforma un DataSource en otro DataSource
Presentación Multimedia en JMF Processor en general y Player en particular Creación: a través del Manager Manager.createPlayer() Manager.createProcessor() Creación en estado Realized Manager.createRealizedPlayer() Manager.createRealizedProcessor() Creación de un procesador a partir de un objeto ProcessorModel, que define los requisitos de entrada y salida del Processor Manager.createRealizedProcessor()
Player: Obtención de componentes visuales Dos tipos de componentes con interfaz gráfica: Componente visual Componente de control Componentes adicionales: Control de Volumen (Gain), Barra de progreso, brillo y contraste, etc player.getvisualcomponent() player.getcontrolpanelcomponent() player.getgaincontrol().getcontrolcomponent() Definición de interfaces propias: Implementar componentes GUI Invocar los métodos del Player adecuados en respuesta de las acciones del usuario Registrar estos componentes como ControllerListener para que reciban loe eventos lanzados por el Player cuando cambia de estado
Player Comenzar presentación/reproducción Parar presentación/reproducción Liberar los recursos player.start() player.stop() Player.setStopTime() player.deallocate() Consulta de los parámetros del Player player.getmediatime() player.getduration() player.getrate()
Player Sincronización de varios flujos player1.settimebase(player2.gettimebase() Presentación de Flujos de Datos RTP String URL= rtp://224.144.251.104:49150/audio/1 MediaLocator mrl=new MediaLocator(url); /*comprobar que que no no es es null*/ Try{ Player.createPlayer(mrl) } }
Procesamiento Seleccionar las opciones de procesamiento de cada track Processor.getTrackControls() Convertir datos multimedia de un formato a otro trackcontrol.setformat() Especificar el destino de los datos DataSink sink; sink; dest dest = new new MediaLocator(file://newfile.wav); Sink=createDataSink(processor.getDataOutput(),dest); Sink.open(); Sink.start();
Captura de datos Para capturar datos multimedia Localizar un dispositivo de captura y obtener información acerca del dispositivo CaptureDeviceManager.getDeviceList(Format...) CaptureDeviceInfo info; info=capturedevicemanaget(getdevice( devicename )); Obtener un MediaLocator sobre el dispositivo para crear un DataSource y crear e iniciar un Player o un Processor P=Manager.createRealizedPlayer(info.getLocator());...
Captura de datos multimedia Almacenar los datos multimedia en ficheros Capturar y reproducir Audio y Vídeo en vivo
Transmisión de Datos en Tiempo Real Sesion RTP: Se identifica por una dirección de red y un par de puertos (datos y control) SessionManager: Coordina una sesion RTP
RTP Recepción Crear un MediaLocator a partir de una sesión RTP rtp://address:port[:ssrc]/content-type/[ttl] EJ. Rtp://224.144.251.104:49150/audio/1 Crear un Player Cuando hay varios flujos (de un mismo medio) es necesario utilizar un SessionManager Transmisión Crear e inicializar un SessionManager Construir un Processor que capture el DataSource Establecer la salida del Processor en un formato adecuado para su transmisión mediante RTP Invocar createsendstream sobre el objeto SessionManager pasando la salida del procesador como DataSource