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

Post on 24-Jan-2021

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related