-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathwrtclib.js
More file actions
144 lines (122 loc) · 3.6 KB
/
wrtclib.js
File metadata and controls
144 lines (122 loc) · 3.6 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
var Logger = require('./Logger');
var WebRTC = require('webrtc');
module.exports = function(configObj){
var logger = new Logger(['volumeChange', 'speaking', 'stopSpeaking', 'channelMessage']);
var WebRTC = Rtclib(configObj, logger);
return WebRTC;
};
function Rtclib(config, logger){
/*
peer options
id: unique identifier, default undefined
stream: remote stream, default undefined
type: 'video' , 'audio' , 'screen', default video
oneway: ??? , default false
enableDataChannels: enable RTCDataChannels, default parents value
receiveMedia: true or false ???, default parents value
parent: predefined, the parent webrtc object
sharemyscreen: whether screensharing should be enabled, true false, default false
prefix: browser prefix, default undefined
broadcaster: ???, default undefined
*/
var pc = config.peerConfig;
function peerConfig(id, wrtc){
var options = pc;
var ops = {
id:id
};
for(var p in options){
ops[p] = options[p];
}
return ops;
}
function createPeer(id, wrtc){
var config = peerConfig(id, wrtc);
var peer = wrtc.createPeer(config);
wrtc.emit('addUser', peer);
return peer;
}
function findOrCreatePeer(id, wrtc){
var peer = wrtc.getPeers(id);
if(peer.length){
peer = peer[0];
} else {
peer = createPeer(id, wrtc);
}
return peer;
}
//Logger is used for logging events to the console, takes a list of events to ignore
//changeState places a filter on what type of events to see
//logger.changeState('pc');
/*
WebRTC config options
debug: default false, whether events will be logged
logger: object used for logging events
peerConnectionConfig: {} , iceservers
peerConnectionConstraints: {}, ???
receiveMedia: ???
enableDataChannels: Enable RTCDataChannels
*/
//config WebRTC object for
var wrtcConfig = (function(config){
var ops = {
debug:true,
logger:logger,
};
for(var p in config){
ops[p] = config[p];
}
return ops;
})(config.webrtcConfig);
logger.debug = wrtcConfig.debug;
//create rtc manager
var wrtc = new WebRTC(wrtcConfig);
/*
on localMedia.start() parameter
These are not required as the WebRTC library sets them
Required fields when setting contraints
audio: true false defaults to false
video: true false defaults to false
var mediaConstraints = {
audio:true,
video:true
};
*/
// //What to do when a new remote stream is added
// wrtc.on('peerStreamAdded', onStream.onRemoteStream);
wrtc.onNewPeer = config.NewPeer || createPeer;
wrtc.onFindOrCreatePeer = config.findOrCreate || findOrCreatePeer;
/*
Peer Message Scheme
to: Recipient of message, id for routing on server side
broadcaster: this.broadcaster, ???
roomType: 'video' 'audio' 'screen'
type: messageType, 'type of message'
payload: payload, 'metadata'
prefix: webrtc.prefix browser prefix
*/
function signal(data){
var message = data.message;
var id = data.id;
var peer = wrtc.onFindOrCreatePeer(id, wrtc);
//does the filtering of whether it is an offer/answer or ice candidate
peer.handleMessage(message);
}
var signallingEvents = {
sig: signal,
onOffer: signal,
onAnswer: signal,
onIce: signal
};
wrtc.handlers = {};
(function(){
var ops = config.signalHandlers || {};
for(var p in ops){
signallingEvents[p] = ops[p];
}
for(var evt in signallingEvents){
wrtc.handlers[evt] = signallingEvents[evt];
}
})();
return wrtc;
}