desarrollando filtros para kurento

Post on 16-Jul-2015

138 Views

Category:

Technology

9 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Real-time Multimedia Stream Processing

Developing rich multimedia applications with Kurento Desarrollando filtros para Kurento

d.fernandezlop@gmail.comhttp://www.kurento.org

Open APIs for Open Minds

¿Qué es un filtro?

• Es un MediaElement con una entrada y n salidas.

• Permite procesar frame a frame todo el flujo de media.

– Recibe media.– Procesa las imágenes.– Envía el media a n destinatarios.

KMS

2

¿Qué es un filtro?

KMS

3

Media PipelineMedia Pipeline

Sin

kS

ink

SR

CS

RC

Sin

kS

ink

SR

CS

RC

Sin

kS

ink

SR

CS

RC

¿Qué es un filtro?

KMS

4

Sin

kS

ink

SR

CS

RC

Sin

kS

ink

Sin

kS

ink

SR

CS

RC

Sin

kS

ink

SR

CS

RC

Sin

kS

ink

SR

CS

RC

Sin

kS

ink

SR

CS

RC

WebRtcEndpoint

MirrorFilter PointerDetectorFilter

ChromaFilter FaceOverlayFilter

Media Pipeline

Events (buttons)Change faceChange background

Arquitectura de Kurento

5

Kurento Media ServerKurento Media Server

Capa de transporte ( Apache Thrift)Capa de transporte ( Apache Thrift)

Kurento APIsKurento APIs

ClientesClientes

RecubrimientoRecubrimientoC++C++

ElementosElementosGStreamerGStreamer

KURENTOKURENTOMODELMODEL

DESCRIPTORDESCRIPTOR

GStreamer

6

● Librería C para el desarrollo de aplicaciones multimedia.

● Incluye elementos para reproducir y manejar diferentes tipos de media.

● Desarrollo basado en módulos.● Gran comunidad de desarrolladores.

OpenCV

7

● Librería C/C++ para el desarrollo de aplicaciones de visión artificial.

● Facilita el acceso a la información de una imagen.

● Gran número de métodos implementados.

● En constante desarrollo.● Mucho código en internet.

Desarrollando un filtro para Gstreamer con OpenCV

● Independiente de la arquitectura de Kurento.

● Basado en el proyecto kms-plugin-sample disponible en:

http://github.com/Kurento/kms-plugin-sample

8

Desarrollando un filtro para Gstreamer con OpenCV

● Estructura del proyecto.

9

Desarrollando un filtro para Gstreamer con OpenCV

KMS

10

Desarrollando un filtro para Gstreamer con OpenCV

KMS

11

Desarrollando un filtro para Gstreamer con OpenCV

KMS

12

Desarrollando un filtro para Gstreamer con OpenCV

KMS

13

Desarrollando un filtro para Gstreamer con OpenCV

KMS

14

● Para probar nuestro filtro:

● gst-launch-1.0 --gst-plugin-path=. v4l2src ! videoconvert ! samplefilter type=1 ! videoconvert ! autovideosink

Generando un módulo para Kurento

● Kurento Model Descriptor (kmd)

– Fichero en formato JSON que describe nuestro módulo.

– En él se describen el constructor, los métodos y las propiedades del filtro.

– Además se especifica la versión del módulo y sus dependencias.

*Disponible a partir de Kurento 5.0.0

15

Generando un módulo para Kurento

● Kurento Model Descriptor (kmd)

16

Generando un módulo para Kurento

17

● Fichero CMakeLists.txt

● Kurento-module-tool + kmd + CMakeLists– Código C++

● Código de pegamento.● Implementación inicial de las clases del módulo.

– Código Java

– Código JavaScript

18

Generando un módulo para Kurento

Generando un módulo para Kurento

● Kurento-module-tool + kmd + CMakeLists– Código C++

● Código de pegamento.● Implementación inicial de las clases del módulo.

– Código Java

– Código JavaScript

19

Generando un módulo para Kurento

● Kurento-module-tool + kmd + CMakeLists– Código C++

● Código de pegamento.● Implementación inicial de las clases del módulo.

– Código Java

– Código JavaScript

20

Generando un módulo para Kurento

● Kurento-module-tool + kmd + CMakeLists– Código C++

● Código de pegamento.● Implementación inicial de las clases del módulo.

– Código Java

– Código JavaScript

21

Generando un módulo para Kurento

● Kurento-module-tool + kmd + CMakeLists– Código C++

● Código de pegamento.● Implementación inicial de las clases del módulo.

– Código Java

– Código JavaScript

22

Generando un módulo para Kurento● Desarrollo en la parte C++

23

Generando un módulo para Kurento

● Generación de código cliente

– Generar el código cliente para acceder desde las APIs de Kurento.

● Generar código Java y empaquetarlo utilizando maven.

● Generar código JavaScript y empaquetarlo utilizando npm.

24

Uso en aplicaciones cliente

● Uso en Java

25

public void onContentRequest(WebRtcContentSession contentSession) throws Exception {

MediaPipeline mp = contentSession.getMediaPipelineFactory().create();contentSession.releaseOnTerminate(mp);WebRtcEndpoint webRtcEndpoint = new WebRtcEndpoint().Builder(mp).build();SamplePlugin samplePlugin = new SamplePlugin().Builder(mp).build();samplePlugin.setFilterType (1);samplePlugin.setEdgeThreshold (125);webRtcEndpoint.connect (samplePlugin);samplePlugin.connect (webRtcEndpoint);contentSession.start (webRtcEndpoint);

}

Uso en aplicaciones cliente

● Uso en JavaScript*

26

var kwsMedia = yield KwsMedia(ws_uri); var pipeline = yield kwsMedia.create("MediaPipeline");

var webRtc = yield pipeline.create("WebRtcEndpoint");

var filter = yield pipeline.create("SamplePlugin");yield filter.setFilterType(1);yield filter.setEdgeThreshold(125);

var answer = yield webRtc.processOffer(offer);webRtcPeer.processSdpAnswer(answer);yield webRtc.connect(filter);yield filter.connect(webRtc);

*Utilizando generators de ECMAScript 6

Para colaborar con Kurentohttp://www.github.com/kurento

Muchas gracias por vuestra atención

d.fernandezlop@gmail.com

27

top related