-
Notifications
You must be signed in to change notification settings - Fork 171
/
webrtc-handler.js
70 lines (64 loc) · 2.25 KB
/
webrtc-handler.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
var webrtcHandler = {
createOffer: function(callback) {
var captureStream = document.getElementById('main-canvas').captureStream();
var peer = this.getPeer();
captureStream.getTracks().forEach(function(track) {
peer.addTrack(track, captureStream);
});
peer.onicecandidate = function(event) {
if (!event || !!event.candidate) {
return;
}
callback({
sdp: peer.localDescription.sdp,
type: peer.localDescription.type
});
};
peer.createOffer({
OfferToReceiveAudio: false,
OfferToReceiveVideo: false
}).then(function(sdp) {
peer.setLocalDescription(sdp);
});
},
setRemoteDescription: function(sdp) {
this.peer.setRemoteDescription(new RTCSessionDescription(sdp)).then(function() {
if (typeof setTemporaryLine === 'function') {
setTemporaryLine();
}
});
},
createAnswer: function(sdp, callback) {
var peer = this.getPeer();
peer.onicecandidate = function(event) {
if (!event || !!event.candidate) {
return;
}
callback({
sdp: peer.localDescription.sdp,
type: peer.localDescription.type
});
};
this.peer.setRemoteDescription(new RTCSessionDescription(sdp)).then(function() {
peer.createAnswer({
OfferToReceiveAudio: false,
OfferToReceiveVideo: true
}).then(function(sdp) {
peer.setLocalDescription(sdp);
});
});
peer.ontrack = function(event) {
callback({
stream: event.streams[0]
});
};
},
getPeer: function() {
var WebRTC_Native_Peer = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
var RTCSessionDescription = window.RTCSessionDescription || window.mozRTCSessionDescription;
var RTCIceCandidate = window.RTCIceCandidate || window.mozRTCIceCandidate;
var peer = new WebRTC_Native_Peer(null);
this.peer = peer;
return peer;
}
};