Real-time Multimedia Stream Processing
Developing rich multimedia applications with Kurento
Desarrollando filtros para Kur...
¿Qué es un filtro?
• Es un MediaElement con una entrada y n
salidas.
• Permite procesar frame a frame todo el
flujo de med...
¿Qué es un filtro?
KMS
3
Media PipelineMedia Pipeline
SinkSinkSRCSRC
SinkSink
SRCSRC
SinkSink
SRCSRC
¿Qué es un filtro?
KMS
4
SinkSinkSRCSRC
SinkSink
SinkSink
SRCSRC
SinkSink
SRCSRC
SinkSink
SRCSRC
SinkSink
SRCSRC
WebRtcEnd...
Arquitectura de Kurento
5
Kurento Media ServerKurento Media Server
Capa de transporte ( Apache Thrift)Capa de transporte (...
GStreamer
6
●
Librería C para el desarrollo de
aplicaciones multimedia.
●
Incluye elementos para reproducir y
manejar dife...
OpenCV
7
●
Librería C/C++ para el desarrollo de
aplicaciones de visión artificial.
●
Facilita el acceso a la información d...
Desarrollando un filtro para
Gstreamer con OpenCV
●
Independiente de la arquitectura de
Kurento.
●
Basado en el proyecto
k...
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=...
Generando un módulo para Kurento
●
Kurento Model Descriptor (kmd)
– Fichero en formato JSON que describe
nuestro módulo.
–...
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ó...
Generando un módulo para Kurento
●
Kurento-module-tool + kmd + CMakeLists
– Código C++
●
Código de pegamento.
●
Implementa...
Generando un módulo para Kurento
●
Kurento-module-tool + kmd + CMakeLists
– Código C++
●
Código de pegamento.
●
Implementa...
Generando un módulo para Kurento
●
Kurento-module-tool + kmd + CMakeLists
– Código C++
●
Código de pegamento.
●
Implementa...
Generando un módulo para Kurento
●
Kurento-module-tool + kmd + CMakeLists
– Código C++
●
Código de pegamento.
●
Implementa...
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...
Uso en aplicaciones cliente
●
Uso en Java
25
public void onContentRequest(WebRtcContentSession contentSession) throws
Exce...
Uso en aplicaciones cliente
●
Uso en JavaScript*
26
var kwsMedia = yield KwsMedia(ws_uri);
var pipeline = yield kwsMedia.c...
Para colaborar con Kurento
http://www.github.com/kurento
Muchas gracias por vuestra atención
d.fernandezlop@gmail.com
27
Próxima SlideShare
Cargando en…5
×

Desarrollando filtros para Kurento

397 visualizaciones

Publicado el

Breve introducción al desarrollo de filtros en Kurento.

Publicado en: Tecnología
0 comentarios
1 recomendación
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
397
En SlideShare
0
De insertados
0
Número de insertados
13
Acciones
Compartido
0
Descargas
3
Comentarios
0
Recomendaciones
1
Insertados 0
No insertados

No hay notas en la diapositiva.

Desarrollando filtros para Kurento

  1. 1. Real-time Multimedia Stream Processing Developing rich multimedia applications with Kurento Desarrollando filtros para Kurento d.fernandezlop@gmail.com http://www.kurento.org Open APIs for Open Minds
  2. 2. ¿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
  3. 3. ¿Qué es un filtro? KMS 3 Media PipelineMedia Pipeline SinkSinkSRCSRC SinkSink SRCSRC SinkSink SRCSRC
  4. 4. ¿Qué es un filtro? KMS 4 SinkSinkSRCSRC SinkSink SinkSink SRCSRC SinkSink SRCSRC SinkSink SRCSRC SinkSink SRCSRC WebRtcEndpoint MirrorFilter PointerDetectorFilter ChromaFilter FaceOverlayFilter Media Pipeline Events (buttons)Change faceChange background
  5. 5. Arquitectura de Kurento 5 Kurento Media ServerKurento Media Server Capa de transporte ( Apache Thrift)Capa de transporte ( Apache Thrift) Kurento APIsKurento APIs ClientesClientes RecubrimientoRecubrimiento C++C++ ElementosElementos GStreamerGStreamer KURENTOKURENTO MODELMODEL DESCRIPTORDESCRIPTOR
  6. 6. 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.
  7. 7. 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.
  8. 8. 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
  9. 9. Desarrollando un filtro para Gstreamer con OpenCV ● Estructura del proyecto. 9
  10. 10. Desarrollando un filtro para Gstreamer con OpenCV KMS 10
  11. 11. Desarrollando un filtro para Gstreamer con OpenCV KMS 11
  12. 12. Desarrollando un filtro para Gstreamer con OpenCV KMS 12
  13. 13. Desarrollando un filtro para Gstreamer con OpenCV KMS 13
  14. 14. 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
  15. 15. 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
  16. 16. Generando un módulo para Kurento ● Kurento Model Descriptor (kmd) 16
  17. 17. Generando un módulo para Kurento 17 ● Fichero CMakeLists.txt
  18. 18. ● 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
  19. 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 19
  20. 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 20
  21. 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 21
  22. 22. 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
  23. 23. Generando un módulo para Kurento ● Desarrollo en la parte C++ 23
  24. 24. 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
  25. 25. 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); }
  26. 26. 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
  27. 27. Para colaborar con Kurento http://www.github.com/kurento Muchas gracias por vuestra atención d.fernandezlop@gmail.com 27

×