SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
WebRTC & WebSockets
Peter Dunkley, Technical Director, Crocodile RCS Ltd

Email:
Twitter:

peter.dunkley@crocodilertc.net
@pdunkley
Evolution on the web
WebSocket and
WebRTC
implementations
become available

Sir Tim Berners-Lee
creates HTML. Web
-pages are static

W3C produces the
DOM1 specification

1990

Microsoft and Netscape
introduce different
mechanisms for DHTML

1996

1998

2004

2011
Google uses Ajax
in Gmail (W3C
releases 1st draft in
2006) – the dawn
of web-apps
The revolution

Revolution in telecoms

Claude Chappe
invented the optical
telegraph
Alexander
Graham
Bell patents
the telephone

1792

1837 1876

Before today the operators (big and small) had
full control over real-time communications
because it was hard to do and substantial
infrastructure investment was required.

1919 1960s >

1990s >

2011
WebSocket and
WebRTC
implementations
become
available

Rotary dial
enters
service
First commercial
electrical telegraph
created by
Cooke and
Wheatstone

From the 1990s onwards
voice started to be carried
on technologies developed
for data networks such as
ATM and IP

From the 1960s
onwards digital
exchanges start to
appear

1963: DTMF
enters service
Demo #1: Crocodile Scrum
●

Opera and Google Chrome only for now
–

Works on Google Chrome for Android

–

Mozilla Firefox support coming soon

●

Anonymous ad-hoc conferencing

●

Makes use of WebRTC and WebSockets

●

Join the “devcon5” scrum

http://www.crocodilescrum.com/
There are a number of proprietary implementations that
provide direct interactive rich communication using audio,
video, collaboration, games, etc. between two peers' webbrowsers. These are not interoperable, as they require nonstandard extensions or plugins to work. There is a desire to
standardize the basis for such communication so that
interoperable communication can be established between
any compatible browsers.
Real-Time Communication in WEBBrowsers (rtcweb) 2013-03-13 charter

http://tools.ietf.org/wg/rtcweb/
The mission of the Web Real-Time Communications
Working Group, part of the Ubiquitous Web Applications
Activity, is to define client-side APIs to enable Real-Time
Communications in Web browsers.
These APIs should enable building applications that can be
run inside a browser, requiring no extra downloads or
plugins, that allow communication between parties using
audio, video and supplementary real-time communication,
without having to use intervening servers (unless needed
for firewall traversal, or for providing intermediary services).
Web Real-Time Communications
Working Group Charter

http://www.w3.org/2011/04/webrtc-charter.html
RTCWeb and WebRTC: not the same thing
●

RTCWeb is the on-the-wire protocol as defined by the
IETF and may be used in many applications and
systems
–
–

On network servers

–
●

Within VoIP phones
Includes MTI codecs for audio and video

WebRTC is the browser API as defined by the IETF
The web

Your web
app #3

Your web
app #2

Your web
app #1

...
WebRTC API

RTCWeb
WebRTC C++ API (PeerConnection)
Session management / Abstract signalling (Session)

Voice Engine

Video Engine

Transport

G.711/OPUS Codec

H.264/VP8 Codec

SRTP

NetEQ for voice

Video jitter buffer

Multiplexing

Echo Canceller /
Noise Reduction

Image enhancements

P2P
STUN + TURN + ICE

Audio Capture/Render

Video Capture

Network I/O

Based on the diagram from http://www.webrtc.org/reference/architecture

Your
browser
Audio Codecs
●

RTCWeb has two MTI (Mandatory To Implement)
audio codecs:
–

G.711 narrowband
●

●

trivial to implement

●

–

free to use and unencumbered by patents
widely supported on legacy equipment

OPUS wideband
●

free to use and unencumbered by patents

●

complicated to implement – but there are open-source versions

●

fantastic quality audio and excellent handling of packet loss
Video Codecs (the great debate)
●

●

There is a big argument over which of H.264 and VP8 should
be used
The arguments are commercial not technical
–

H.264 and VP8 are comparable in terms of performance and quality

–

H.264 and its licensing terms are unacceptable to many small companies and
open-source projects
●

–

The IPR situation around VP8 is unclear
●

–
●

Cisco's offer helps some but not all
Large (and rich) companies cannot risk using VP8 – it makes them a target

Mandating both will not solve this

Out of desperation older codecs are being suggested including
H.261, H.263, and Theora
Codecs are not limited to the MTI
●

●

Apps and browsers can offer any codecs they are
capable of
The MTI is just the base set of codecs you must
support to ensure interoperability between endpoints
WebRTC has a rich API
●

Media Capture and Streams
–
–

●

Audio, video, and screen-sharing
http://www.w3.org/TR/mediacapture-streams/

MediaStream Recording
–

●

http://www.w3.org/TR/mediastream-recording/

WebRTC
–

Data can be exchanged too

–

http://www.w3.org/TR/webrtc/

Available (to varying degrees) in Chrome, Firefox, and Opera
What do these APIs let you do?
●

●

Capture audio and video streams from microphone
and webcam
Exchange the captured audio and video with a peer in
real-time

●

Record local and remote audio and video streams

●

Reliably exchange data with a peer in real-time
Screen sharing
●

Google Chrome has experimental support for screen
sharing
–

●

Screen sharing is (more) dangerous (than video calling)
–

●

You need to turn on a hidden flag to use it
It only takes one frame to reveal any personal details on your
screen

In the future screen sharing will be restricted
–

Only available to Chrome apps (not web-pages)

–

Will require you to explicitly select the screen or window
you want to share
The DataChannel
●

The WebRTC DataChannel uses SCTP over DTLS
–
–

●

SCTP means reliable, in-order, frame delivery
DTLS means UDP packets (so the same NAT traversal
mechanisms can be used for audio, video, and data) that are
encrypted

There are already peer-2-peer file-sharing applications
implemented using the WebRTC DataChannel
Demo #2: live.pics.io
●

●

Produced by pics.io
Uses WebRTC DataChannels for “Live Collaborative
Image Sharing”

●

Drop your images into the browser

●

Share the link (to multiple people)

●

Talk people through your slide-show

http://live.pics.io/
WebRTC applications
●

●

●

●

WebRTC is not about making phone calls in a browser
– although this is one possible use case
WebRTC allows you to make communicate in a
contextual way
A phone call is an activity of its own – but that's not
how humans communicate face to face
A phone call is a disruptive (rude) demanding event
WebRTC is about context
●

Talk to someone while collaborating on a document

●

A better way to access customer services
–
–

●

Already authenticated
Use a web-form instead of an IVR

A truly virtual PBX
–

●

Web-based phone and operator console

Many gaming and entertainment related applications
–

FPS without centralised servers (DataChannel) and where you can see and hear your
opponents

–

Online gambling (for example, poker) where you can see your opponents

–

Online dating, after dinner speaking, and so on

–

It's not necessarily about the real-time audio and video, but they enhance
the experience
Demo #3: Cube Slam
●

Produced by Google to showcase WebRTC

●

WebRTC DataChannel enables multi-player gaming

●

WebRTC media enhances the game but is not part of
it

https://www.cubeslam.com/
The WebRTC APIs are not enough
●

●

Google made a controversial (but very wise) decision
not to specify how the signalling should work
Signalling is required
–

To discover who to communicate with

–

To exchange information on what the communication should
be (audio, data, video, and codecs)

–

Even the simplest, proprietary, RESTful exchange is signalling
Interoperability is not always required
●

Interoperability may negatively impact the business
case
–

For example:
●

Document collaboration – you want to keep people in your application

●

Online dating – you want to keep people on your site

●

Online gaming – there is no point in different games interoperating
The signalling triangle
Server

li
al
n
ig
S

UA

Si
gn
al

ng

Media

lin

g

UA
Interoperability is sometimes required
●

These are typically ones where the point of the
application is communication
–

For example:
●

Conferencing – calls in and out of legacy networks are required

●

Call Centres – calls in and out of legacy networks are required

●

Virtual PBX – calls in and out of legacy networks are required
The signalling trapezoid

Signalling

lli
n
Si
gn
a

UA

Server

g
lin
al
gn
Si

g

Server

Media

UA
Signalling transport options
●

XHR Polling (HTTP Long Polling)
–
–

Securable

–
●

Easy
Inefficient

WebSockets
–

Available in all modern browsers (certainly any with WebRTC
support)

–

Fast

–

Securable
Demo #4: Web Communicator
●

A fully-featured unified communications client

●

Makes use of WebRTC and WebSockets

●

Multiple WebSocket/DataChannel connections for multiple
protocols
–

●

●

MSRP (file-transfer), SIP (session signalling), and XMPP (messaging
and presence)

No need to create a new application for every target platform
Browsers without WebRTC support can still use WebSocket
for file-transfer, messaging, presence, and other data
The WebSocket Protocol enables two-way communication
between a client running untrusted code in a controlled
environment to a remote host that has opted-in to
communications from that code.
RFC 6455, I. Fette (Google, Inc) et al, December 2011

http://tools.ietf.org/html/rfc6455
To enable Web applications to maintain bidirectional
communications with server-side processes, this
specification introduces the WebSocket interface.
The WebSocket API (W3C Candidate
Recommendation), I. Hickson (Google, Inc),
20 September 2012

http://www.w3.org/TR/websockets
WebSockets: safe and secure
●

A raw TCP/UDP API for Javascript would be
dangerous
–

●

The WebSocket protocol is asynchronous
–

●

Connections can only be established from the client side

Data from client to server is masked
–

●

There would be no need to fool users into installing trojans

Prevents in-line proxies from mistaking the data for HTTP and
modifying it

Can be secured using TLS
Easy to use
●

Very simple API
–
–

Methods: close(), send()

–
●

Constructor creates (opens) the connection
Events: onopen(), onerror(), onclose()

Has the advantages of TCP and UDP
–

–
●

Data is framed – no need to parse the stream to work out
where messages start and end
Frame delivery is guaranteed and in-order

Interpretation of the frames is based on
subprotocol not TCP or UDP port
Opening a connection (Handshake)
Request from client (browser)
GET wss://edge00.crocodilertc.net/4m9e4ipsfd8uh0leg0kr HTTP/1.1
Origin: https://www.crocodiletalk.com
Host: edge00.crocodilertc.net
Sec­WebSocket­Key: ywV2YxcaL0DMDVPyeHYj3Q==
Upgrade: websocket
Sec­WebSocket­Protocol: sip
Connection: Upgrade
Sec­WebSocket­Version: 13

Response from server
HTTP/1.1 101 Switching Protocols
Access­Control­Allow­Origin: https://www.crocodiletalk.com
Connection: upgrade
Sec­WebSocket­Accept: 9H9dBstuq+Y4Be2Ql7WWkV6tnjA=
Sec­WebSocket­Protocol: sip
Upgrade: websocket

The browser API handles this for you
Controlling connections
●

Two types of frame
–

Data frames

–

Control frames
●

Close
If you receive a close on a connection that you have not send a close on, send a close
on that connection

●

Ping
If you receive a ping on a connection send a pong on that connection

●

Pong

The browser API handles this for you
Sending/receiving frames
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len |
Extended payload length
|
|I|S|S|S| (4) |A|
(7)
|
(16/64)
|
|N|V|V|V|
|S|
|
(if payload len==126/127)
|
| |1|2|3|
|K|
|
|
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
|
Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
|
|Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued)
|
Payload Data
|
+-------------------------------- - - - - - - - - - - - - - - - +
:
Payload Data continued ...
:
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|
Payload Data continued ...
|
+---------------------------------------------------------------+

RFC 6455, section 5.2

The browser API handles this for you
Proxies and subprotocols
●

Proxies
–

In-line proxies may be an issue
●

●

–

Using TLS avoids the issue and is good-practice anyway

Configured proxies
●

●

Masking helps avoid frame corruption, but sometimes the handshake
fails

Must support the CONNECT HTTP request

Subprotocols
–

http://www.iana.org/assignments/websocket/websocket.xml
The simplest form of signalling
●

●

●

Exchange json blobs over WebSockets
But beware, when you go beyond the basic “call”
signalling gets hard (especially in the edge cases)
Standards based signalling schemes have already
solved:
–

Session liveness

–

Hold

–

Renegotiate

–

Transfer

–

and more...
Signalling options
●

Open standards are usually best
–

–

XMPP over WebSocket,
http://tools.ietf.org/html/draft-moffitt-xmpp-over-websocket

–
●

SIP over WebSocket,
http://tools.ietf.org/html/draft-ietf-sipcore-sip-websocket

OpenPeer, http://openpeer.org/

The WebRTC API is easy but signalling is often hard
–

There are many open-source libraries that do the signalling

–

The library APIs vary in complexity to meet every need

–

Hosted infrastructure lets you add real-time
communications to your website without having to build a
network yourself
Opensource projects
●

Node.js
–

●

SIP Servers
–

●

JAIN-SIP-Javascript, JsSIP, QoffeeSIP, sipml5

XMPP Servers (and connection managers)
–

●

Asterisk, Kamailio, OverSIP, reSIPprocate

SIP Clients
–

●

Many WebSocket libraries available (for example, support in socket.io)

ejabberd-websockets, node-xmpp-bosh, openfire-websockets

XMPP Clients
–

JSJaC, Strophe
Demo #5: Chrome Developer Tools
●

Google Chrome provides a range of tools to help you
create and debug applications

●

You can add view code and add breakpoints

●

You can modify code and view debug

●

You can examine what is happening on the wire
–

●

The Network → WebSockets view can be particularly helpful –
especially if using TLS

...
Dealing with firewalls
●

WebRTC is peer-to-peer technology

●

Sometimes firewall and NAT devices get in the way

●

ICE (Interactive Connectivity Establishment) is mandatory
–
–

●

STUN (Session Traversal Utilities for NAT) helps in most cases
TURN (Traversal Using Relays around NAT) helps when STUN
doesn't

If a firewall is specifically configured to block real-time
communications your options are limited
–

TURN over WebSockets is now under development

https://code.google.com/p/rfc5766-turn-server/
Desktop and mobile apps
●

This technology isn't just for browsers

●

Native WebRTC is possible
–

–
●

Mobile: Android and iOS libraries, and BB10 has support in
the OS
Desktop: Linux, OS X, and Windows libraries

Native WebSocket libraries are available
–

WebSockets are a sensible option for mobile app developers
who want a safe way to exchange data with servers
HOWTO: A SIP over WebSockets Server
●

●

Download, build, and install Kamailio 4.1
Create a kamailio.cfg file based on the following code
snippets

http://www.kamailio.org/
Handling WebSocket handshakes in Kamailio
...
tcp_accept_no_cl=yes
...
event_route[xhttp:request] {
set_reply_close();
set_reply_no_connect();
if ($hdr(Upgrade)=~"websocket"
&& $hdr(Connection)=~"Upgrade"
&& $rm=~"GET") {
# Validate as required (Host:, Origin:, Cookie:)
if (ws_handle_handshake())
exit;
}
xhttp_reply("404", "Not Found", "", "");
}
WebSocket clients are always behind a NAT
●

●

●

Javascript applications cannot see the real IP address
and port for the WebSocket connection
This means that the SIP server cannot trust addresses
and ports in SIP messages received over WebSockets
nathelper and/or outbound can be used to solve this
problem
Using nathelper on SIP over WebSocket requests
modparam(“nathelper|registrar”, “received_avp”, “$avp(RECEIVED)”)
...
request_route {
route(REQINIT);
route(WSDETECT);
...
route[WSDETECT] {
if (proto == WS || proto == WSS) {
force_rport();
if (is_method(“REGISTER”)) {
fix_nated_register();
} else if (is_method(“INVITE|NOTIFY|SUBSCRIBE”)) {
add_contact_alias();
}
}
}
...
route[WITHINDLG] {
if (has_totag()) {
if (loose_route()) {
if (!isdsturiset()) {
handle_ruri_alias();
}
...
Using nathelper on SIP over WebSocket responses

onreply_route {
if ((proto == WS || proto == WSS)
&& status =~ “[12][0­9][0­9]”) {
add_contact_alias();
}
}
What about web-calls to non-web endpoints?
●

Use mediaproxy-ng from SIPWise
https://github.com/sipwise/mediaproxy-ng

●

Companion Kamailio module: rtpproxy-ng

http://kamailio.org/docs/modules/devel/modules/rtpproxy-ng.html
●

SIP Signalling is proxied instead of B2BUA'd (that is,
not broken)
Catch 488 to invoke mediaproxy-ng
modparam(“rtpproxy­ng”, “rtpproxy_sock”, “udp:localhost:22223”)
...
route[LOCATION] {
...
t_on_failure(“UA_FAILURE”);
}
...
failure_route[UA_FAILURE] {
if (t_check_status(“488”) && sdp_content()) {
if (sdp_get_line_startswith(“$avp(mline)”, “m=”)) {
if ($avp(mline) =~ “SAVPF”)) {
$avp(rtpproxy_offer_flags) = “froc­sp”;
$avp(rtpproxy_answer_flags) = “froc+SP”;
} else {
$avp(rtpproxy_offer_flags) = “froc+SP”;
$avp(rtpproxy_answer_flags) = “froc­sp”;
}
# In a production system you probably need to catch
# “RTP/SAVP” and “RTP/AVPF” and handle them correctly
# too
}
append_branch();
rtpproxy_offer($avp(rtpproxy_offer_flags));
t_on_reply(“RTPPROXY_REPLY”);
route(RELAY);
}
}
...
Handle replies to the retried INVITE
modparam(“rtpproxy­ng”, “rtpproxy_sock”, “udp:localhost:22223”)
...
failure_route[UA_FAILURE] {
...
t_on_reply(“RTPPROXY_REPLY”);
route(RELAY);
}
onreply_route[RTPPROXY_REPLY] {
if (status =~ “18[03]”) {
# mediaproxy­ng only supports SRTP/SDES – early media
# won't work so strip it out now to avoid problems
change_reply_status(180, “Ringing”);
remove_body();
} else if (status =~ “2[0­9][0­9]” && sdp_content()) {
rtpproxy_answer($avp(rtpproxy_answer_flags));
}
}
...
Current mediaproxy-ng limitations
●

No support for SRTP/DTLS
–

–

mediaproxy-ng works with Google Chrome today (but Google will be
removing SRTP/SDES over the next year)

–
●

SRTP/DTLS is a MUST for WebRTC and SRTP/SDES is a MUST
NOT

mediaproxy-ng does not work with Firefox at this time

Does not support “bundling”/”unbundling”
–

WebRTC can “bundle” audio and video streams together, but
mediaproxy-ng does not support this yet

–

Google Chrome does not currently support “unbundling”

–

You can have an audio stream, or a video stream, but not
an audio and video stream at this time
HOWTO: Authenticate SIP using a web-service
●

●

●

●

●

No communication required between authentication server and
Kamailio
Credentials expire (the expiry time is chosen by the
authentication server)
Extract username and password from the “GET” used for HTTP
handshake and authenticate there, or
Use the credentials for digest authentication of SIP requests
Check the From-URI or To-URI in SIP headers match the user
part of the credential

http://kamailio.org/docs/modules/devel/modules/auth_ephemeral.html
REST

Calling
UA

Web
Service

OAuth2

Shared secret –
communication
link not required

SIP

You don’t have to
create or manage
accounts on the
SIP
Proxy/registrar

SIP Proxy
SIP

Called UA
Authenticating the handshake
...
tcp_accept_no_cl=yes
...
modparam(“auth_ephemeral”, “secret”, “kamailio_rules”)
...
modparam(“htable”, “htable”, “wsconn=>size=8;”)
...
event_route[xhttp:request] {
...
# URI format is /?username=foo&password=bar
$var(uri_params) = $(hu{url.querystring});
$var(username) = $(var(uri_params){param.name,username,&});
$var(password) = $(var(uri_params){param.name,password,&});
# Note: username and password could also have been in a Cookie: header
if (!autheph_authenticate(“$var(username)”, “$var(password)”)) {
xhttp_reply(“403”, “Forbidden”, “”, “”);
exit;
}
if (ws_handle_handshake()) {
$sht(wsconn=>$si:$sp::username) = $var(username)
exit;
}
...
event_route[websocket:closed] {
$var(regex) = $si + “:” $sp + “.*”;
sht_rm_name_re(“wsconn=>$var(regex)”);
}
Checking SIP requests
...
request_route {
route(REQINIT);
route(WSDETECT);
...
if (!(proto == WS || proto == WSS))
route(AUTH);
...
route[WSDETECT] {
if (proto == WS || proto == WSS) {
$var(username) = (str) $sht(wsconn=>$si:$sp::username);
if ($var(username) == $null || $var(username) == “”) {
send_reply(“403”, “Forbidden”);
ws_close(1008, “Policy Violation”);
exit;
}
if (!autheph_check_timestamp(“$var(username)”)
|| (is_method(“REGISTER|PUBLISH”)
&& !autheph_check_to(“$var(username)”))
|| (!has_totag() && !autheph_check_from(“$var(username)”))) {
send_reply(“403”, “Forbidden”);
ws_close(1008, “Policy Violation”);
exit;
}
force_rport();
...
Questions?

Code:

https://github.com/crocodilertc

Email:

peter.dunkley@crocodilertc.net

Twitter:

@pdunkley

Weitere ähnliche Inhalte

Was ist angesagt?

WebRTC - On Standards, Identity and Telco Strategy
WebRTC - On Standards, Identity and Telco StrategyWebRTC - On Standards, Identity and Telco Strategy
WebRTC - On Standards, Identity and Telco StrategyJose de Castro
 
Introduction to WebRTC
Introduction to WebRTCIntroduction to WebRTC
Introduction to WebRTCArt Matsak
 
WebRTC overview
WebRTC overviewWebRTC overview
WebRTC overviewRouyun Pan
 
Introduction to WebRTC
Introduction to WebRTCIntroduction to WebRTC
Introduction to WebRTCPatrick Cason
 
WebRTC Real time media P2P, Server, Infrastructure, and Platform
WebRTC Real time media P2P, Server, Infrastructure, and PlatformWebRTC Real time media P2P, Server, Infrastructure, and Platform
WebRTC Real time media P2P, Server, Infrastructure, and PlatformRyan Jespersen
 
ICE: The ultimate way of beating NAT in SIP
ICE: The ultimate way of beating NAT in SIPICE: The ultimate way of beating NAT in SIP
ICE: The ultimate way of beating NAT in SIPSaúl Ibarra Corretgé
 
WebRTC: A front-end perspective
WebRTC: A front-end perspectiveWebRTC: A front-end perspective
WebRTC: A front-end perspectiveshwetank
 
WebRTC and Janus intro for FOSS Stockholm January 2019
WebRTC and Janus intro for FOSS Stockholm January 2019WebRTC and Janus intro for FOSS Stockholm January 2019
WebRTC and Janus intro for FOSS Stockholm January 2019Olle E Johansson
 
From NAT to NAT Traversal
From NAT to NAT TraversalFrom NAT to NAT Traversal
From NAT to NAT TraversalLi-Wei Yao
 
ORTC Library - Introduction
ORTC Library - IntroductionORTC Library - Introduction
ORTC Library - IntroductionErik Lagerway
 
Upperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introUpperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introVictor Pascual Ávila
 
Kranky Geek WebRTC 2015 - What's next for WebRTC?
Kranky Geek WebRTC 2015 - What's next for WebRTC?Kranky Geek WebRTC 2015 - What's next for WebRTC?
Kranky Geek WebRTC 2015 - What's next for WebRTC?Kranky Geek
 
Advanced Kurento Real Time Media Stream Processing
Advanced Kurento Real Time Media Stream ProcessingAdvanced Kurento Real Time Media Stream Processing
Advanced Kurento Real Time Media Stream ProcessingFIWARE
 
Kamailio :: A Quick Introduction
Kamailio :: A Quick IntroductionKamailio :: A Quick Introduction
Kamailio :: A Quick IntroductionOlle E Johansson
 
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)Igalia
 
Kamailio World 2018: Having fun with new stuff
Kamailio World 2018: Having fun with new stuffKamailio World 2018: Having fun with new stuff
Kamailio World 2018: Having fun with new stuffOlle E Johansson
 
WebRTC standards update (April 2015)
WebRTC standards update (April 2015)WebRTC standards update (April 2015)
WebRTC standards update (April 2015)Victor Pascual Ávila
 

Was ist angesagt? (20)

WebRTC - On Standards, Identity and Telco Strategy
WebRTC - On Standards, Identity and Telco StrategyWebRTC - On Standards, Identity and Telco Strategy
WebRTC - On Standards, Identity and Telco Strategy
 
Introduction to WebRTC
Introduction to WebRTCIntroduction to WebRTC
Introduction to WebRTC
 
WebRTC overview
WebRTC overviewWebRTC overview
WebRTC overview
 
Introduction to WebRTC
Introduction to WebRTCIntroduction to WebRTC
Introduction to WebRTC
 
WebRTC Real time media P2P, Server, Infrastructure, and Platform
WebRTC Real time media P2P, Server, Infrastructure, and PlatformWebRTC Real time media P2P, Server, Infrastructure, and Platform
WebRTC Real time media P2P, Server, Infrastructure, and Platform
 
ICE: The ultimate way of beating NAT in SIP
ICE: The ultimate way of beating NAT in SIPICE: The ultimate way of beating NAT in SIP
ICE: The ultimate way of beating NAT in SIP
 
WebRTC: A front-end perspective
WebRTC: A front-end perspectiveWebRTC: A front-end perspective
WebRTC: A front-end perspective
 
Asterisk World (January 2014) - Taking Enterprise Telephony into the Web World
Asterisk World (January 2014) - Taking Enterprise Telephony into the Web WorldAsterisk World (January 2014) - Taking Enterprise Telephony into the Web World
Asterisk World (January 2014) - Taking Enterprise Telephony into the Web World
 
WebRTC and Janus intro for FOSS Stockholm January 2019
WebRTC and Janus intro for FOSS Stockholm January 2019WebRTC and Janus intro for FOSS Stockholm January 2019
WebRTC and Janus intro for FOSS Stockholm January 2019
 
From NAT to NAT Traversal
From NAT to NAT TraversalFrom NAT to NAT Traversal
From NAT to NAT Traversal
 
ORTC Library - Introduction
ORTC Library - IntroductionORTC Library - Introduction
ORTC Library - Introduction
 
Upperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introUpperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC intro
 
Kranky Geek WebRTC 2015 - What's next for WebRTC?
Kranky Geek WebRTC 2015 - What's next for WebRTC?Kranky Geek WebRTC 2015 - What's next for WebRTC?
Kranky Geek WebRTC 2015 - What's next for WebRTC?
 
Advanced Kurento Real Time Media Stream Processing
Advanced Kurento Real Time Media Stream ProcessingAdvanced Kurento Real Time Media Stream Processing
Advanced Kurento Real Time Media Stream Processing
 
NAT Traversal
NAT TraversalNAT Traversal
NAT Traversal
 
Kamailio :: A Quick Introduction
Kamailio :: A Quick IntroductionKamailio :: A Quick Introduction
Kamailio :: A Quick Introduction
 
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)
 
Kamailio World 2018: Having fun with new stuff
Kamailio World 2018: Having fun with new stuffKamailio World 2018: Having fun with new stuff
Kamailio World 2018: Having fun with new stuff
 
WebRTC standards update (April 2015)
WebRTC standards update (April 2015)WebRTC standards update (April 2015)
WebRTC standards update (April 2015)
 
Kurento FIWARE
Kurento FIWAREKurento FIWARE
Kurento FIWARE
 

Ähnlich wie DevCon 5 (December 2013) - WebRTC & WebSockets

Webinar WebRTC HTML5 (english)
Webinar WebRTC HTML5 (english)Webinar WebRTC HTML5 (english)
Webinar WebRTC HTML5 (english)Quobis
 
What is WebRTC and How does it work?
What is WebRTC and How does it work?What is WebRTC and How does it work?
What is WebRTC and How does it work?SandipPatel533958
 
WebRTC Workshop 2013 given at the IMS World Forum
WebRTC Workshop 2013 given at the IMS World ForumWebRTC Workshop 2013 given at the IMS World Forum
WebRTC Workshop 2013 given at the IMS World ForumAlan Quayle
 
WbeRTC in IOT presented in KrankyGeek
WbeRTC in IOT presented in KrankyGeekWbeRTC in IOT presented in KrankyGeek
WbeRTC in IOT presented in KrankyGeekALTANAI BISHT
 
WebRTC - Is it ready? 2013
WebRTC - Is it ready? 2013WebRTC - Is it ready? 2013
WebRTC - Is it ready? 2013Hank Huang
 
minor-project-1.ppt
minor-project-1.pptminor-project-1.ppt
minor-project-1.pptthinkonce1
 
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
 
Building a WebRTC Communication and collaboration platform - techleash barcamp
Building a WebRTC Communication and collaboration platform  -  techleash barcampBuilding a WebRTC Communication and collaboration platform  -  techleash barcamp
Building a WebRTC Communication and collaboration platform - techleash barcampALTANAI BISHT
 
Status of WebRTC across Asia by Alan Quayle +++
Status of WebRTC across Asia by Alan Quayle +++Status of WebRTC across Asia by Alan Quayle +++
Status of WebRTC across Asia by Alan Quayle +++Alan Quayle
 
Integrate WebRTC Voice / Video Call App Using Contus Fly
Integrate WebRTC Voice / Video Call App Using Contus FlyIntegrate WebRTC Voice / Video Call App Using Contus Fly
Integrate WebRTC Voice / Video Call App Using Contus FlyCONTUS TECH
 
TADS Developer Summit WebRTC Dan Burnett
TADS Developer Summit WebRTC Dan BurnettTADS Developer Summit WebRTC Dan Burnett
TADS Developer Summit WebRTC Dan BurnettAlan Quayle
 
The State of WebRTC
The State of WebRTCThe State of WebRTC
The State of WebRTCRobin Hawkes
 

Ähnlich wie DevCon 5 (December 2013) - WebRTC & WebSockets (20)

Webinar WebRTC HTML5 (english)
Webinar WebRTC HTML5 (english)Webinar WebRTC HTML5 (english)
Webinar WebRTC HTML5 (english)
 
What is WebRTC and How does it work?
What is WebRTC and How does it work?What is WebRTC and How does it work?
What is WebRTC and How does it work?
 
WebRTC Workshop 2013 given at the IMS World Forum
WebRTC Workshop 2013 given at the IMS World ForumWebRTC Workshop 2013 given at the IMS World Forum
WebRTC Workshop 2013 given at the IMS World Forum
 
WebRTC presentation
WebRTC presentationWebRTC presentation
WebRTC presentation
 
WebRTC Summit (June 2014) - WebRTC Interoperability (and why it is important)
WebRTC Summit (June 2014) - WebRTC Interoperability (and why it is important)WebRTC Summit (June 2014) - WebRTC Interoperability (and why it is important)
WebRTC Summit (June 2014) - WebRTC Interoperability (and why it is important)
 
DevCon5 (July 2014) - Intro to WebRTC
DevCon5 (July 2014) - Intro to WebRTCDevCon5 (July 2014) - Intro to WebRTC
DevCon5 (July 2014) - Intro to WebRTC
 
Pkewebrtc
PkewebrtcPkewebrtc
Pkewebrtc
 
WbeRTC in IOT presented in KrankyGeek
WbeRTC in IOT presented in KrankyGeekWbeRTC in IOT presented in KrankyGeek
WbeRTC in IOT presented in KrankyGeek
 
WebRTC - Is it ready? 2013
WebRTC - Is it ready? 2013WebRTC - Is it ready? 2013
WebRTC - Is it ready? 2013
 
DevCon 5 (July 2013) - WebSockets
DevCon 5 (July 2013) - WebSocketsDevCon 5 (July 2013) - WebSockets
DevCon 5 (July 2013) - WebSockets
 
minor-project-1.ppt
minor-project-1.pptminor-project-1.ppt
minor-project-1.ppt
 
Webrtc and tokbox
Webrtc and tokboxWebrtc and tokbox
Webrtc and tokbox
 
The Future of SIP in WebRTC
The Future of SIP in WebRTCThe Future of SIP in WebRTC
The Future of SIP in WebRTC
 
Html5 RTC - 1
Html5 RTC  - 1Html5 RTC  - 1
Html5 RTC - 1
 
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...
 
Building a WebRTC Communication and collaboration platform - techleash barcamp
Building a WebRTC Communication and collaboration platform  -  techleash barcampBuilding a WebRTC Communication and collaboration platform  -  techleash barcamp
Building a WebRTC Communication and collaboration platform - techleash barcamp
 
Status of WebRTC across Asia by Alan Quayle +++
Status of WebRTC across Asia by Alan Quayle +++Status of WebRTC across Asia by Alan Quayle +++
Status of WebRTC across Asia by Alan Quayle +++
 
Integrate WebRTC Voice / Video Call App Using Contus Fly
Integrate WebRTC Voice / Video Call App Using Contus FlyIntegrate WebRTC Voice / Video Call App Using Contus Fly
Integrate WebRTC Voice / Video Call App Using Contus Fly
 
TADS Developer Summit WebRTC Dan Burnett
TADS Developer Summit WebRTC Dan BurnettTADS Developer Summit WebRTC Dan Burnett
TADS Developer Summit WebRTC Dan Burnett
 
The State of WebRTC
The State of WebRTCThe State of WebRTC
The State of WebRTC
 

Mehr von Crocodile WebRTC SDK and Cloud Signalling Network (8)

DevCon5 (July 2014) - Acision SDK
DevCon5 (July 2014) - Acision SDKDevCon5 (July 2014) - Acision SDK
DevCon5 (July 2014) - Acision SDK
 
WebRTC Conference and Expo (November 2013) - Signalling Workshop
WebRTC Conference and Expo (November 2013)  - Signalling WorkshopWebRTC Conference and Expo (November 2013)  - Signalling Workshop
WebRTC Conference and Expo (November 2013) - Signalling Workshop
 
WebRTC Summit November 2013 - WebRTC Interoperability (and why it is important)
WebRTC Summit November 2013 - WebRTC Interoperability (and why it is important)WebRTC Summit November 2013 - WebRTC Interoperability (and why it is important)
WebRTC Summit November 2013 - WebRTC Interoperability (and why it is important)
 
VUC 24-May-2013 - Crocodile
VUC 24-May-2013 - CrocodileVUC 24-May-2013 - Crocodile
VUC 24-May-2013 - Crocodile
 
ITSPA May 2013 - WebRTC, TURN, and WebSocket
ITSPA May 2013 - WebRTC, TURN, and WebSocketITSPA May 2013 - WebRTC, TURN, and WebSocket
ITSPA May 2013 - WebRTC, TURN, and WebSocket
 
Kamailio World 2013 - SIP and MSRP over WebSocket
Kamailio World 2013 - SIP and MSRP over WebSocketKamailio World 2013 - SIP and MSRP over WebSocket
Kamailio World 2013 - SIP and MSRP over WebSocket
 
FOSDEM 2013 - SIP and MSRP over WebSocket in Kamailio
FOSDEM 2013 - SIP and MSRP over WebSocket in KamailioFOSDEM 2013 - SIP and MSRP over WebSocket in Kamailio
FOSDEM 2013 - SIP and MSRP over WebSocket in Kamailio
 
Crocodile RTC Launch (Google Campus) - 1: Introduction
Crocodile RTC Launch (Google Campus) - 1: IntroductionCrocodile RTC Launch (Google Campus) - 1: Introduction
Crocodile RTC Launch (Google Campus) - 1: Introduction
 

Kürzlich hochgeladen

"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
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
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
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
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
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
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
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 

Kürzlich hochgeladen (20)

"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
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
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
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
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
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
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
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 

DevCon 5 (December 2013) - WebRTC & WebSockets

  • 1.
  • 2. WebRTC & WebSockets Peter Dunkley, Technical Director, Crocodile RCS Ltd Email: Twitter: peter.dunkley@crocodilertc.net @pdunkley
  • 3. Evolution on the web WebSocket and WebRTC implementations become available Sir Tim Berners-Lee creates HTML. Web -pages are static W3C produces the DOM1 specification 1990 Microsoft and Netscape introduce different mechanisms for DHTML 1996 1998 2004 2011 Google uses Ajax in Gmail (W3C releases 1st draft in 2006) – the dawn of web-apps
  • 4. The revolution Revolution in telecoms Claude Chappe invented the optical telegraph Alexander Graham Bell patents the telephone 1792 1837 1876 Before today the operators (big and small) had full control over real-time communications because it was hard to do and substantial infrastructure investment was required. 1919 1960s > 1990s > 2011 WebSocket and WebRTC implementations become available Rotary dial enters service First commercial electrical telegraph created by Cooke and Wheatstone From the 1990s onwards voice started to be carried on technologies developed for data networks such as ATM and IP From the 1960s onwards digital exchanges start to appear 1963: DTMF enters service
  • 5. Demo #1: Crocodile Scrum ● Opera and Google Chrome only for now – Works on Google Chrome for Android – Mozilla Firefox support coming soon ● Anonymous ad-hoc conferencing ● Makes use of WebRTC and WebSockets ● Join the “devcon5” scrum http://www.crocodilescrum.com/
  • 6.
  • 7. There are a number of proprietary implementations that provide direct interactive rich communication using audio, video, collaboration, games, etc. between two peers' webbrowsers. These are not interoperable, as they require nonstandard extensions or plugins to work. There is a desire to standardize the basis for such communication so that interoperable communication can be established between any compatible browsers. Real-Time Communication in WEBBrowsers (rtcweb) 2013-03-13 charter http://tools.ietf.org/wg/rtcweb/
  • 8. The mission of the Web Real-Time Communications Working Group, part of the Ubiquitous Web Applications Activity, is to define client-side APIs to enable Real-Time Communications in Web browsers. These APIs should enable building applications that can be run inside a browser, requiring no extra downloads or plugins, that allow communication between parties using audio, video and supplementary real-time communication, without having to use intervening servers (unless needed for firewall traversal, or for providing intermediary services). Web Real-Time Communications Working Group Charter http://www.w3.org/2011/04/webrtc-charter.html
  • 9. RTCWeb and WebRTC: not the same thing ● RTCWeb is the on-the-wire protocol as defined by the IETF and may be used in many applications and systems – – On network servers – ● Within VoIP phones Includes MTI codecs for audio and video WebRTC is the browser API as defined by the IETF
  • 10. The web Your web app #3 Your web app #2 Your web app #1 ... WebRTC API RTCWeb WebRTC C++ API (PeerConnection) Session management / Abstract signalling (Session) Voice Engine Video Engine Transport G.711/OPUS Codec H.264/VP8 Codec SRTP NetEQ for voice Video jitter buffer Multiplexing Echo Canceller / Noise Reduction Image enhancements P2P STUN + TURN + ICE Audio Capture/Render Video Capture Network I/O Based on the diagram from http://www.webrtc.org/reference/architecture Your browser
  • 11. Audio Codecs ● RTCWeb has two MTI (Mandatory To Implement) audio codecs: – G.711 narrowband ● ● trivial to implement ● – free to use and unencumbered by patents widely supported on legacy equipment OPUS wideband ● free to use and unencumbered by patents ● complicated to implement – but there are open-source versions ● fantastic quality audio and excellent handling of packet loss
  • 12. Video Codecs (the great debate) ● ● There is a big argument over which of H.264 and VP8 should be used The arguments are commercial not technical – H.264 and VP8 are comparable in terms of performance and quality – H.264 and its licensing terms are unacceptable to many small companies and open-source projects ● – The IPR situation around VP8 is unclear ● – ● Cisco's offer helps some but not all Large (and rich) companies cannot risk using VP8 – it makes them a target Mandating both will not solve this Out of desperation older codecs are being suggested including H.261, H.263, and Theora
  • 13. Codecs are not limited to the MTI ● ● Apps and browsers can offer any codecs they are capable of The MTI is just the base set of codecs you must support to ensure interoperability between endpoints
  • 14. WebRTC has a rich API ● Media Capture and Streams – – ● Audio, video, and screen-sharing http://www.w3.org/TR/mediacapture-streams/ MediaStream Recording – ● http://www.w3.org/TR/mediastream-recording/ WebRTC – Data can be exchanged too – http://www.w3.org/TR/webrtc/ Available (to varying degrees) in Chrome, Firefox, and Opera
  • 15. What do these APIs let you do? ● ● Capture audio and video streams from microphone and webcam Exchange the captured audio and video with a peer in real-time ● Record local and remote audio and video streams ● Reliably exchange data with a peer in real-time
  • 16. Screen sharing ● Google Chrome has experimental support for screen sharing – ● Screen sharing is (more) dangerous (than video calling) – ● You need to turn on a hidden flag to use it It only takes one frame to reveal any personal details on your screen In the future screen sharing will be restricted – Only available to Chrome apps (not web-pages) – Will require you to explicitly select the screen or window you want to share
  • 17. The DataChannel ● The WebRTC DataChannel uses SCTP over DTLS – – ● SCTP means reliable, in-order, frame delivery DTLS means UDP packets (so the same NAT traversal mechanisms can be used for audio, video, and data) that are encrypted There are already peer-2-peer file-sharing applications implemented using the WebRTC DataChannel
  • 18. Demo #2: live.pics.io ● ● Produced by pics.io Uses WebRTC DataChannels for “Live Collaborative Image Sharing” ● Drop your images into the browser ● Share the link (to multiple people) ● Talk people through your slide-show http://live.pics.io/
  • 19.
  • 20. WebRTC applications ● ● ● ● WebRTC is not about making phone calls in a browser – although this is one possible use case WebRTC allows you to make communicate in a contextual way A phone call is an activity of its own – but that's not how humans communicate face to face A phone call is a disruptive (rude) demanding event
  • 21. WebRTC is about context ● Talk to someone while collaborating on a document ● A better way to access customer services – – ● Already authenticated Use a web-form instead of an IVR A truly virtual PBX – ● Web-based phone and operator console Many gaming and entertainment related applications – FPS without centralised servers (DataChannel) and where you can see and hear your opponents – Online gambling (for example, poker) where you can see your opponents – Online dating, after dinner speaking, and so on – It's not necessarily about the real-time audio and video, but they enhance the experience
  • 22. Demo #3: Cube Slam ● Produced by Google to showcase WebRTC ● WebRTC DataChannel enables multi-player gaming ● WebRTC media enhances the game but is not part of it https://www.cubeslam.com/
  • 23.
  • 24. The WebRTC APIs are not enough ● ● Google made a controversial (but very wise) decision not to specify how the signalling should work Signalling is required – To discover who to communicate with – To exchange information on what the communication should be (audio, data, video, and codecs) – Even the simplest, proprietary, RESTful exchange is signalling
  • 25. Interoperability is not always required ● Interoperability may negatively impact the business case – For example: ● Document collaboration – you want to keep people in your application ● Online dating – you want to keep people on your site ● Online gaming – there is no point in different games interoperating
  • 27. Interoperability is sometimes required ● These are typically ones where the point of the application is communication – For example: ● Conferencing – calls in and out of legacy networks are required ● Call Centres – calls in and out of legacy networks are required ● Virtual PBX – calls in and out of legacy networks are required
  • 29. Signalling transport options ● XHR Polling (HTTP Long Polling) – – Securable – ● Easy Inefficient WebSockets – Available in all modern browsers (certainly any with WebRTC support) – Fast – Securable
  • 30. Demo #4: Web Communicator ● A fully-featured unified communications client ● Makes use of WebRTC and WebSockets ● Multiple WebSocket/DataChannel connections for multiple protocols – ● ● MSRP (file-transfer), SIP (session signalling), and XMPP (messaging and presence) No need to create a new application for every target platform Browsers without WebRTC support can still use WebSocket for file-transfer, messaging, presence, and other data
  • 31.
  • 32.
  • 33. The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. RFC 6455, I. Fette (Google, Inc) et al, December 2011 http://tools.ietf.org/html/rfc6455 To enable Web applications to maintain bidirectional communications with server-side processes, this specification introduces the WebSocket interface. The WebSocket API (W3C Candidate Recommendation), I. Hickson (Google, Inc), 20 September 2012 http://www.w3.org/TR/websockets
  • 34. WebSockets: safe and secure ● A raw TCP/UDP API for Javascript would be dangerous – ● The WebSocket protocol is asynchronous – ● Connections can only be established from the client side Data from client to server is masked – ● There would be no need to fool users into installing trojans Prevents in-line proxies from mistaking the data for HTTP and modifying it Can be secured using TLS
  • 35. Easy to use ● Very simple API – – Methods: close(), send() – ● Constructor creates (opens) the connection Events: onopen(), onerror(), onclose() Has the advantages of TCP and UDP – – ● Data is framed – no need to parse the stream to work out where messages start and end Frame delivery is guaranteed and in-order Interpretation of the frames is based on subprotocol not TCP or UDP port
  • 36. Opening a connection (Handshake) Request from client (browser) GET wss://edge00.crocodilertc.net/4m9e4ipsfd8uh0leg0kr HTTP/1.1 Origin: https://www.crocodiletalk.com Host: edge00.crocodilertc.net Sec­WebSocket­Key: ywV2YxcaL0DMDVPyeHYj3Q== Upgrade: websocket Sec­WebSocket­Protocol: sip Connection: Upgrade Sec­WebSocket­Version: 13 Response from server HTTP/1.1 101 Switching Protocols Access­Control­Allow­Origin: https://www.crocodiletalk.com Connection: upgrade Sec­WebSocket­Accept: 9H9dBstuq+Y4Be2Ql7WWkV6tnjA= Sec­WebSocket­Protocol: sip Upgrade: websocket The browser API handles this for you
  • 37. Controlling connections ● Two types of frame – Data frames – Control frames ● Close If you receive a close on a connection that you have not send a close on, send a close on that connection ● Ping If you receive a ping on a connection send a pong on that connection ● Pong The browser API handles this for you
  • 38. Sending/receiving frames 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-------+-+-------------+-------------------------------+ |F|R|R|R| opcode|M| Payload len | Extended payload length | |I|S|S|S| (4) |A| (7) | (16/64) | |N|V|V|V| |S| | (if payload len==126/127) | | |1|2|3| |K| | | +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + | Extended payload length continued, if payload len == 127 | + - - - - - - - - - - - - - - - +-------------------------------+ | |Masking-key, if MASK set to 1 | +-------------------------------+-------------------------------+ | Masking-key (continued) | Payload Data | +-------------------------------- - - - - - - - - - - - - - - - + : Payload Data continued ... : + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | Payload Data continued ... | +---------------------------------------------------------------+ RFC 6455, section 5.2 The browser API handles this for you
  • 39. Proxies and subprotocols ● Proxies – In-line proxies may be an issue ● ● – Using TLS avoids the issue and is good-practice anyway Configured proxies ● ● Masking helps avoid frame corruption, but sometimes the handshake fails Must support the CONNECT HTTP request Subprotocols – http://www.iana.org/assignments/websocket/websocket.xml
  • 40. The simplest form of signalling ● ● ● Exchange json blobs over WebSockets But beware, when you go beyond the basic “call” signalling gets hard (especially in the edge cases) Standards based signalling schemes have already solved: – Session liveness – Hold – Renegotiate – Transfer – and more...
  • 41. Signalling options ● Open standards are usually best – – XMPP over WebSocket, http://tools.ietf.org/html/draft-moffitt-xmpp-over-websocket – ● SIP over WebSocket, http://tools.ietf.org/html/draft-ietf-sipcore-sip-websocket OpenPeer, http://openpeer.org/ The WebRTC API is easy but signalling is often hard – There are many open-source libraries that do the signalling – The library APIs vary in complexity to meet every need – Hosted infrastructure lets you add real-time communications to your website without having to build a network yourself
  • 42. Opensource projects ● Node.js – ● SIP Servers – ● JAIN-SIP-Javascript, JsSIP, QoffeeSIP, sipml5 XMPP Servers (and connection managers) – ● Asterisk, Kamailio, OverSIP, reSIPprocate SIP Clients – ● Many WebSocket libraries available (for example, support in socket.io) ejabberd-websockets, node-xmpp-bosh, openfire-websockets XMPP Clients – JSJaC, Strophe
  • 43. Demo #5: Chrome Developer Tools ● Google Chrome provides a range of tools to help you create and debug applications ● You can add view code and add breakpoints ● You can modify code and view debug ● You can examine what is happening on the wire – ● The Network → WebSockets view can be particularly helpful – especially if using TLS ...
  • 44.
  • 45. Dealing with firewalls ● WebRTC is peer-to-peer technology ● Sometimes firewall and NAT devices get in the way ● ICE (Interactive Connectivity Establishment) is mandatory – – ● STUN (Session Traversal Utilities for NAT) helps in most cases TURN (Traversal Using Relays around NAT) helps when STUN doesn't If a firewall is specifically configured to block real-time communications your options are limited – TURN over WebSockets is now under development https://code.google.com/p/rfc5766-turn-server/
  • 46. Desktop and mobile apps ● This technology isn't just for browsers ● Native WebRTC is possible – – ● Mobile: Android and iOS libraries, and BB10 has support in the OS Desktop: Linux, OS X, and Windows libraries Native WebSocket libraries are available – WebSockets are a sensible option for mobile app developers who want a safe way to exchange data with servers
  • 47. HOWTO: A SIP over WebSockets Server ● ● Download, build, and install Kamailio 4.1 Create a kamailio.cfg file based on the following code snippets http://www.kamailio.org/
  • 48. Handling WebSocket handshakes in Kamailio ... tcp_accept_no_cl=yes ... event_route[xhttp:request] { set_reply_close(); set_reply_no_connect(); if ($hdr(Upgrade)=~"websocket" && $hdr(Connection)=~"Upgrade" && $rm=~"GET") { # Validate as required (Host:, Origin:, Cookie:) if (ws_handle_handshake()) exit; } xhttp_reply("404", "Not Found", "", ""); }
  • 49. WebSocket clients are always behind a NAT ● ● ● Javascript applications cannot see the real IP address and port for the WebSocket connection This means that the SIP server cannot trust addresses and ports in SIP messages received over WebSockets nathelper and/or outbound can be used to solve this problem
  • 50. Using nathelper on SIP over WebSocket requests modparam(“nathelper|registrar”, “received_avp”, “$avp(RECEIVED)”) ... request_route { route(REQINIT); route(WSDETECT); ... route[WSDETECT] { if (proto == WS || proto == WSS) { force_rport(); if (is_method(“REGISTER”)) { fix_nated_register(); } else if (is_method(“INVITE|NOTIFY|SUBSCRIBE”)) { add_contact_alias(); } } } ... route[WITHINDLG] { if (has_totag()) { if (loose_route()) { if (!isdsturiset()) { handle_ruri_alias(); } ...
  • 51. Using nathelper on SIP over WebSocket responses onreply_route { if ((proto == WS || proto == WSS) && status =~ “[12][0­9][0­9]”) { add_contact_alias(); } }
  • 52. What about web-calls to non-web endpoints? ● Use mediaproxy-ng from SIPWise https://github.com/sipwise/mediaproxy-ng ● Companion Kamailio module: rtpproxy-ng http://kamailio.org/docs/modules/devel/modules/rtpproxy-ng.html ● SIP Signalling is proxied instead of B2BUA'd (that is, not broken)
  • 53. Catch 488 to invoke mediaproxy-ng modparam(“rtpproxy­ng”, “rtpproxy_sock”, “udp:localhost:22223”) ... route[LOCATION] { ... t_on_failure(“UA_FAILURE”); } ... failure_route[UA_FAILURE] { if (t_check_status(“488”) && sdp_content()) { if (sdp_get_line_startswith(“$avp(mline)”, “m=”)) { if ($avp(mline) =~ “SAVPF”)) { $avp(rtpproxy_offer_flags) = “froc­sp”; $avp(rtpproxy_answer_flags) = “froc+SP”; } else { $avp(rtpproxy_offer_flags) = “froc+SP”; $avp(rtpproxy_answer_flags) = “froc­sp”; } # In a production system you probably need to catch # “RTP/SAVP” and “RTP/AVPF” and handle them correctly # too } append_branch(); rtpproxy_offer($avp(rtpproxy_offer_flags)); t_on_reply(“RTPPROXY_REPLY”); route(RELAY); } } ...
  • 54. Handle replies to the retried INVITE modparam(“rtpproxy­ng”, “rtpproxy_sock”, “udp:localhost:22223”) ... failure_route[UA_FAILURE] { ... t_on_reply(“RTPPROXY_REPLY”); route(RELAY); } onreply_route[RTPPROXY_REPLY] { if (status =~ “18[03]”) { # mediaproxy­ng only supports SRTP/SDES – early media # won't work so strip it out now to avoid problems change_reply_status(180, “Ringing”); remove_body(); } else if (status =~ “2[0­9][0­9]” && sdp_content()) { rtpproxy_answer($avp(rtpproxy_answer_flags)); } } ...
  • 55. Current mediaproxy-ng limitations ● No support for SRTP/DTLS – – mediaproxy-ng works with Google Chrome today (but Google will be removing SRTP/SDES over the next year) – ● SRTP/DTLS is a MUST for WebRTC and SRTP/SDES is a MUST NOT mediaproxy-ng does not work with Firefox at this time Does not support “bundling”/”unbundling” – WebRTC can “bundle” audio and video streams together, but mediaproxy-ng does not support this yet – Google Chrome does not currently support “unbundling” – You can have an audio stream, or a video stream, but not an audio and video stream at this time
  • 56. HOWTO: Authenticate SIP using a web-service ● ● ● ● ● No communication required between authentication server and Kamailio Credentials expire (the expiry time is chosen by the authentication server) Extract username and password from the “GET” used for HTTP handshake and authenticate there, or Use the credentials for digest authentication of SIP requests Check the From-URI or To-URI in SIP headers match the user part of the credential http://kamailio.org/docs/modules/devel/modules/auth_ephemeral.html
  • 57. REST Calling UA Web Service OAuth2 Shared secret – communication link not required SIP You don’t have to create or manage accounts on the SIP Proxy/registrar SIP Proxy SIP Called UA
  • 58. Authenticating the handshake ... tcp_accept_no_cl=yes ... modparam(“auth_ephemeral”, “secret”, “kamailio_rules”) ... modparam(“htable”, “htable”, “wsconn=>size=8;”) ... event_route[xhttp:request] { ... # URI format is /?username=foo&password=bar $var(uri_params) = $(hu{url.querystring}); $var(username) = $(var(uri_params){param.name,username,&}); $var(password) = $(var(uri_params){param.name,password,&}); # Note: username and password could also have been in a Cookie: header if (!autheph_authenticate(“$var(username)”, “$var(password)”)) { xhttp_reply(“403”, “Forbidden”, “”, “”); exit; } if (ws_handle_handshake()) { $sht(wsconn=>$si:$sp::username) = $var(username) exit; } ... event_route[websocket:closed] { $var(regex) = $si + “:” $sp + “.*”; sht_rm_name_re(“wsconn=>$var(regex)”); }