View
1
Download
0
Category
Preview:
Citation preview
ProgramaciProgramacióón con n con Java Media Java Media FrameworkFramework
Aplicaciones TelemAplicaciones Telemááticas Avanzadasticas Avanzadas
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 redCámarasMicrófonosDifusiones en directo (live broadcast)
Conceptos y Definiciones
El formato en el que los datos son almacenados se denomina content-typeUn 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 multiplexadosEl 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 videoEl 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 FILEREMOTO, 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 elflujo de datos (RTP)
MediumMediumMedium
QuickTimeAVIIndeo
HighHighHighQuickTime
AVIRTP
JPEG
LowMediumMedium
QuickTimeAVIRTP
H.263
MediumMediumLowAVIRTPH.261
HighHighHighMPEGMPEG-1
HighLowMedium
AVIQuickTime
Cinepak
BandwidthRequirements
CPU RequirementsQualityContent TypeFormat
LowMediumMedium
WAVRTP
G.723.1
LowLowLowWAVRTPGSM
MediumHighHighMPEGMPEGLayer3
HighHighHighMPEGMPEG-1
MediumMediumMedium
AVIQuickTime
WAVRTP
ADPCM
(DVI,IMA4)
HighLowLow
AVIQuickTime
WAVRTP
Mu-Law
HighLowHighAVI
QuickTimeWAV
PCM
BandwidthRequirements
CPU RequirementsQualityContent TypeFormat
Formatos de VídeoFormatos de Vídeo
Formatos de AudioFormatos 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 TiempoPrecisión de nanosegundos
ManagersLa 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 PlayersProcessors, DataSources y DataSinks.PackageManager: Paquetes de clases JMF que implementan Players Processors, DataSources y DataSinkspropios. CaptureDeviceManager: Dispositivos de captura disponiblesPlugInManager: Componentes de procesamiento
Modelos de JMF (II)
Modelo de EventosLos objetos utilizan un mecanismo basado en eventos para informar del estado.
Clase MediaEventLas subclases de la clase MediaEvent identifican tipos de eventos particulares.Para recibir notificaciones cuando se envía un evento es necesario implementar la interfaz listeneradecuada y registrarse como clase listener
Modelos de JMF (III): Modelo de Datos
Un objeto DataSource encapsula:La localización de la información multimediaEl protocolo y el software utilizado para su distribución
Un objeto DataSource se identifica por:MediaLocatorURL
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 datosPullDataSource: El cliente inicia la transferencia de datos y controla el flujo de datos desde los PullDatasource. Hay PullDataSource y PullBufferdataSource. Ej. HTTP, FILEPushDataSource: 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 SourceCloneableMerging. 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 estadoDos tipos de Controladores:
PlayerProcessor
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 ficheroEscribir datos a la redFuncionar como un difusor RTP
Extensibilidad de JMF
Es posible implementar nuevos componentes que obtengan, procesen o traten datos multimedia
MediaHandler: Leen datos de un DatasourcePlayerProcessorDataSinkMediaProxy: Transforma un DataSource en otro
DataSource
Presentación Multimedia en JMF
Processor en general y Player en particularCreación: a través del Manager
Manager.createPlayer()Manager.createProcessor()
Creación en estado RealizedManager.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 visualComponente de controlComponentes adicionales:
Control de Volumen (Gain), Barra de progreso, brillo y contraste, etc
•player.getVisualComponent()•player.getControlPanelComponent()•player.getGainControl().getControlComponent()
•player.getVisualComponent()•player.getControlPanelComponent()•player.getGainControl().getControlComponent()
Definición de interfaces propias:Implementar componentes GUIInvocar los métodos del Player adecuados en respuesta de las acciones del usuarioRegistrar estos componentes como ControllerListenerpara que reciban loe eventos lanzados por el Playercuando cambia de estado
Player
Comenzar presentación/reproducción
Parar presentación/reproducción
Liberar los recursos
Consulta de los parámetros del Player
•player.start()•player.start()
•player.stop()•Player.setStopTime()•player.stop()•Player.setStopTime()
•player.deallocate()•player.deallocate()
•player.getMediaTime()•player.getDuration()•player.getRate()
•player.getMediaTime()•player.getDuration()•player.getRate()
Player
Sincronización de varios flujos
Presentación de Flujos de Datos RTP
•player1.setTimeBase(player2.getTimeBase()•player1.setTimeBase(player2.getTimeBase()
•String URL=“rtp://224.144.251.104:49150/audio/1•MediaLocator mrl=new MediaLocator(url);•/*comprobar que no es null*/•Try{
•Player.createPlayer(mrl)•}
•String URL=“rtp://224.144.251.104:49150/audio/1•MediaLocator mrl=new MediaLocator(url);•/*comprobar que no es null*/•Try{
•Player.createPlayer(mrl)•}
Procesamiento
Seleccionar las opciones de procesamiento de cada track
Convertir datos multimedia de un formato a otro
Especificar el destino de los datos•trackControl.setFormat()•trackControl.setFormat()
•Processor.getTrackControls()•Processor.getTrackControls()
•DataSink sink;•dest = new MediaLocator(file://newfile.wav);•Sink=createDataSink(processor.getDataOutput(),dest);•Sink.open();•Sink.start();
•DataSink sink;•dest = new MediaLocator(file://newfile.wav);•Sink=createDataSink(processor.getDataOutput(),dest);•Sink.open();•Sink.start();
Captura de datos
Para capturar datos multimediaLocalizar un dispositivo de captura y obtener información acerca del dispositivo
Obtener un MediaLocator sobre el dispositivo para crear un DataSource y crear e iniciar un Player o un Processor
•CaptureDeviceManager.getDeviceList(Format ...)•CaptureDeviceInfo info;•info=CaptureDeviceManaget(getDevice(“devicename”));
•CaptureDeviceManager.getDeviceList(Format ...)•CaptureDeviceInfo info;•info=CaptureDeviceManaget(getDevice(“devicename”));
•P=Manager.createRealizedPlayer(info.getLocator());•...
•P=Manager.createRealizedPlayer(info.getLocator());•...
Captura de datos multimedia
Almacenar los datos multimedia en ficherosCapturar 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ónCrear 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 PlayerCuando hay varios flujos (de un mismo medio) es necesario utilizar un SessionManager
TransmisiónCrear e inicializar un SessionManagerConstruir un Processor que capture el DataSourceEstablecer la salida del Processor en un formato adecuado para su transmisión mediante RTPInvocar createSendStream sobre el objeto SessionManager pasando la salida del procesador como DataSource
Recommended