+ All Categories
Home > Technology > Desarrollando filtros para Kurento

Desarrollando filtros para Kurento

Date post: 16-Jul-2015
Category:
Upload: david-fernandez-lopez
View: 138 times
Download: 9 times
Share this document with a friend
27
Real-time Multimedia Stream Processing Developing rich multimedia applications with Kurento Desarrollando filtros para Kurento [email protected] http://www.kurento.org Open APIs for Open Minds
Transcript
Page 1: Desarrollando filtros para Kurento

Real-time Multimedia Stream Processing

Developing rich multimedia applications with Kurento Desarrollando filtros para Kurento

[email protected]://www.kurento.org

Open APIs for Open Minds

Page 2: Desarrollando filtros para Kurento

¿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

Page 3: Desarrollando filtros para Kurento

¿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

Page 4: Desarrollando filtros para Kurento

¿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

Page 5: Desarrollando filtros para Kurento

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

Page 6: Desarrollando filtros para Kurento

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.

Page 7: Desarrollando filtros para Kurento

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.

Page 8: Desarrollando filtros para Kurento

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

Page 9: Desarrollando filtros para Kurento

Desarrollando un filtro para Gstreamer con OpenCV

● Estructura del proyecto.

9

Page 10: Desarrollando filtros para Kurento

Desarrollando un filtro para Gstreamer con OpenCV

KMS

10

Page 11: Desarrollando filtros para Kurento

Desarrollando un filtro para Gstreamer con OpenCV

KMS

11

Page 12: Desarrollando filtros para Kurento

Desarrollando un filtro para Gstreamer con OpenCV

KMS

12

Page 13: Desarrollando filtros para Kurento

Desarrollando un filtro para Gstreamer con OpenCV

KMS

13

Page 14: Desarrollando filtros para Kurento

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

Page 15: Desarrollando filtros para Kurento

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

Page 16: Desarrollando filtros para Kurento

Generando un módulo para Kurento

● Kurento Model Descriptor (kmd)

16

Page 17: Desarrollando filtros para Kurento

Generando un módulo para Kurento

17

● Fichero CMakeLists.txt

Page 18: Desarrollando filtros 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

18

Generando un módulo para Kurento

Page 19: Desarrollando filtros 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

Page 20: Desarrollando filtros 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

20

Page 21: Desarrollando filtros 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

21

Page 22: Desarrollando filtros 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

22

Page 23: Desarrollando filtros para Kurento

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

23

Page 24: Desarrollando filtros para Kurento

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

Page 25: Desarrollando filtros para Kurento

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

}

Page 26: Desarrollando filtros para Kurento

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

Page 27: Desarrollando filtros para Kurento

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

Muchas gracias por vuestra atención

[email protected]

27


Recommended