Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows
-
Upload
amitesh-madhur -
Category
Technology
-
view
24.759 -
download
7
description
Transcript of Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows
![Page 1: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/1.jpg)
WebRTC, STUN and TURN
Amitesh MadhurCisco Systems
![Page 2: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/2.jpg)
Agenda
User Media Peer Connection STUN and TURN Setting up STUN and TURN
![Page 3: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/3.jpg)
Agenda
User Media Peer Connection STUN and TURN Setting up STUN and TURN
![Page 4: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/4.jpg)
Get User Media
getUserMedia() Collects video audio input Synchronization of input
![Page 5: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/5.jpg)
<video id=“me" autoplay></video>
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia; if (navigator.getUserMedia) { navigator.getUserMedia({video: true}, onSuccess, onError); }
window.URL = window.URL || window.webkitURL; var me = document.getElementById('me');
function onSuccess(stream) { me.src = window.URL.createObjectURL(stream); } function onError(e) { // error }
![Page 6: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/6.jpg)
Vendor Prefixes
Chrome >= 21: webkitGetUserMedia() window.webkitURL.createObjectURL()
Opera >= 12: getUserMedia() set video.src
Firefox >= 20: mozGetUserMedia() window.URL.createObjectURL()
IE: not implemented Source : http://html5videoguide.net/presentations/WebDirCode2012/#page10
![Page 7: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/7.jpg)
Agenda
User Media Peer Connection STUN and TURN Setting up STUN and TURN
![Page 8: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/8.jpg)
Peer Connection
Establish a connection Pass the user media stream Other side gets the stream Add the received stream to <video> tag
![Page 9: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/9.jpg)
Peer Connection
Compression and de-compression P2P connection using STUN or TURN Encrypting the data
![Page 10: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/10.jpg)
<video id=“me" autoplay></video> <video id=“other" autoplay></video>
peer = new RTCPeerConnection(servers);peer.onaddstream = gotRemoteStream;peer.addStream(localStream);
if(host) {peer.createOffer(callGotOffer, null, {mandatory: {
OfferToReceiveAudio: true, OfferToReceiveVideo: true}});
} else {peer.createAnswer(peer.remoteDescription, callGotOffer);}function callGotOffer(sd) { peer.setLocalDescription(sd); } function gotAnswer(desc) { peer.setRemoteDescription(new RTCSessionDescription(desc));} function gotRemoteStream(e) { attachMediaStream(remoteVideo, e.stream);}
![Page 11: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/11.jpg)
chrome://webrtc-internals/
![Page 12: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/12.jpg)
Agenda
User Media Peer Connection STUN and TURN Setting up STUN and TURN
![Page 13: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/13.jpg)
Need for STUN
NAT NAT
![Page 14: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/14.jpg)
Need for TURN
NAT
Fire
wal
l
NAT
Fire
wal
l
![Page 15: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/15.jpg)
STUN and TURN
peer = new RTCPeerConnection(servers);
![Page 16: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/16.jpg)
STUN and TURN
var chrome, stun, turn, servers = {}, peer; chrome = parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./ )[2]); stun = {url: 'stun:10.0.0.7:9999‘}; turn = {url: 'turn:[email protected]:333', credential: ‘pass‘};
if (isChrome && chrome >= 28) { turn = { url: 'turn:10.0.0.7:3333', credential: 'madhur', username: 'amitesh' };}servers.iceServers = [stun, turn];peer = new RTCPeerConnection(servers);
![Page 17: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/17.jpg)
Public STUNstun.l.google.com:19302stun1.l.google.com:19302stun2.l.google.com:19302stun3.l.google.com:19302stun4.l.google.com:19302
![Page 18: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/18.jpg)
Agenda
User Media Peer Connection STUN and TURN Setting up STUN and TURN
![Page 20: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/20.jpg)
STUN on Linux
Run “make” Provides 3 libraries
(stunserver, stunclient and stuntestcode) Run stunserver --help or stunclient --help By default runs on port 3478
![Page 22: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/22.jpg)
STUN on Windows
Unzip goto command prompt and run server:
stunserver.exe --mode full --primaryinterface 10.0.0.6 --altinterface 10.0.0.11 --altport 999 --primaryport 9999 --verbosity 3
![Page 23: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/23.jpg)
TURN on Linux
Build libevent
$ wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz$ tar xvfz libevent-2.0.21-stable.tar.gz$ cd libevent-2.0.21-stable$ ./configure$ make$ make install
![Page 24: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/24.jpg)
TURN on Linux
Download TURN from https://code.google.com/p/rfc5766-turn-server
$ tar xvfz turnserver.tar.gz$ ./configure$ make$ make install
![Page 25: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/25.jpg)
TURN on Linux
Copy the “turnserver.conf” from turnserver/examples/etc/turnserver.conf
to /usr/local/etc/turnserver.conf
Changes in turnserver.conf listening-port=<new-port>
listening-ip=<your ip>user=<user>:<password>
![Page 26: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/26.jpg)
TURN on Linux
Run turnserver turnserver -L <ip_address>
IN YOUR JAVASCRIPTvar turn; turn = { url: 'turn:<user-name>@<IP>:<PORT>',
credential: ‘password‘};
// for chrome 28 and aboveturn = { url: 'turn:<IP-address>:<PORT>', username: ‘<user-name>‘, credential: ‘<password>' };
![Page 27: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/27.jpg)
TURN on Windows
Install Cygwin Make sure to install devel dependencies Build libevent $ wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz$ tar xvfz libevent-2.0.21-stable.tar.gz$ cd libevent-2.0.21-stable$ ./configure$ make$ make install
![Page 28: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/28.jpg)
TURN on Windows Download TURN from
https://code.google.com/p/rfc5766-turn-server
$ tar xvfz turnserver.tar.gz$ ./configure$ make$ make install
![Page 29: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/29.jpg)
TURN on Windows Issues during ./configure
Missing libpq.a, hiredis, postgreSql (You may Ignore them, since these are optional)
Issues during make error: ‘struct sockaddr_in’ has no member named
‘sin_len’Edit turnserver.version/src/client/na_turn_ioaddr.c and comment line #169// addr->s4.sin_len = sizeof(struct sockaddr_in);
![Page 30: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/30.jpg)
TURN on Windows Run fixing “make” and “make install” Copy the “turnserver.conf” from
turnserver/examples/etc/turnserver.conf
to /usr/local/etc/turnserver.conf
Changes in turnserver.conf listening-port=<new-port>
listening-ip=<your ip>user=<user>:<password>
![Page 31: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/31.jpg)
TURN on Windows
Run turnserver turnserver.exe -a -r 10.0.0.6
IN YOUR JAVASCRIPTvar turn; turn = { url: 'turn:<user-name>@<IP>:<PORT>',
credential: ‘password‘};
// for chrome 28 and aboveturn = { url: 'turn:<IP-address>:<PORT>', username: ‘<user-name>‘, credential: ‘<password>' };
![Page 32: Web rtc, Media stream, Peer connection, Setting up STUN and TURN on Linux and Windows](https://reader035.fdocuments.net/reader035/viewer/2022062312/554b9d46b4c905b3618b46c6/html5/thumbnails/32.jpg)
Thank you
Demos : http://webrtc.googlecode.com/svn/trunk/samples/js/demos/Twitter: @amiteshawaFacebook: facebook.com/amitesh.madhurLinkedin: in.linkedin.com/pub/amitesh-madhur/a/932/499