SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
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
¿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
SinkSinkSRCSRC
SinkSink
SRCSRC
SinkSink
SRCSRC
¿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
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
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 Kurento
http://www.github.com/kurento
Muchas gracias por vuestra atención
d.fernandezlop@gmail.com
27

Más contenido relacionado

Similar a Desarrollando filtros para Kurento

Desarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con PythonDesarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con Python
Manuel Pérez
 
Meterpreter en android el desembarco en tu smartphone
Meterpreter en android   el desembarco en tu smartphoneMeterpreter en android   el desembarco en tu smartphone
Meterpreter en android el desembarco en tu smartphone
JASENT
 

Similar a Desarrollando filtros para Kurento (20)

Desarrollo de Aplicaciones Metro en Windows 8
Desarrollo de Aplicaciones Metro en Windows 8Desarrollo de Aplicaciones Metro en Windows 8
Desarrollo de Aplicaciones Metro en Windows 8
 
Clase_01.pdf
Clase_01.pdfClase_01.pdf
Clase_01.pdf
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Software libre en la oficina técnica.
Software libre en la oficina técnica.Software libre en la oficina técnica.
Software libre en la oficina técnica.
 
App engine
App engineApp engine
App engine
 
Mq conceptos y programacion as400
Mq conceptos y programacion as400Mq conceptos y programacion as400
Mq conceptos y programacion as400
 
Backbeam
BackbeamBackbeam
Backbeam
 
Creando un Theme con WP Rest API
Creando un Theme con WP Rest APICreando un Theme con WP Rest API
Creando un Theme con WP Rest API
 
Final Degree Project SMIT
Final Degree Project SMITFinal Degree Project SMIT
Final Degree Project SMIT
 
Optimización de Contenido Flash para Móviles
Optimización de Contenido Flash para MóvilesOptimización de Contenido Flash para Móviles
Optimización de Contenido Flash para Móviles
 
Desarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con PythonDesarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con Python
 
Redes
RedesRedes
Redes
 
Acelerar ya no es suficiente #RMC19
Acelerar ya no es suficiente #RMC19Acelerar ya no es suficiente #RMC19
Acelerar ya no es suficiente #RMC19
 
El futuro de las tecnologías frontend y su impacto en la conversión
WebAssembly
El futuro de las tecnologías frontend y su impacto en la conversión
WebAssemblyEl futuro de las tecnologías frontend y su impacto en la conversión
WebAssembly
El futuro de las tecnologías frontend y su impacto en la conversión
WebAssembly
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 
Meterpreter en android el desembarco en tu smartphone
Meterpreter en android   el desembarco en tu smartphoneMeterpreter en android   el desembarco en tu smartphone
Meterpreter en android el desembarco en tu smartphone
 
Alto rendimiento en la web
Alto rendimiento en la webAlto rendimiento en la web
Alto rendimiento en la web
 
Manual jk
Manual jkManual jk
Manual jk
 
Manual jk
Manual jkManual jk
Manual jk
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (15)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

Desarrollando filtros para Kurento

  • 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. ¿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. ¿Qué es un filtro? KMS 3 Media PipelineMedia Pipeline SinkSinkSRCSRC SinkSink SRCSRC SinkSink SRCSRC
  • 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. 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. 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. 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. 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. Desarrollando un filtro para Gstreamer con OpenCV ● Estructura del proyecto. 9
  • 10. Desarrollando un filtro para Gstreamer con OpenCV KMS 10
  • 11. Desarrollando un filtro para Gstreamer con OpenCV KMS 11
  • 12. Desarrollando un filtro para Gstreamer con OpenCV KMS 12
  • 13. Desarrollando un filtro para Gstreamer con OpenCV KMS 13
  • 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. 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. Generando un módulo para Kurento ● Kurento Model Descriptor (kmd) 16
  • 17. Generando un módulo para Kurento 17 ● Fichero CMakeLists.txt
  • 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. 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. 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. 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. 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. Generando un módulo para Kurento ● Desarrollo en la parte C++ 23
  • 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. 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. 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. Para colaborar con Kurento http://www.github.com/kurento Muchas gracias por vuestra atención d.fernandezlop@gmail.com 27