SlideShare uma empresa Scribd logo
1 de 41
www.kurento.org
Developing rich multimedia applications with Kurento
Developing rich multimedia applications with
Kurento: a tutorial for JavaScript developers
lulop@kurento.org
http://www.kurento.org
http://www.nubomedia.eu
http://www.fi-ware.org
http://ec.europa.eu
www.kurento.org
WebRTC technologies from the
perspective of a developer
2
Developing
the client side
Developing the
infrastructure
side
Before WebRTC
First wave of
WebRTC technologies
Second wave of
WebRTC technologies
Begin End Begin End
• APIs
• Standards
• FOSS
• Coherent APIs
• Standards
• FOSS
• Multiplatform
Begin End
• APIs
• Standards
• FOSS
• Platforms
• Out of the box
capabilities
2012 2014
www.kurento.org
What’s a WebRTC infrastructure
3
Peer-to-Peer WebRTC Application (without media infrastructure)
WebRTC video stream
WebRTC Application with media infrastructure
Media infrastructure
www.kurento.org
Some WebRTC media infrastructure
providers
4
www.kurento.org
Media infrastructure common
capabilities
5
Transcoding media infrastructure
VP8 H.264
MCU media infrastructures
Recording media infrastructure
www.kurento.org
Can’t we go beyond?
Media is
here
Media got
there
Media got
there
Analyze
Transform
Store
Transcoding
MCU
Recording
Enrich
Augment
Adapt
Sensors
Context
Events
Media is
here
What WebRTC
infrastructures are
• Transcoding
• MCU
• Recording
What WebRTC
infrastructures should be
• Flexible processing
• Augmented reality
• Blending
• Mixing
• Analyzing
• Etc.
6
www.kurento.org
•Interoperable media exchange (multiplatform/multiprotocol)
•WebRTC, RTP, HTTP (video tag), etc.
•Standard capabilities Capabilities
•Transcoding, MCU, recording
•Advanced capabilities
•Computer vision, augmented reality, mixing, blending, etc.
Multimedia infrastructure
• REST API
• JavaScript API
• Java API
APIs
• LGPL 2.1
Is distributed through a flexible FOSS license
What’s Kurento
7
www.kurento.org
Future
Internet
Multimedia
Infrastructure
Simple
Development
APIs
Kurento: the equation
8
www.kurento.org
Kurento Media Server (KMS): the
nucleus of Kurento
• KMS is a middleware for media streams
– Receives the stream
– Process the stream
– Issues the stream
Send
Receive
Analyze
Augment
Enrich
Transform
Transcode
Record
Process
Replicate
Media
Source
Media
Sink
KMS
9
www.kurento.org
The Media API: The API for accessing
KMS capabilities
Send
Receive
Analyze
Augment
Enrich
Transform
Transcode
Record
Process
Replicate
Media
Source
Media
Sink
KMS
Java
Media API
JavaScript
Media API
REST
API
Applications define the processing
of streams getting through KMS
10
www.kurento.org
Media API: Media Elements and Media
Pipelines
SinkSRC
Sink
SRC
SRCSink
Sink
Media Element
• Provides a specific media
functionality
› Send/receive media
› Process media
› Transform media
• Exchange media through
› Sources
› Sinks
Media pipeline
• Chain of media elements
implementing the desired media
logic.
• The Media API provides the
capability of creating media
pipelines by joining media
elements of the toolbox
Media Element
Sink
SRC
11
www.kurento.org
The Lego Game: Developers create
applications connecting media elements
Protocols
& Codecs
Computer
Vision
Augmented
Reality
Mul sensory
Mul media
Media
Repository
IPTV
Integra on
Group
Communica ons
Sink%
H pEndpoint
Sink%SRC%
RtpEndpoint
SRC$
DataChannelEndpointSink%SRC%
WebRtcEndpoint
Sink%
SRC%
BarCodeReader
Sink%
SRC%
PointerTracker
Sink%
SRC%
FaceDetector
Sink%
SRC%
FaceOverlay
Sink%
SRC%
ChromaFilter
Sink%
SRC%
HeartRateBlender
Sink%
RecorderEndpoint
SRC$
PlayerEndpoint
Sink%
CdnUpload
Sink%
IPTVConnector Mixer
SinkSRC
Sink
SRC
Sink
SRCSink
Sink
Application 2
Sink
SRC
Sink
SRCSink
SinkSRC
Sink
Application 3
SinkSRC
SRCSink
SRC Sink
SinkSRC
Application 1
Toolbox of media elements
12
www.kurento.org
Media API: trivial example (JavaScript)
kwsMedia.create("MediaPipeline", function(error, pipeline){
pipeline.create("HttpGetEndpoint", function(error, httpGetEndpoint){
pipeline.create("PlayerEndpoint", {uri : file_uri}, function(error, playerEndpoint){
playerEndpoint.connect(httpGetEndpoint, function(error){
httpGetEndpoint.getUrl(function(error, url){
videoInput.src = url;
});
playerEndpoint.play(function(error){
});
});
});
});
});
Media Pipeline (inside KMS)
HttpGetEndpoint
Media from
file or URI
HTTP media
streaming
Sink
SRC
PlayerEndpoint
13
www.kurento.org
Kurento Architecture: putting it all
together
Kurento Media Server (KMS)
Receive
Video
Augmented
Reality
Send
Video
Computer
Vision
Video Playing
and Recording
Kurento
WS JSON-RPC API
Media
Media
Kurento Media Connector (KMC)
14
SIP
Servlet
SOAP
HTTP
Servlet
REST
Browser
Developer code with
specific application
logic (pipelines)
Media capabilities of
the browser
Kurento Media API
Specific
logic
www.kurento.org
Application execution flow
Client
Code
Media Connector
(KMC)
Media
Server (KMS)
Crate pipeline/element…
(JSON-RPC)
Commands requesting
the creation of a pipeline
Reference to media object …
(JSON-RPC)
Pipeline
cereation
phase
Media
exchange
phase
1
2
Specific logic
(e.g. AAA)
Media
pipeline
creation
Media exchange between client and server
15
www.kurento.org
What about Node.js?
16
Kurento Media Server (KMS)
Receive
Video
Augmented
Reality
Send
Video
Computer
Vision
Video Playing
and Recording
Kurento
WS JSON-RPC API
Media
Media
Kurento Media Connector (KMC)
SIP
Servlet
SOAP
HTTP
Servlet
REST
Node.js Pipeline creation
+
AAA
Kurento Media API
Browser
Browser-side code
www.kurento.org
Let’s develop with Kurento
• What you need
– A Kurento instance
• You can install your own Kurento instance
– http://www.kurento.org/docs/current/
• You can launch a Kurento instance at the FI-LAB (FI-WARE project)
– http://lab.fi-ware.org
– FI-LAB is a cloud infrastructure making possible to execute instances from images or blueprints
• kws-media-api
– https://github.com/kurento/kws-media-api
– http://github.com/kurento/kws-utils
» Node.js
• npm install kws-media-api
• npm install kws-utils
» Browser
• bower install kws-media-api
• bower install kws-utils
• Getting help
– Kurento web site
• http://www.kurento.org
– Kurento mailing list
• https://groups.google.com/forum/#!forum/kurento
– Twitter
• @kurentoms
17
www.kurento.org
Kurento Hello World: Playing a file
with an HTML5 client
Media Pipeline
HttpGetEndpoint
Media from
file or URI
HTTP media
streaming
Sink
SRC
PlayerEndpoint
Kurento WS JSON-RPC API
Create / excec …
Ref / answer …
18
Kurento Media Connector (KMC)
www.kurento.org
Playing a file with an HTML5 client:
JavaScript code
const ws_uri = “ws://your.kurento.server:8888/thrift/ws/websocket”; //change this
const file_uri = “http://uri.to.video.file/”; //change this
var videoInput = document.getElementById("videoInput"); //video tag element
KwsMedia(ws_uri, function(kwsMedia){ //instantiate kws-media-api manager
kwsMedia.create("MediaPipeline", function(error, pipeline){ //instantiate pipeline
pipeline.create("HttpGetEndpoint", function(error, httpGetEndpoint){
pipeline.create("PlayerEndpoint", {uri : file_uri}, function(error, playerEndpoint){
playerEndpoint.connect(httpGetEndpoint, function(error){
httpGetEndpoint.getUrl(function(error, url){
videoInput.src = url;
});
playerEndpoint.play();
});
});
});
});
});
Source: https://github.com/Kurento/kws-tutorial/tree/develop/VideoTagPlayer
19
www.kurento.org
Playing a file with an HTML5 client:
HTML code
<!DOCTYPE html>
<html>
<head>
<meta charset="US-ASCII">
<title>Insert title here</title>
<script type="text/javascript" src="../api/kws-media-api.js"></script>
<script type="text/javascript" src="demo.js"></script>
</head>
<body>
<button id="playButton">Click to start playing</button><br>
<video id="videoInput" autoplay></video>
</body>
</html>
Source: https://github.com/Kurento/kws-tutorial/tree/develop/VideoTagPlayer
20
www.kurento.org
Playing a file with an HTML5 client:
See the example working
https://www.youtube.com/watch?v=Mp6UEL9U-v4
21
www.kurento.org
WebRTC loopback
Kurento Media Server
WebRTC
Streaming
SinkSRC
22
WebRtcEndpoint
www.kurento.org
WebRTC loopback: JavaScript code
23
Source: https://github.com/Kurento/kws-tutorial/tree/develop/WebRtcLoopback
const ws_uri = “ws://your.kurento.server:8888/thrift/ws/websocket”; //change this
var videoInput = document.getElementById("videoInput");
var videoOutput = document.getElementById("videoOutput");
var webRtcPeer = kwsUtils.WebRtcPeer.startSendRecv(videoInput, videoOutput, onOffer, onError);
function onOffer(offer){
KwsMedia(ws_uri, function(kwsMedia){
kwsMedia.create("MediaPipeline", function(error, pipeline){
pipeline.create("WebRtcEndpoint", function(error, webRtc){
webRtc.processOffer(offer, function(error, answer){
webRtcPeer.processSdpAnswer(answer);
});
webRtc.connect(webRtc);
});
});
});
};
23
www.kurento.org
WebRTC loopback: HTML code
24
<!DOCTYPE html>
<html>
<head>
<meta charset="US-ASCII">
<title>Insert title here</title>
<script type="text/javascript" src="../api/adapter.js"></script>
<script type="text/javascript" src="../api/kws-media-api.js"></script>
<script type="text/javascript" src="../api/kws-utils.js"></script>
<script type="text/javascript" src="demo.js"></script>
</head>
<body>
<button id="launchButton">Click me ...</button><br>
<div style="float: left; border: 2px solid black; margin: 5px;">
<h1>Local stream</h1>
<video id="videoInput" autoplay></video>
</div>
<div style="float:left; border: 2px solid black; margin: 5px;">
<h1>Remote stream</h1>
<video id="videoOutput" autoplay></video>
</div>
</body>
</html>
Source: https://github.com/Kurento/kws-tutorial/tree/develop/WebRtcLoopback
24
www.kurento.org
WebRTC loopback: see the example
working
25
https://www.youtube.com/watch?v=hUChVutQ2og
25
www.kurento.org
WebRTC with FaceOverlay
Media Pipeline
WebRTC
Streaming
SinkSRC
26
Sink
SRC
WebRtcEndpoint
FaceOverlayFilter
www.kurento.org
WebRTC with FaceOverlay: JavaScript
code
27
Source: https://github.com/Kurento/kws-tutorial/tree/develop/FaceOverlay
var webRtcPeer = kwsUtils.WebRtcPeer.startSendRecv(videoInput, videoOutput , onOffer, onError);
function onOffer(offer) {
KwsMedia(ws_uri, function(kwsMedia) {
kwsMedia.create("MediaPipeline", function(error, pipeline) {
pipeline.create("WebRtcEndpoint", function(error, webRtc) {
pipeline.create("FaceOverlayFilter”, function(error, filter) {
//hat_uri is the uri pointing to the overlay image to draw on top of detected faces
//These percent variables need to be defined to adjust overlay image to face box
filter.setOverlayedImage(hat_uri, offsetXPercent, offsetYPercent, widthPercent, heightPercent);
webRtc.connect(filter, function(error) {
filter.connect(webRtc, function(error) {
webRtc.processOffer(offer, function(error, answer) {
webRtcPeer.processSdpAnswer(answer);
});
…//many }); omited here for simplicity
});
27
www.kurento.org
WebRTC recorder
28
28
Media Pipeline
WebRTC
Streaming
SinkSRC
Sink
Media
to
file or
URI
Media Pipeline
WebRTC
Streaming
SinkSRC
Media
from
file or
URI
SRC
WebRtcEndpoint
WebRtcEndpoint
RecorderEndpoint
PlayerEndpoint
www.kurento.org
WebRTC Recorder: JavaScript code
webRtcPeer = kwsUtils.WebRtcPeer.startSendRecv(videoInput, videoOutput, onOffer, onError);
function onOffer(offer) {
KwsMedia(ws_uri, function(kwsMedia) {
kwsMedia.create('MediaPipeline', function(error, pipeline) {
pipeline.create('RecorderEndpoint', {uri : file_uri}, function(error, recorder) {
pipeline.create('WebRtcEndpoint', function(error, webRtv) {
webRtc.connect(recorder, function(error) {
recorder.record();
webRtc.connect(webRtc, function(error) {
webRtc.processOffer(offer, function(error, answer) {
webRtcPeer.processSdpAnswer(answer);
});
... }); //many }); omited here for simplicity
}
29 29
Source: https://github.com/Kurento/kws-tutorial/tree/develop/Recorder
www.kurento.org
WebRTC with Recorder: see the
example working
30
https://www.youtube.com/watch?v=wp5A4NZ-kd4
30
www.kurento.org
But … is this code beautiful?
31
31
Developers love spaghetti for eating,
but not for code
From that code structure
to this code structure
www.kurento.org
Avoiding the callback hell
• The hidden secret of the content API
– Every call to a kws-media-api returns a promise
• var p1= kwsMedia.create(“MediaPipeline”);
• p1.then(function(pipeline){…})
– Promises
• A proxy to a value not knows when the proxy is created
• Allows associating handlers to
– Value successfully obtained
– Error
• https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Global_Objects/Promise
• http://www.html5rocks.com/en/tutorials/es6/promises/
– Example
32 32
www.kurento.org
Are promises really useful for our
objectives?
• Developing with promises
– WebRTC loopack with FaceOverlay
• Source
– https://github.com/Kurento/kws-media-
api/tree/develop/example/WebRtcEndpoint-FaceOverlayFilter_promises_2
• Does structure improve?
– Not much
– Problems
• Nesting avoiding, but chaining isn’t much beautiful
• Nesting eliminated => closures eliminated
– Scope of variables (pipelines, elements, etc.) lost.
– Need to pass variables along on each call
• What’s the point of using promises then?
– Continue reading if you are the kind of guy of like living on the
edge …
33 33
www.kurento.org
Generators+co: the callback hell killer
• Generators
– Cooperative (non preemtive) simulation of synchronous
behavior on iterator functions by maintaining execution
state
• https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Guide/Iterators_and_Generators
– Allow multiple entry points for suspending and resuming
execution at certain locations.
– Available on EC6 (Harmony)
• Co
– Combines promises and generators
– Uses promises to “connect” generator exit and reentrance
– https://github.com/visionmedia/co
34
www.kurento.org
Revisiting the WebRTC with loopback
example
var webRtcPeer = kwsUtils.WebRtcPeer.startSendRecv(videoInput, videoOutput, onOffer, onError);
function onOffer(offer){
co(function*(){
var kwsMedia = yield KwsMedia(ws_uri);
var pipeline = yield kwsMedia.create("MediaPipeline");
var webRtc = yield pipeline.create("WebRtcEndpoint");
var filter = yield pipeline.create("FaceOverlayFilter");
//you need to define the hat_uri and percents variables
yield filter.setOverlayedImage(hat_uri, offsetXPercent, offsetYPercent, widthPercent, heightPercent);
var answer = yield webRtc.processOffer(offer);
webRtcPeer.processSdpAnswer(answer);
yield webRtc.connect(filter);
yield filter.connect(webRtc);
})();
}
35
Source code of previous examples using generators:
https://github.com/Kurento/kws-tutorial/tree/develop/WebRtcLoopback
https://github.com/Kurento/kws-tutorial/tree/develop/FaceOverlayGenerator
https://github.com/Kurento/kws-tutorial/tree/develop/RecorderGenerator
www.kurento.org
Isn’t it beautiful ?
36
www.kurento.org
Let’s do some more complex stuff: a
WebRTC game
Media Pipeline
SinkSRC
Sink
SRC
Sink
SRC
37
Sink
SRC
Sink
WebRtcEndpoint
MirrorFilter PointerDetectorFilter
FaceOverlayFilter
RecorderEndpoint
www.kurento.org
WebRTC game: code
38
Source:
https://github.com/Kurento/kws-tutorial/tree/develop/RecorderFilterGenerator
38
www.kurento.org
WebRTC game: see the example
working
39
https://www.youtube.com/watch?v=5eJRnwKxgbY
39
www.kurento.org
Summary and conclusions
• Kurento
– Open Source Softare
• LGPL v2.1
– Multimedia infrastructure for HTML5
• WebRTC
• HTML5
– Advanced media processing capabilities
• Recording, MCUs, Transcoding, Computer Vision, Augmented Reality, Mixing, Blending.
• kws-media-api
– Access Kurento capabilities from JavaScript
• Media elements and media pipelines
• Like a “Lego game”
– Beautiful code
• Promises
• Generators
• CO
40
www.kurento.org
Thank you
41
Suggestions, comments and complains:
lulop@kurento.org
http://www.kurento.org
http://www.github.com/kurento
Twitter: @Kurentoms
http://www.nubomedia.eu
http://www.fi-ware.org
http://ec.europa.eu

Mais conteúdo relacionado

Mais procurados

SIPREC RTPEngine Media Forking
SIPREC RTPEngine Media ForkingSIPREC RTPEngine Media Forking
SIPREC RTPEngine Media ForkingHossein Yavari
 
Tecnología iSCSI y Fiber Channel
Tecnología iSCSI y Fiber ChannelTecnología iSCSI y Fiber Channel
Tecnología iSCSI y Fiber ChannelJaime P
 
Signalilo: Visualizing Prometheus alerts in Icinga2 - Icinga Camp Zurich 2019
Signalilo: Visualizing Prometheus alerts in Icinga2 - Icinga Camp Zurich 2019Signalilo: Visualizing Prometheus alerts in Icinga2 - Icinga Camp Zurich 2019
Signalilo: Visualizing Prometheus alerts in Icinga2 - Icinga Camp Zurich 2019Icinga
 
Kubernetes Networking 101
Kubernetes Networking 101Kubernetes Networking 101
Kubernetes Networking 101Weaveworks
 
AWS re:Invent 2016: Deep Dive: AWS Direct Connect and VPNs (NET402)
AWS re:Invent 2016: Deep Dive: AWS Direct Connect and VPNs (NET402)AWS re:Invent 2016: Deep Dive: AWS Direct Connect and VPNs (NET402)
AWS re:Invent 2016: Deep Dive: AWS Direct Connect and VPNs (NET402)Amazon Web Services
 
40 - IDNOG03 - Bob Lau (Akamai) - BGP and Traffic Engineering
40 - IDNOG03  - Bob Lau (Akamai) - BGP and Traffic Engineering40 - IDNOG03  - Bob Lau (Akamai) - BGP and Traffic Engineering
40 - IDNOG03 - Bob Lau (Akamai) - BGP and Traffic EngineeringIndonesia Network Operators Group
 
Hashicorp Terraform Open Source vs Enterprise
Hashicorp Terraform Open Source vs EnterpriseHashicorp Terraform Open Source vs Enterprise
Hashicorp Terraform Open Source vs EnterpriseStenio Ferreira
 
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO Christian Posta
 
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDaysThe world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDaysCodeOps Technologies LLP
 
Using DASH and MPEG-2 TS
Using DASH and MPEG-2 TSUsing DASH and MPEG-2 TS
Using DASH and MPEG-2 TSAlex Giladi
 
IBM MQ Online Tutorials
IBM MQ Online TutorialsIBM MQ Online Tutorials
IBM MQ Online TutorialsBigClasses.com
 
REST APIs and MQ
REST APIs and MQREST APIs and MQ
REST APIs and MQMatt Leming
 
[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...
[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...
[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...BeMyApp
 
Video - FortiMail and FortiMail Cloud - April 2021.pptx
Video - FortiMail and FortiMail Cloud - April 2021.pptxVideo - FortiMail and FortiMail Cloud - April 2021.pptx
Video - FortiMail and FortiMail Cloud - April 2021.pptxEsminGadalaKattnMart
 
Best Network Performance Monitoring Tool
Best Network Performance Monitoring ToolBest Network Performance Monitoring Tool
Best Network Performance Monitoring ToolJoe Shestak
 
Building Open Source Identity Management with FreeIPA
Building Open Source Identity Management with FreeIPABuilding Open Source Identity Management with FreeIPA
Building Open Source Identity Management with FreeIPALDAPCon
 

Mais procurados (20)

SIPREC RTPEngine Media Forking
SIPREC RTPEngine Media ForkingSIPREC RTPEngine Media Forking
SIPREC RTPEngine Media Forking
 
Tecnología iSCSI y Fiber Channel
Tecnología iSCSI y Fiber ChannelTecnología iSCSI y Fiber Channel
Tecnología iSCSI y Fiber Channel
 
Signalilo: Visualizing Prometheus alerts in Icinga2 - Icinga Camp Zurich 2019
Signalilo: Visualizing Prometheus alerts in Icinga2 - Icinga Camp Zurich 2019Signalilo: Visualizing Prometheus alerts in Icinga2 - Icinga Camp Zurich 2019
Signalilo: Visualizing Prometheus alerts in Icinga2 - Icinga Camp Zurich 2019
 
Iperf Tutorial
Iperf Tutorial Iperf Tutorial
Iperf Tutorial
 
Kubernetes Networking 101
Kubernetes Networking 101Kubernetes Networking 101
Kubernetes Networking 101
 
AWS re:Invent 2016: Deep Dive: AWS Direct Connect and VPNs (NET402)
AWS re:Invent 2016: Deep Dive: AWS Direct Connect and VPNs (NET402)AWS re:Invent 2016: Deep Dive: AWS Direct Connect and VPNs (NET402)
AWS re:Invent 2016: Deep Dive: AWS Direct Connect and VPNs (NET402)
 
40 - IDNOG03 - Bob Lau (Akamai) - BGP and Traffic Engineering
40 - IDNOG03  - Bob Lau (Akamai) - BGP and Traffic Engineering40 - IDNOG03  - Bob Lau (Akamai) - BGP and Traffic Engineering
40 - IDNOG03 - Bob Lau (Akamai) - BGP and Traffic Engineering
 
Hashicorp Terraform Open Source vs Enterprise
Hashicorp Terraform Open Source vs EnterpriseHashicorp Terraform Open Source vs Enterprise
Hashicorp Terraform Open Source vs Enterprise
 
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
 
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDaysThe world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
 
Using DASH and MPEG-2 TS
Using DASH and MPEG-2 TSUsing DASH and MPEG-2 TS
Using DASH and MPEG-2 TS
 
IBM MQ Online Tutorials
IBM MQ Online TutorialsIBM MQ Online Tutorials
IBM MQ Online Tutorials
 
REST APIs and MQ
REST APIs and MQREST APIs and MQ
REST APIs and MQ
 
Overview of Message Queues
Overview of Message QueuesOverview of Message Queues
Overview of Message Queues
 
Roaming behavior and Client Troubleshooting
Roaming behavior and Client TroubleshootingRoaming behavior and Client Troubleshooting
Roaming behavior and Client Troubleshooting
 
[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...
[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...
[Android Codefest] Using the Second-Screen API & Intel® Wireless Display From...
 
Video - FortiMail and FortiMail Cloud - April 2021.pptx
Video - FortiMail and FortiMail Cloud - April 2021.pptxVideo - FortiMail and FortiMail Cloud - April 2021.pptx
Video - FortiMail and FortiMail Cloud - April 2021.pptx
 
Best Network Performance Monitoring Tool
Best Network Performance Monitoring ToolBest Network Performance Monitoring Tool
Best Network Performance Monitoring Tool
 
Breakout - Airheads Macau 2013 - Top 10 Tips from Aruba TAC
Breakout - Airheads Macau 2013 - Top 10 Tips from Aruba TAC Breakout - Airheads Macau 2013 - Top 10 Tips from Aruba TAC
Breakout - Airheads Macau 2013 - Top 10 Tips from Aruba TAC
 
Building Open Source Identity Management with FreeIPA
Building Open Source Identity Management with FreeIPABuilding Open Source Identity Management with FreeIPA
Building Open Source Identity Management with FreeIPA
 

Destaque

Developing rich multimedia applications with Kurento: a tutorial for Java Dev...
Developing rich multimedia applications with Kurento: a tutorial for Java Dev...Developing rich multimedia applications with Kurento: a tutorial for Java Dev...
Developing rich multimedia applications with Kurento: a tutorial for Java Dev...Luis Lopez
 
NUBOMEDIA: an elastic Platform as a Service (PaaS) cloud for interactive soci...
NUBOMEDIA: an elastic Platform as a Service (PaaS) cloud for interactive soci...NUBOMEDIA: an elastic Platform as a Service (PaaS) cloud for interactive soci...
NUBOMEDIA: an elastic Platform as a Service (PaaS) cloud for interactive soci...Luis Lopez
 
The future of multimedia communications and services: Kurento and it's role
The future of multimedia communications and services: Kurento and it's roleThe future of multimedia communications and services: Kurento and it's role
The future of multimedia communications and services: Kurento and it's roleLuis Lopez
 
FOSDEM 2016 - Creating rich WebRTC Applications with Kurento
FOSDEM 2016 - Creating rich WebRTC Applications with KurentoFOSDEM 2016 - Creating rich WebRTC Applications with Kurento
FOSDEM 2016 - Creating rich WebRTC Applications with KurentoLuis Lopez
 
kurento-nubomedia-first-steps-v1
kurento-nubomedia-first-steps-v1kurento-nubomedia-first-steps-v1
kurento-nubomedia-first-steps-v1Luis Lopez
 
Developing applications with Kurento
Developing applications with KurentoDeveloping applications with Kurento
Developing applications with KurentoLuis Lopez
 
WebRTC infrastructures in the large (with experiences on real cloud deployments)
WebRTC infrastructures in the large (with experiences on real cloud deployments)WebRTC infrastructures in the large (with experiences on real cloud deployments)
WebRTC infrastructures in the large (with experiences on real cloud deployments)Luis Lopez
 
Improving GStreamer performance on large pipelines: from profiling to optimiz...
Improving GStreamer performance on large pipelines: from profiling to optimiz...Improving GStreamer performance on large pipelines: from profiling to optimiz...
Improving GStreamer performance on large pipelines: from profiling to optimiz...Luis Lopez
 
Developing rich multimedia applications with FI-WARE.
Developing rich multimedia applications with FI-WARE.Developing rich multimedia applications with FI-WARE.
Developing rich multimedia applications with FI-WARE.Luis Lopez
 
Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...
Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...
Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...Luis Lopez
 
WebRTC business models beyond calls
WebRTC business models beyond callsWebRTC business models beyond calls
WebRTC business models beyond callsLuis Lopez
 
Implementing a WebRTC endpoint in GStreamer: challenges, problems and perspec...
Implementing a WebRTC endpoint in GStreamer: challenges, problems and perspec...Implementing a WebRTC endpoint in GStreamer: challenges, problems and perspec...
Implementing a WebRTC endpoint in GStreamer: challenges, problems and perspec...Luis Lopez
 
Recording and media manipulation of WebRTC streams
Recording and media manipulation of WebRTC streamsRecording and media manipulation of WebRTC streams
Recording and media manipulation of WebRTC streamsLuis Lopez
 
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )mganeko
 
Amazon Ec2 Application Design
Amazon Ec2 Application DesignAmazon Ec2 Application Design
Amazon Ec2 Application Designguestd0b61e
 
Server-side WebRTC Infrastructure
Server-side WebRTC InfrastructureServer-side WebRTC Infrastructure
Server-side WebRTC InfrastructureDialogic Inc.
 
MikroTik Multicast Routing [www.imxpert.co]
MikroTik Multicast Routing [www.imxpert.co]MikroTik Multicast Routing [www.imxpert.co]
MikroTik Multicast Routing [www.imxpert.co]Faisal Reza
 
Automating Management of Amazon EC2 Instances with Auto Scaling - March 2017 ...
Automating Management of Amazon EC2 Instances with Auto Scaling - March 2017 ...Automating Management of Amazon EC2 Instances with Auto Scaling - March 2017 ...
Automating Management of Amazon EC2 Instances with Auto Scaling - March 2017 ...Amazon Web Services
 

Destaque (19)

Developing rich multimedia applications with Kurento: a tutorial for Java Dev...
Developing rich multimedia applications with Kurento: a tutorial for Java Dev...Developing rich multimedia applications with Kurento: a tutorial for Java Dev...
Developing rich multimedia applications with Kurento: a tutorial for Java Dev...
 
NUBOMEDIA: an elastic Platform as a Service (PaaS) cloud for interactive soci...
NUBOMEDIA: an elastic Platform as a Service (PaaS) cloud for interactive soci...NUBOMEDIA: an elastic Platform as a Service (PaaS) cloud for interactive soci...
NUBOMEDIA: an elastic Platform as a Service (PaaS) cloud for interactive soci...
 
The future of multimedia communications and services: Kurento and it's role
The future of multimedia communications and services: Kurento and it's roleThe future of multimedia communications and services: Kurento and it's role
The future of multimedia communications and services: Kurento and it's role
 
FOSDEM 2016 - Creating rich WebRTC Applications with Kurento
FOSDEM 2016 - Creating rich WebRTC Applications with KurentoFOSDEM 2016 - Creating rich WebRTC Applications with Kurento
FOSDEM 2016 - Creating rich WebRTC Applications with Kurento
 
kurento-nubomedia-first-steps-v1
kurento-nubomedia-first-steps-v1kurento-nubomedia-first-steps-v1
kurento-nubomedia-first-steps-v1
 
Developing applications with Kurento
Developing applications with KurentoDeveloping applications with Kurento
Developing applications with Kurento
 
WebRTC infrastructures in the large (with experiences on real cloud deployments)
WebRTC infrastructures in the large (with experiences on real cloud deployments)WebRTC infrastructures in the large (with experiences on real cloud deployments)
WebRTC infrastructures in the large (with experiences on real cloud deployments)
 
Improving GStreamer performance on large pipelines: from profiling to optimiz...
Improving GStreamer performance on large pipelines: from profiling to optimiz...Improving GStreamer performance on large pipelines: from profiling to optimiz...
Improving GStreamer performance on large pipelines: from profiling to optimiz...
 
Developing rich multimedia applications with FI-WARE.
Developing rich multimedia applications with FI-WARE.Developing rich multimedia applications with FI-WARE.
Developing rich multimedia applications with FI-WARE.
 
Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...
Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...
Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...
 
WebRTC business models beyond calls
WebRTC business models beyond callsWebRTC business models beyond calls
WebRTC business models beyond calls
 
Implementing a WebRTC endpoint in GStreamer: challenges, problems and perspec...
Implementing a WebRTC endpoint in GStreamer: challenges, problems and perspec...Implementing a WebRTC endpoint in GStreamer: challenges, problems and perspec...
Implementing a WebRTC endpoint in GStreamer: challenges, problems and perspec...
 
Recording and media manipulation of WebRTC streams
Recording and media manipulation of WebRTC streamsRecording and media manipulation of WebRTC streams
Recording and media manipulation of WebRTC streams
 
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
 
Amazon Ec2 Application Design
Amazon Ec2 Application DesignAmazon Ec2 Application Design
Amazon Ec2 Application Design
 
Server-side WebRTC Infrastructure
Server-side WebRTC InfrastructureServer-side WebRTC Infrastructure
Server-side WebRTC Infrastructure
 
MikroTik Multicast Routing [www.imxpert.co]
MikroTik Multicast Routing [www.imxpert.co]MikroTik Multicast Routing [www.imxpert.co]
MikroTik Multicast Routing [www.imxpert.co]
 
Amazon ECS
Amazon ECSAmazon ECS
Amazon ECS
 
Automating Management of Amazon EC2 Instances with Auto Scaling - March 2017 ...
Automating Management of Amazon EC2 Instances with Auto Scaling - March 2017 ...Automating Management of Amazon EC2 Instances with Auto Scaling - March 2017 ...
Automating Management of Amazon EC2 Instances with Auto Scaling - March 2017 ...
 

Semelhante a Develop rich multimedia apps with Kurento

Nubomedia IETF96 hackthon - Kurento
Nubomedia IETF96 hackthon - KurentoNubomedia IETF96 hackthon - Kurento
Nubomedia IETF96 hackthon - KurentoIvan Gracia
 
Kurento - FI-WARE Bootcamp
Kurento - FI-WARE BootcampKurento - FI-WARE Bootcamp
Kurento - FI-WARE BootcampIvan Gracia
 
0150519-kurento.pdf
0150519-kurento.pdf0150519-kurento.pdf
0150519-kurento.pdfDejVoleti
 
Introduction to the Stream Oriented GE (Kurento v6)
Introduction to the Stream Oriented GE (Kurento v6)Introduction to the Stream Oriented GE (Kurento v6)
Introduction to the Stream Oriented GE (Kurento v6)Boni García
 
The Enterprise wants WebRTC -- and it needs Middleware to get it! (IIT RTC Co...
The Enterprise wants WebRTC -- and it needs Middleware to get it! (IIT RTC Co...The Enterprise wants WebRTC -- and it needs Middleware to get it! (IIT RTC Co...
The Enterprise wants WebRTC -- and it needs Middleware to get it! (IIT RTC Co...Brian Pulito
 
WebRTC ... GWT & in-browser computation
WebRTC ... GWT & in-browser computationWebRTC ... GWT & in-browser computation
WebRTC ... GWT & in-browser computationJooinK
 
WebRTC/Kurento/NUBOMEDIA Hackathon at IETF’96
WebRTC/Kurento/NUBOMEDIA Hackathon at IETF’96WebRTC/Kurento/NUBOMEDIA Hackathon at IETF’96
WebRTC/Kurento/NUBOMEDIA Hackathon at IETF’96Boni García
 
WebRTC - Is this a Game changer??
WebRTC - Is this a Game changer??WebRTC - Is this a Game changer??
WebRTC - Is this a Game changer??learjk
 
[workshop] The Revolutionary WebRTC
[workshop] The Revolutionary WebRTC[workshop] The Revolutionary WebRTC
[workshop] The Revolutionary WebRTCGiacomo Vacca
 
Nubomedia IETF96 hackathon - The platform
Nubomedia IETF96 hackathon - The platformNubomedia IETF96 hackathon - The platform
Nubomedia IETF96 hackathon - The platformIvan Gracia
 
Remixing Media on the Semantic Web (ISWC 2014 Tutorial) Pt 1 Media Fragment S...
Remixing Media on the Semantic Web (ISWC 2014 Tutorial) Pt 1 Media Fragment S...Remixing Media on the Semantic Web (ISWC 2014 Tutorial) Pt 1 Media Fragment S...
Remixing Media on the Semantic Web (ISWC 2014 Tutorial) Pt 1 Media Fragment S...LinkedTV
 
WebRTC: A front-end perspective
WebRTC: A front-end perspectiveWebRTC: A front-end perspective
WebRTC: A front-end perspectiveshwetank
 
The Web, After HTML5
The Web, After HTML5The Web, After HTML5
The Web, After HTML5Jonathan Jeon
 
WebRTC From Asterisk to Headline - MoNage
WebRTC From Asterisk to Headline - MoNageWebRTC From Asterisk to Headline - MoNage
WebRTC From Asterisk to Headline - MoNageChad Hart
 
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit PreconferenceWebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit PreconferenceTsahi Levent-levi
 
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)Saltlux zinyus
 

Semelhante a Develop rich multimedia apps with Kurento (20)

Nubomedia IETF96 hackthon - Kurento
Nubomedia IETF96 hackthon - KurentoNubomedia IETF96 hackthon - Kurento
Nubomedia IETF96 hackthon - Kurento
 
Kurento cpmx
Kurento cpmxKurento cpmx
Kurento cpmx
 
Kurento - FI-WARE Bootcamp
Kurento - FI-WARE BootcampKurento - FI-WARE Bootcamp
Kurento - FI-WARE Bootcamp
 
0150519-kurento.pdf
0150519-kurento.pdf0150519-kurento.pdf
0150519-kurento.pdf
 
WebRTC standards update (Jul 2014)
WebRTC standards update (Jul 2014)WebRTC standards update (Jul 2014)
WebRTC standards update (Jul 2014)
 
Introduction to the Stream Oriented GE (Kurento v6)
Introduction to the Stream Oriented GE (Kurento v6)Introduction to the Stream Oriented GE (Kurento v6)
Introduction to the Stream Oriented GE (Kurento v6)
 
The Enterprise wants WebRTC -- and it needs Middleware to get it! (IIT RTC Co...
The Enterprise wants WebRTC -- and it needs Middleware to get it! (IIT RTC Co...The Enterprise wants WebRTC -- and it needs Middleware to get it! (IIT RTC Co...
The Enterprise wants WebRTC -- and it needs Middleware to get it! (IIT RTC Co...
 
WebRTC ... GWT & in-browser computation
WebRTC ... GWT & in-browser computationWebRTC ... GWT & in-browser computation
WebRTC ... GWT & in-browser computation
 
WebRTC Seminar Report
WebRTC  Seminar ReportWebRTC  Seminar Report
WebRTC Seminar Report
 
WebRTC/Kurento/NUBOMEDIA Hackathon at IETF’96
WebRTC/Kurento/NUBOMEDIA Hackathon at IETF’96WebRTC/Kurento/NUBOMEDIA Hackathon at IETF’96
WebRTC/Kurento/NUBOMEDIA Hackathon at IETF’96
 
WebRTC - Is this a Game changer??
WebRTC - Is this a Game changer??WebRTC - Is this a Game changer??
WebRTC - Is this a Game changer??
 
Kurento FIWARE
Kurento FIWAREKurento FIWARE
Kurento FIWARE
 
[workshop] The Revolutionary WebRTC
[workshop] The Revolutionary WebRTC[workshop] The Revolutionary WebRTC
[workshop] The Revolutionary WebRTC
 
Nubomedia IETF96 hackathon - The platform
Nubomedia IETF96 hackathon - The platformNubomedia IETF96 hackathon - The platform
Nubomedia IETF96 hackathon - The platform
 
Remixing Media on the Semantic Web (ISWC 2014 Tutorial) Pt 1 Media Fragment S...
Remixing Media on the Semantic Web (ISWC 2014 Tutorial) Pt 1 Media Fragment S...Remixing Media on the Semantic Web (ISWC 2014 Tutorial) Pt 1 Media Fragment S...
Remixing Media on the Semantic Web (ISWC 2014 Tutorial) Pt 1 Media Fragment S...
 
WebRTC: A front-end perspective
WebRTC: A front-end perspectiveWebRTC: A front-end perspective
WebRTC: A front-end perspective
 
The Web, After HTML5
The Web, After HTML5The Web, After HTML5
The Web, After HTML5
 
WebRTC From Asterisk to Headline - MoNage
WebRTC From Asterisk to Headline - MoNageWebRTC From Asterisk to Headline - MoNage
WebRTC From Asterisk to Headline - MoNage
 
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit PreconferenceWebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
 
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
 

Último

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 

Último (20)

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 

Develop rich multimedia apps with Kurento

  • 1. www.kurento.org Developing rich multimedia applications with Kurento Developing rich multimedia applications with Kurento: a tutorial for JavaScript developers lulop@kurento.org http://www.kurento.org http://www.nubomedia.eu http://www.fi-ware.org http://ec.europa.eu
  • 2. www.kurento.org WebRTC technologies from the perspective of a developer 2 Developing the client side Developing the infrastructure side Before WebRTC First wave of WebRTC technologies Second wave of WebRTC technologies Begin End Begin End • APIs • Standards • FOSS • Coherent APIs • Standards • FOSS • Multiplatform Begin End • APIs • Standards • FOSS • Platforms • Out of the box capabilities 2012 2014
  • 3. www.kurento.org What’s a WebRTC infrastructure 3 Peer-to-Peer WebRTC Application (without media infrastructure) WebRTC video stream WebRTC Application with media infrastructure Media infrastructure
  • 4. www.kurento.org Some WebRTC media infrastructure providers 4
  • 5. www.kurento.org Media infrastructure common capabilities 5 Transcoding media infrastructure VP8 H.264 MCU media infrastructures Recording media infrastructure
  • 6. www.kurento.org Can’t we go beyond? Media is here Media got there Media got there Analyze Transform Store Transcoding MCU Recording Enrich Augment Adapt Sensors Context Events Media is here What WebRTC infrastructures are • Transcoding • MCU • Recording What WebRTC infrastructures should be • Flexible processing • Augmented reality • Blending • Mixing • Analyzing • Etc. 6
  • 7. www.kurento.org •Interoperable media exchange (multiplatform/multiprotocol) •WebRTC, RTP, HTTP (video tag), etc. •Standard capabilities Capabilities •Transcoding, MCU, recording •Advanced capabilities •Computer vision, augmented reality, mixing, blending, etc. Multimedia infrastructure • REST API • JavaScript API • Java API APIs • LGPL 2.1 Is distributed through a flexible FOSS license What’s Kurento 7
  • 9. www.kurento.org Kurento Media Server (KMS): the nucleus of Kurento • KMS is a middleware for media streams – Receives the stream – Process the stream – Issues the stream Send Receive Analyze Augment Enrich Transform Transcode Record Process Replicate Media Source Media Sink KMS 9
  • 10. www.kurento.org The Media API: The API for accessing KMS capabilities Send Receive Analyze Augment Enrich Transform Transcode Record Process Replicate Media Source Media Sink KMS Java Media API JavaScript Media API REST API Applications define the processing of streams getting through KMS 10
  • 11. www.kurento.org Media API: Media Elements and Media Pipelines SinkSRC Sink SRC SRCSink Sink Media Element • Provides a specific media functionality › Send/receive media › Process media › Transform media • Exchange media through › Sources › Sinks Media pipeline • Chain of media elements implementing the desired media logic. • The Media API provides the capability of creating media pipelines by joining media elements of the toolbox Media Element Sink SRC 11
  • 12. www.kurento.org The Lego Game: Developers create applications connecting media elements Protocols & Codecs Computer Vision Augmented Reality Mul sensory Mul media Media Repository IPTV Integra on Group Communica ons Sink% H pEndpoint Sink%SRC% RtpEndpoint SRC$ DataChannelEndpointSink%SRC% WebRtcEndpoint Sink% SRC% BarCodeReader Sink% SRC% PointerTracker Sink% SRC% FaceDetector Sink% SRC% FaceOverlay Sink% SRC% ChromaFilter Sink% SRC% HeartRateBlender Sink% RecorderEndpoint SRC$ PlayerEndpoint Sink% CdnUpload Sink% IPTVConnector Mixer SinkSRC Sink SRC Sink SRCSink Sink Application 2 Sink SRC Sink SRCSink SinkSRC Sink Application 3 SinkSRC SRCSink SRC Sink SinkSRC Application 1 Toolbox of media elements 12
  • 13. www.kurento.org Media API: trivial example (JavaScript) kwsMedia.create("MediaPipeline", function(error, pipeline){ pipeline.create("HttpGetEndpoint", function(error, httpGetEndpoint){ pipeline.create("PlayerEndpoint", {uri : file_uri}, function(error, playerEndpoint){ playerEndpoint.connect(httpGetEndpoint, function(error){ httpGetEndpoint.getUrl(function(error, url){ videoInput.src = url; }); playerEndpoint.play(function(error){ }); }); }); }); }); Media Pipeline (inside KMS) HttpGetEndpoint Media from file or URI HTTP media streaming Sink SRC PlayerEndpoint 13
  • 14. www.kurento.org Kurento Architecture: putting it all together Kurento Media Server (KMS) Receive Video Augmented Reality Send Video Computer Vision Video Playing and Recording Kurento WS JSON-RPC API Media Media Kurento Media Connector (KMC) 14 SIP Servlet SOAP HTTP Servlet REST Browser Developer code with specific application logic (pipelines) Media capabilities of the browser Kurento Media API Specific logic
  • 15. www.kurento.org Application execution flow Client Code Media Connector (KMC) Media Server (KMS) Crate pipeline/element… (JSON-RPC) Commands requesting the creation of a pipeline Reference to media object … (JSON-RPC) Pipeline cereation phase Media exchange phase 1 2 Specific logic (e.g. AAA) Media pipeline creation Media exchange between client and server 15
  • 16. www.kurento.org What about Node.js? 16 Kurento Media Server (KMS) Receive Video Augmented Reality Send Video Computer Vision Video Playing and Recording Kurento WS JSON-RPC API Media Media Kurento Media Connector (KMC) SIP Servlet SOAP HTTP Servlet REST Node.js Pipeline creation + AAA Kurento Media API Browser Browser-side code
  • 17. www.kurento.org Let’s develop with Kurento • What you need – A Kurento instance • You can install your own Kurento instance – http://www.kurento.org/docs/current/ • You can launch a Kurento instance at the FI-LAB (FI-WARE project) – http://lab.fi-ware.org – FI-LAB is a cloud infrastructure making possible to execute instances from images or blueprints • kws-media-api – https://github.com/kurento/kws-media-api – http://github.com/kurento/kws-utils » Node.js • npm install kws-media-api • npm install kws-utils » Browser • bower install kws-media-api • bower install kws-utils • Getting help – Kurento web site • http://www.kurento.org – Kurento mailing list • https://groups.google.com/forum/#!forum/kurento – Twitter • @kurentoms 17
  • 18. www.kurento.org Kurento Hello World: Playing a file with an HTML5 client Media Pipeline HttpGetEndpoint Media from file or URI HTTP media streaming Sink SRC PlayerEndpoint Kurento WS JSON-RPC API Create / excec … Ref / answer … 18 Kurento Media Connector (KMC)
  • 19. www.kurento.org Playing a file with an HTML5 client: JavaScript code const ws_uri = “ws://your.kurento.server:8888/thrift/ws/websocket”; //change this const file_uri = “http://uri.to.video.file/”; //change this var videoInput = document.getElementById("videoInput"); //video tag element KwsMedia(ws_uri, function(kwsMedia){ //instantiate kws-media-api manager kwsMedia.create("MediaPipeline", function(error, pipeline){ //instantiate pipeline pipeline.create("HttpGetEndpoint", function(error, httpGetEndpoint){ pipeline.create("PlayerEndpoint", {uri : file_uri}, function(error, playerEndpoint){ playerEndpoint.connect(httpGetEndpoint, function(error){ httpGetEndpoint.getUrl(function(error, url){ videoInput.src = url; }); playerEndpoint.play(); }); }); }); }); }); Source: https://github.com/Kurento/kws-tutorial/tree/develop/VideoTagPlayer 19
  • 20. www.kurento.org Playing a file with an HTML5 client: HTML code <!DOCTYPE html> <html> <head> <meta charset="US-ASCII"> <title>Insert title here</title> <script type="text/javascript" src="../api/kws-media-api.js"></script> <script type="text/javascript" src="demo.js"></script> </head> <body> <button id="playButton">Click to start playing</button><br> <video id="videoInput" autoplay></video> </body> </html> Source: https://github.com/Kurento/kws-tutorial/tree/develop/VideoTagPlayer 20
  • 21. www.kurento.org Playing a file with an HTML5 client: See the example working https://www.youtube.com/watch?v=Mp6UEL9U-v4 21
  • 22. www.kurento.org WebRTC loopback Kurento Media Server WebRTC Streaming SinkSRC 22 WebRtcEndpoint
  • 23. www.kurento.org WebRTC loopback: JavaScript code 23 Source: https://github.com/Kurento/kws-tutorial/tree/develop/WebRtcLoopback const ws_uri = “ws://your.kurento.server:8888/thrift/ws/websocket”; //change this var videoInput = document.getElementById("videoInput"); var videoOutput = document.getElementById("videoOutput"); var webRtcPeer = kwsUtils.WebRtcPeer.startSendRecv(videoInput, videoOutput, onOffer, onError); function onOffer(offer){ KwsMedia(ws_uri, function(kwsMedia){ kwsMedia.create("MediaPipeline", function(error, pipeline){ pipeline.create("WebRtcEndpoint", function(error, webRtc){ webRtc.processOffer(offer, function(error, answer){ webRtcPeer.processSdpAnswer(answer); }); webRtc.connect(webRtc); }); }); }); }; 23
  • 24. www.kurento.org WebRTC loopback: HTML code 24 <!DOCTYPE html> <html> <head> <meta charset="US-ASCII"> <title>Insert title here</title> <script type="text/javascript" src="../api/adapter.js"></script> <script type="text/javascript" src="../api/kws-media-api.js"></script> <script type="text/javascript" src="../api/kws-utils.js"></script> <script type="text/javascript" src="demo.js"></script> </head> <body> <button id="launchButton">Click me ...</button><br> <div style="float: left; border: 2px solid black; margin: 5px;"> <h1>Local stream</h1> <video id="videoInput" autoplay></video> </div> <div style="float:left; border: 2px solid black; margin: 5px;"> <h1>Remote stream</h1> <video id="videoOutput" autoplay></video> </div> </body> </html> Source: https://github.com/Kurento/kws-tutorial/tree/develop/WebRtcLoopback 24
  • 25. www.kurento.org WebRTC loopback: see the example working 25 https://www.youtube.com/watch?v=hUChVutQ2og 25
  • 26. www.kurento.org WebRTC with FaceOverlay Media Pipeline WebRTC Streaming SinkSRC 26 Sink SRC WebRtcEndpoint FaceOverlayFilter
  • 27. www.kurento.org WebRTC with FaceOverlay: JavaScript code 27 Source: https://github.com/Kurento/kws-tutorial/tree/develop/FaceOverlay var webRtcPeer = kwsUtils.WebRtcPeer.startSendRecv(videoInput, videoOutput , onOffer, onError); function onOffer(offer) { KwsMedia(ws_uri, function(kwsMedia) { kwsMedia.create("MediaPipeline", function(error, pipeline) { pipeline.create("WebRtcEndpoint", function(error, webRtc) { pipeline.create("FaceOverlayFilter”, function(error, filter) { //hat_uri is the uri pointing to the overlay image to draw on top of detected faces //These percent variables need to be defined to adjust overlay image to face box filter.setOverlayedImage(hat_uri, offsetXPercent, offsetYPercent, widthPercent, heightPercent); webRtc.connect(filter, function(error) { filter.connect(webRtc, function(error) { webRtc.processOffer(offer, function(error, answer) { webRtcPeer.processSdpAnswer(answer); }); …//many }); omited here for simplicity }); 27
  • 28. www.kurento.org WebRTC recorder 28 28 Media Pipeline WebRTC Streaming SinkSRC Sink Media to file or URI Media Pipeline WebRTC Streaming SinkSRC Media from file or URI SRC WebRtcEndpoint WebRtcEndpoint RecorderEndpoint PlayerEndpoint
  • 29. www.kurento.org WebRTC Recorder: JavaScript code webRtcPeer = kwsUtils.WebRtcPeer.startSendRecv(videoInput, videoOutput, onOffer, onError); function onOffer(offer) { KwsMedia(ws_uri, function(kwsMedia) { kwsMedia.create('MediaPipeline', function(error, pipeline) { pipeline.create('RecorderEndpoint', {uri : file_uri}, function(error, recorder) { pipeline.create('WebRtcEndpoint', function(error, webRtv) { webRtc.connect(recorder, function(error) { recorder.record(); webRtc.connect(webRtc, function(error) { webRtc.processOffer(offer, function(error, answer) { webRtcPeer.processSdpAnswer(answer); }); ... }); //many }); omited here for simplicity } 29 29 Source: https://github.com/Kurento/kws-tutorial/tree/develop/Recorder
  • 30. www.kurento.org WebRTC with Recorder: see the example working 30 https://www.youtube.com/watch?v=wp5A4NZ-kd4 30
  • 31. www.kurento.org But … is this code beautiful? 31 31 Developers love spaghetti for eating, but not for code From that code structure to this code structure
  • 32. www.kurento.org Avoiding the callback hell • The hidden secret of the content API – Every call to a kws-media-api returns a promise • var p1= kwsMedia.create(“MediaPipeline”); • p1.then(function(pipeline){…}) – Promises • A proxy to a value not knows when the proxy is created • Allows associating handlers to – Value successfully obtained – Error • https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/Promise • http://www.html5rocks.com/en/tutorials/es6/promises/ – Example 32 32
  • 33. www.kurento.org Are promises really useful for our objectives? • Developing with promises – WebRTC loopack with FaceOverlay • Source – https://github.com/Kurento/kws-media- api/tree/develop/example/WebRtcEndpoint-FaceOverlayFilter_promises_2 • Does structure improve? – Not much – Problems • Nesting avoiding, but chaining isn’t much beautiful • Nesting eliminated => closures eliminated – Scope of variables (pipelines, elements, etc.) lost. – Need to pass variables along on each call • What’s the point of using promises then? – Continue reading if you are the kind of guy of like living on the edge … 33 33
  • 34. www.kurento.org Generators+co: the callback hell killer • Generators – Cooperative (non preemtive) simulation of synchronous behavior on iterator functions by maintaining execution state • https://developer.mozilla.org/en- US/docs/Web/JavaScript/Guide/Iterators_and_Generators – Allow multiple entry points for suspending and resuming execution at certain locations. – Available on EC6 (Harmony) • Co – Combines promises and generators – Uses promises to “connect” generator exit and reentrance – https://github.com/visionmedia/co 34
  • 35. www.kurento.org Revisiting the WebRTC with loopback example var webRtcPeer = kwsUtils.WebRtcPeer.startSendRecv(videoInput, videoOutput, onOffer, onError); function onOffer(offer){ co(function*(){ var kwsMedia = yield KwsMedia(ws_uri); var pipeline = yield kwsMedia.create("MediaPipeline"); var webRtc = yield pipeline.create("WebRtcEndpoint"); var filter = yield pipeline.create("FaceOverlayFilter"); //you need to define the hat_uri and percents variables yield filter.setOverlayedImage(hat_uri, offsetXPercent, offsetYPercent, widthPercent, heightPercent); var answer = yield webRtc.processOffer(offer); webRtcPeer.processSdpAnswer(answer); yield webRtc.connect(filter); yield filter.connect(webRtc); })(); } 35 Source code of previous examples using generators: https://github.com/Kurento/kws-tutorial/tree/develop/WebRtcLoopback https://github.com/Kurento/kws-tutorial/tree/develop/FaceOverlayGenerator https://github.com/Kurento/kws-tutorial/tree/develop/RecorderGenerator
  • 37. www.kurento.org Let’s do some more complex stuff: a WebRTC game Media Pipeline SinkSRC Sink SRC Sink SRC 37 Sink SRC Sink WebRtcEndpoint MirrorFilter PointerDetectorFilter FaceOverlayFilter RecorderEndpoint
  • 39. www.kurento.org WebRTC game: see the example working 39 https://www.youtube.com/watch?v=5eJRnwKxgbY 39
  • 40. www.kurento.org Summary and conclusions • Kurento – Open Source Softare • LGPL v2.1 – Multimedia infrastructure for HTML5 • WebRTC • HTML5 – Advanced media processing capabilities • Recording, MCUs, Transcoding, Computer Vision, Augmented Reality, Mixing, Blending. • kws-media-api – Access Kurento capabilities from JavaScript • Media elements and media pipelines • Like a “Lego game” – Beautiful code • Promises • Generators • CO 40
  • 41. www.kurento.org Thank you 41 Suggestions, comments and complains: lulop@kurento.org http://www.kurento.org http://www.github.com/kurento Twitter: @Kurentoms http://www.nubomedia.eu http://www.fi-ware.org http://ec.europa.eu