programación con java media framework - lccpinilla/jmf.pdf · 2013. 11. 5. · avi rtp jpeg medium...

24
Programaci Programaci ó ó n con n con Java Media Java Media Framework Framework Aplicaciones Telem Aplicaciones Telem á á ticas Avanzadas ticas Avanzadas

Upload: others

Post on 24-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

ProgramaciProgramacióón con n con Java Media Java Media FrameworkFramework

Aplicaciones TelemAplicaciones Telemááticas Avanzadasticas Avanzadas

Page 2: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 3: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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)

Page 4: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 5: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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)

Page 6: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 7: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 8: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 9: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 10: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 11: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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.

Page 12: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 13: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 14: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 15: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 16: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 17: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 18: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 19: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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)•}

Page 20: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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();

Page 21: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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());•...

Page 22: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

Captura de datos multimedia

Almacenar los datos multimedia en ficherosCapturar y reproducir Audio y Vídeo en vivo

Page 23: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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

Page 24: Programación con Java Media Framework - LCCpinilla/JMF.pdf · 2013. 11. 5. · AVI RTP JPEG Medium Low Mediu m QuickTime AVI RTP H.263 Low Medium Medium AVI RTP H.261 MPEG High High

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