@techsee/techsee-media-service 0.7.0-alpha.2 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/LocalStreamManager.d.ts +21 -0
- package/lib/LocalStreamManager.d.ts.map +1 -0
- package/lib/LocalStreamManager.js +268 -0
- package/lib/LocalStreamManager.js.map +1 -0
- package/lib/MediaConstants.d.ts +52 -0
- package/lib/MediaConstants.d.ts.map +1 -0
- package/lib/MediaConstants.js +68 -0
- package/lib/MediaConstants.js.map +1 -0
- package/lib/MediaContracts.d.ts +122 -0
- package/lib/MediaContracts.d.ts.map +1 -0
- package/lib/MediaContracts.js +6 -0
- package/lib/MediaContracts.js.map +1 -0
- package/lib/MediaPublisher.d.ts +14 -0
- package/lib/MediaPublisher.d.ts.map +1 -0
- package/lib/MediaPublisher.js +43 -0
- package/lib/MediaPublisher.js.map +1 -0
- package/lib/MediaServiceBase.d.ts +64 -0
- package/lib/MediaServiceBase.d.ts.map +1 -0
- package/lib/MediaServiceBase.js +591 -0
- package/lib/MediaServiceBase.js.map +1 -0
- package/lib/MediaSession/MediaSessionBase.d.ts +23 -0
- package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -0
- package/lib/MediaSession/MediaSessionBase.js +63 -0
- package/lib/MediaSession/MediaSessionBase.js.map +1 -0
- package/lib/MediaSession/SessionOpentok.d.ts +49 -0
- package/lib/MediaSession/SessionOpentok.d.ts.map +1 -0
- package/lib/MediaSession/SessionOpentok.js +379 -0
- package/lib/MediaSession/SessionOpentok.js.map +1 -0
- package/lib/MediaSession/SessionTurn.d.ts +32 -0
- package/lib/MediaSession/SessionTurn.d.ts.map +1 -0
- package/lib/MediaSession/SessionTurn.js +439 -0
- package/lib/MediaSession/SessionTurn.js.map +1 -0
- package/lib/MediaSession/TurnConstants.d.ts +18 -0
- package/lib/MediaSession/TurnConstants.d.ts.map +1 -0
- package/lib/MediaSession/TurnConstants.js +36 -0
- package/lib/MediaSession/TurnConstants.js.map +1 -0
- package/lib/MediaSubscriber.d.ts +36 -0
- package/lib/MediaSubscriber.d.ts.map +1 -0
- package/lib/MediaSubscriber.js +208 -0
- package/lib/MediaSubscriber.js.map +1 -0
- package/lib/MediaUtils/Compatibility.d.ts +11 -0
- package/lib/MediaUtils/Compatibility.d.ts.map +1 -0
- package/lib/MediaUtils/Compatibility.js +71 -0
- package/lib/MediaUtils/Compatibility.js.map +1 -0
- package/lib/MediaUtils/MediaDomUtils.d.ts +4 -0
- package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -0
- package/lib/MediaUtils/MediaDomUtils.js +200 -0
- package/lib/MediaUtils/MediaDomUtils.js.map +1 -0
- package/lib/MediaUtils/MediaTracer.d.ts +3 -0
- package/lib/MediaUtils/MediaTracer.d.ts.map +1 -0
- package/lib/MediaUtils/MediaTracer.js +12 -0
- package/lib/MediaUtils/MediaTracer.js.map +1 -0
- package/lib/TechseeMediaStream.d.ts +14 -0
- package/lib/TechseeMediaStream.d.ts.map +1 -0
- package/lib/TechseeMediaStream.js +58 -0
- package/lib/TechseeMediaStream.js.map +1 -0
- package/lib/oldCode/constants.js.map +1 -0
- package/lib/oldCode/event-emitter.js.map +1 -0
- package/lib/{index.js → oldCode/index.js} +1 -1
- package/lib/oldCode/index.js.map +1 -0
- package/lib/{opentok → oldCode/opentok}/session.js +6 -0
- package/lib/oldCode/opentok/session.js.map +1 -0
- package/lib/oldCode/opentok/stream.js.map +1 -0
- package/lib/oldCode/publisher.js.map +1 -0
- package/lib/{service.js → oldCode/service.js} +4 -6
- package/lib/oldCode/service.js.map +1 -0
- package/lib/oldCode/session.js.map +1 -0
- package/lib/oldCode/stream.js.map +1 -0
- package/lib/oldCode/subscriber.js.map +1 -0
- package/lib/oldCode/tracer.d.ts +35 -0
- package/lib/oldCode/tracer.d.ts.map +1 -0
- package/lib/oldCode/tracer.js +151 -0
- package/lib/oldCode/tracer.js.map +1 -0
- package/lib/oldCode/utils/ImageFixer.d.ts +1 -0
- package/lib/oldCode/utils/ImageFixer.d.ts.map +1 -0
- package/lib/oldCode/utils/ImageFixer.js +58 -0
- package/lib/oldCode/utils/ImageFixer.js.map +1 -0
- package/lib/oldCode/webrtc/constants.js.map +1 -0
- package/lib/{webrtc → oldCode/webrtc}/helper.js +2 -4
- package/lib/oldCode/webrtc/helper.js.map +1 -0
- package/lib/oldCode/webrtc/session-kms.js.map +1 -0
- package/lib/oldCode/webrtc/session-loopback.js.map +1 -0
- package/lib/{webrtc → oldCode/webrtc}/session-turn.js +47 -41
- package/lib/oldCode/webrtc/session-turn.js.map +1 -0
- package/lib/{webrtc → oldCode/webrtc}/session-turn.v2.js +85 -48
- package/lib/oldCode/webrtc/session-turn.v2.js.map +1 -0
- package/lib/oldCode/webrtc/session.js.map +1 -0
- package/lib/{webrtc → oldCode/webrtc}/stream.js +7 -9
- package/lib/oldCode/webrtc/stream.js.map +1 -0
- package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +1 -0
- package/lib/oldCode/webrtc/temasys/adapter.js.map +1 -0
- package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +1 -0
- package/lib/qos/raw-qos.js.map +1 -1
- package/lib/webrtc-ie-shim.js +3218 -0
- package/lib/webrtc-ie-shim.js.map +1 -0
- package/package.json +7 -5
- package/lib/constants.js.map +0 -1
- package/lib/event-emitter.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/opentok/session.js.map +0 -1
- package/lib/opentok/stream.js.map +0 -1
- package/lib/publisher.js.map +0 -1
- package/lib/service.js.map +0 -1
- package/lib/session.js.map +0 -1
- package/lib/stream.js.map +0 -1
- package/lib/subscriber.js.map +0 -1
- package/lib/tracer.js +0 -22
- package/lib/tracer.js.map +0 -1
- package/lib/v2/Contracts.d.ts +0 -41
- package/lib/v2/Contracts.d.ts.map +0 -1
- package/lib/v2/Contracts.js +0 -31
- package/lib/v2/Contracts.js.map +0 -1
- package/lib/v2/LocalStreamManager.d.ts +0 -8
- package/lib/v2/LocalStreamManager.d.ts.map +0 -1
- package/lib/v2/LocalStreamManager.js +0 -94
- package/lib/v2/LocalStreamManager.js.map +0 -1
- package/lib/v2/MediaServiceBase.d.ts +0 -24
- package/lib/v2/MediaServiceBase.d.ts.map +0 -1
- package/lib/v2/MediaServiceBase.js +0 -85
- package/lib/v2/MediaServiceBase.js.map +0 -1
- package/lib/v2/MediaSubscriber.d.ts +0 -8
- package/lib/v2/MediaSubscriber.d.ts.map +0 -1
- package/lib/v2/MediaSubscriber.js +0 -17
- package/lib/v2/MediaSubscriber.js.map +0 -1
- package/lib/webrtc/constants.js.map +0 -1
- package/lib/webrtc/helper.js.map +0 -1
- package/lib/webrtc/session-kms.js.map +0 -1
- package/lib/webrtc/session-loopback.js.map +0 -1
- package/lib/webrtc/session-turn.js.map +0 -1
- package/lib/webrtc/session-turn.v2.js.map +0 -1
- package/lib/webrtc/session.js.map +0 -1
- package/lib/webrtc/stream.js.map +0 -1
- package/lib/webrtc/temasys/adapter-loader.js.map +0 -1
- package/lib/webrtc/temasys/adapter.js.map +0 -1
- package/lib/webrtc/webrtc-ie-shim.js.map +0 -1
- /package/lib/{constants.js → oldCode/constants.js} +0 -0
- /package/lib/{event-emitter.js → oldCode/event-emitter.js} +0 -0
- /package/lib/{opentok → oldCode/opentok}/stream.js +0 -0
- /package/lib/{publisher.js → oldCode/publisher.js} +0 -0
- /package/lib/{session.js → oldCode/session.js} +0 -0
- /package/lib/{stream.js → oldCode/stream.js} +0 -0
- /package/lib/{subscriber.js → oldCode/subscriber.js} +0 -0
- /package/lib/{webrtc → oldCode/webrtc}/constants.js +0 -0
- /package/lib/{webrtc → oldCode/webrtc}/session-kms.js +0 -0
- /package/lib/{webrtc → oldCode/webrtc}/session-loopback.js +0 -0
- /package/lib/{webrtc → oldCode/webrtc}/session.js +0 -0
- /package/lib/{webrtc → oldCode/webrtc}/temasys/adapter-loader.js +0 -0
- /package/lib/{webrtc → oldCode/webrtc}/temasys/adapter.js +0 -0
- /package/lib/{webrtc → oldCode/webrtc}/webrtc-ie-shim.js +0 -0
|
@@ -25,9 +25,7 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
|
|
|
25
25
|
|
|
26
26
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
27
27
|
|
|
28
|
-
var
|
|
29
|
-
return window.WebRtcSessionTrace === true;
|
|
30
|
-
});
|
|
28
|
+
var tracer = (0, _tracer.getTracer)();
|
|
31
29
|
|
|
32
30
|
//Currently this version supports subscribing only. Publishing will be implemented as needed.
|
|
33
31
|
|
|
@@ -61,6 +59,8 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
61
59
|
_this._selfClientType = clientType;
|
|
62
60
|
_this._localStreamFactory = streamFactory;
|
|
63
61
|
|
|
62
|
+
_this._connectPromise = null;
|
|
63
|
+
|
|
64
64
|
var iceServers = credentials.ice.map(function (item) {
|
|
65
65
|
return {
|
|
66
66
|
urls: item.url,
|
|
@@ -92,32 +92,46 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
92
92
|
|
|
93
93
|
var connectOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
if (this._connectPromise) {
|
|
96
|
+
tracer.trace('already connecting');
|
|
97
|
+
return this._connectPromise;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
tracer.trace('connect');
|
|
96
101
|
|
|
97
|
-
|
|
98
|
-
trace('Joining SessionId: ' + _this2._credentials.sessionId);
|
|
102
|
+
this._connectPromise = this._connectSocket(this._credentials.url, connectOnly).then(function () {
|
|
103
|
+
tracer.trace('Joining SessionId: ' + _this2._credentials.sessionId);
|
|
99
104
|
|
|
100
105
|
_this2._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.JOIN_ROOM, {
|
|
101
106
|
clientType: _this2._selfClientType,
|
|
102
107
|
sessionId: _this2._credentials.sessionId
|
|
103
108
|
});
|
|
109
|
+
|
|
110
|
+
_this2._connectPromise = null;
|
|
104
111
|
}).catch(function (error) {
|
|
112
|
+
setTimeout(function () {
|
|
113
|
+
return _this2._connectPromise = null;
|
|
114
|
+
});
|
|
105
115
|
_this2.emit(_session.SESSION_EVENTS.EXCEPTION, { source: 'connect', error: error });
|
|
106
116
|
throw error;
|
|
107
117
|
});
|
|
118
|
+
|
|
119
|
+
return this._connectPromise;
|
|
108
120
|
};
|
|
109
121
|
|
|
110
122
|
TurnWebRtcSessionV2.prototype.disconnect = function disconnect() {
|
|
111
123
|
var _this3 = this;
|
|
112
124
|
|
|
125
|
+
tracer.trace('Disconnecting from media session');
|
|
126
|
+
|
|
113
127
|
this._peerConnections.forEach(function (peerConnection) {
|
|
114
128
|
_this3._destroyPeerConnection(peerConnection);
|
|
115
129
|
});
|
|
116
130
|
|
|
117
|
-
this.emit(_session.SESSION_EVENTS.DISCONNECTED, { reason: 'disconnected' });
|
|
118
|
-
|
|
119
131
|
this._socket.off();
|
|
120
132
|
this._socket.disconnect();
|
|
133
|
+
|
|
134
|
+
this.emit(_session.SESSION_EVENTS.DISCONNECTED, { reason: 'disconnected' });
|
|
121
135
|
};
|
|
122
136
|
|
|
123
137
|
TurnWebRtcSessionV2.prototype._connectSocket = function _connectSocket(url, connectOnly) {
|
|
@@ -143,6 +157,24 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
143
157
|
socket.on('connect_error', done);
|
|
144
158
|
socket.on('connect_timeout', done);
|
|
145
159
|
|
|
160
|
+
socket.on('reconnect_attempt', function (args) {
|
|
161
|
+
tracer.trace('Session Socket reconnect_attempt', args);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
socket.on('reconnecting', function (args) {
|
|
165
|
+
tracer.trace('Session Socket reconnecting', args);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
socket.on('disconnect', function (reason) {
|
|
169
|
+
tracer.trace('Session Socket disconnected, reason:', reason);
|
|
170
|
+
// The initial example of differentiating between "forced" disconnect and "network" disconnect is taken from:
|
|
171
|
+
// https://socket.io/docs/client-api/#Event-%E2%80%98disconnect%E2%80%99
|
|
172
|
+
//if (reason !== 'io server disconnect' && reason !== 'io client disconnect') {
|
|
173
|
+
// the disconnection was initiated by the server or by client, you need to call (connect) manually
|
|
174
|
+
_this4.disconnect();
|
|
175
|
+
//}
|
|
176
|
+
});
|
|
177
|
+
|
|
146
178
|
if (!connectOnly) {
|
|
147
179
|
//PUBLISHING NOT SUPPORTED YET
|
|
148
180
|
//socket.on(SOCKET_EVENTS.INCOMING.SEND_OFFER, this._sendOfferHandler);
|
|
@@ -170,20 +202,20 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
170
202
|
var uid = _ref2.uid,
|
|
171
203
|
peerId = _ref2.peerId;
|
|
172
204
|
|
|
173
|
-
trace('_sendOfferHandler');
|
|
205
|
+
tracer.trace('_sendOfferHandler');
|
|
174
206
|
|
|
175
207
|
var peerConnection = this._createPeerConnection(peerId, _constants.CLIENT_TYPES.GUEST);
|
|
176
208
|
var offerParams = { offerToReceiveAudio: true, offerToReceiveVideo: true };
|
|
177
209
|
|
|
178
210
|
this._localStreamFactory(this._constraints).then(function (localStream) {
|
|
179
|
-
trace('_sendOfferHandler stream and peer created');
|
|
211
|
+
tracer.trace('_sendOfferHandler stream and peer created');
|
|
180
212
|
|
|
181
213
|
var peerConnectionStream = new _stream.TsWebRTCStream(_this5, localStream.clone(), _constants.DEFAULT_STREAM_NAMES.MOBILE_CLIENT_VIDEO_STREAM, false);
|
|
182
214
|
|
|
183
215
|
peerConnectionStream.peerConnection = peerConnection;
|
|
184
216
|
|
|
185
217
|
localStream.getTracks().forEach(function (track) {
|
|
186
|
-
trace('Adding local tracks to peer connection');
|
|
218
|
+
tracer.trace('Adding local tracks to peer connection');
|
|
187
219
|
peerConnection.addTrack(track, peerConnectionStream._mediaStream);
|
|
188
220
|
});
|
|
189
221
|
|
|
@@ -191,7 +223,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
191
223
|
}).then(function () {
|
|
192
224
|
return peerConnection.createOffer(offerParams);
|
|
193
225
|
}).then(function (offerDesc) {
|
|
194
|
-
trace('Initiator has created sdp offer', { offerDesc: offerDesc });
|
|
226
|
+
tracer.trace('Initiator has created sdp offer', { offerDesc: offerDesc });
|
|
195
227
|
|
|
196
228
|
_this5._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.SDP_OFFER, {
|
|
197
229
|
uid: uid,
|
|
@@ -201,10 +233,10 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
201
233
|
});
|
|
202
234
|
|
|
203
235
|
return peerConnection.setLocalDescription(offerDesc).then(function () {
|
|
204
|
-
trace('Local description was set on');
|
|
236
|
+
tracer.trace('Local description was set on');
|
|
205
237
|
});
|
|
206
238
|
}).catch(function (e) {
|
|
207
|
-
trace('Error', e);
|
|
239
|
+
tracer.trace('Error', e);
|
|
208
240
|
});
|
|
209
241
|
};
|
|
210
242
|
|
|
@@ -218,7 +250,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
218
250
|
uid = _ref3.uid,
|
|
219
251
|
peerId = _ref3.peerId;
|
|
220
252
|
|
|
221
|
-
trace('joinResponse Received', sdpAnswer);
|
|
253
|
+
tracer.trace('joinResponse Received', sdpAnswer);
|
|
222
254
|
|
|
223
255
|
this._withPeerConnection(peerId, function (peerConnection) {
|
|
224
256
|
var answer = new RTCSessionDescription({
|
|
@@ -227,11 +259,11 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
227
259
|
});
|
|
228
260
|
|
|
229
261
|
peerConnection.setRemoteDescription(answer).then(function () {
|
|
230
|
-
trace('Remote description was set', answer);
|
|
262
|
+
tracer.trace('Remote description was set', answer);
|
|
231
263
|
|
|
232
264
|
_this6._processQueuedIceCandidates(peerId);
|
|
233
265
|
}).catch(function (e) {
|
|
234
|
-
trace('Error', e);
|
|
266
|
+
tracer.trace('Error', e);
|
|
235
267
|
});
|
|
236
268
|
});
|
|
237
269
|
};
|
|
@@ -242,7 +274,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
242
274
|
TurnWebRtcSessionV2.prototype._peerDisconnectedHandler = function _peerDisconnectedHandler(_ref4) {
|
|
243
275
|
var peerId = _ref4.peerId;
|
|
244
276
|
|
|
245
|
-
trace('_peerDisconnectedHandler');
|
|
277
|
+
tracer.trace('_peerDisconnectedHandler');
|
|
246
278
|
};
|
|
247
279
|
|
|
248
280
|
//#endregion WebRTC Initiator - session Initiator (User on mobile device)
|
|
@@ -259,7 +291,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
259
291
|
peerId = _ref5.peerId,
|
|
260
292
|
uid = _ref5.uid;
|
|
261
293
|
|
|
262
|
-
trace('sdpOffer Received', { sdpOffer: sdpOffer });
|
|
294
|
+
tracer.trace('sdpOffer Received', { sdpOffer: sdpOffer });
|
|
263
295
|
|
|
264
296
|
var peerConnection = this._createPeerConnection(peerId, _constants.CLIENT_TYPES.INITIATOR);
|
|
265
297
|
|
|
@@ -267,11 +299,11 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
267
299
|
|
|
268
300
|
if (this._constraints.audio) {
|
|
269
301
|
subscriberInitChain = subscriberInitChain.then(function () {
|
|
270
|
-
trace('Creating agent local streams');
|
|
302
|
+
tracer.trace('Creating agent local streams');
|
|
271
303
|
|
|
272
304
|
return _this7._localStreamFactory(_this7._constraints).then(function (localStream) {
|
|
273
305
|
localStream.getTracks().forEach(function (track) {
|
|
274
|
-
trace('Adding local tracks to peer connection');
|
|
306
|
+
tracer.trace('Adding local tracks to peer connection');
|
|
275
307
|
|
|
276
308
|
if (track.kind === 'audio') {
|
|
277
309
|
|
|
@@ -282,7 +314,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
282
314
|
_this7.registerStream(agentAudioStream.id, agentAudioStream);
|
|
283
315
|
peerConnection.addTrack(track, peerConnection.peerLogicalStream);
|
|
284
316
|
|
|
285
|
-
trace('Agent audio stream added to peerConnection');
|
|
317
|
+
tracer.trace('Agent audio stream added to peerConnection');
|
|
286
318
|
}
|
|
287
319
|
});
|
|
288
320
|
});
|
|
@@ -293,10 +325,10 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
293
325
|
var remoteDesc = new RTCSessionDescription({ type: 'offer', sdp: sdpOffer });
|
|
294
326
|
|
|
295
327
|
return peerConnection.setRemoteDescription(remoteDesc).then(function () {
|
|
296
|
-
trace('Remote description was set', remoteDesc);
|
|
328
|
+
tracer.trace('Remote description was set', remoteDesc);
|
|
297
329
|
|
|
298
330
|
return peerConnection.createAnswer().then(function (sdpAnswer) {
|
|
299
|
-
trace('_sdpOfferHandler answer created', sdpAnswer);
|
|
331
|
+
tracer.trace('_sdpOfferHandler answer created', sdpAnswer);
|
|
300
332
|
|
|
301
333
|
_this7._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.SDP_ANSWER, {
|
|
302
334
|
uid: uid,
|
|
@@ -306,7 +338,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
306
338
|
});
|
|
307
339
|
|
|
308
340
|
return peerConnection.setLocalDescription(sdpAnswer).then(function () {
|
|
309
|
-
trace('_sdpOfferHandler local desc was set');
|
|
341
|
+
tracer.trace('_sdpOfferHandler local desc was set');
|
|
310
342
|
|
|
311
343
|
_this7._processQueuedIceCandidates(peerId);
|
|
312
344
|
});
|
|
@@ -315,7 +347,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
315
347
|
});
|
|
316
348
|
|
|
317
349
|
return subscriberInitChain.catch(function (e) {
|
|
318
|
-
trace('Error in _sdpOfferHandler', e);
|
|
350
|
+
tracer.trace('Error in _sdpOfferHandler', e);
|
|
319
351
|
throw e;
|
|
320
352
|
});
|
|
321
353
|
};
|
|
@@ -324,7 +356,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
324
356
|
|
|
325
357
|
|
|
326
358
|
TurnWebRtcSessionV2.prototype._initiatorReconnectHandler = function _initiatorReconnectHandler() {
|
|
327
|
-
trace('_initiatorReconnectHandler');
|
|
359
|
+
tracer.trace('_initiatorReconnectHandler');
|
|
328
360
|
|
|
329
361
|
var initiatorPeer = this._getInitiatorPeer();
|
|
330
362
|
|
|
@@ -359,15 +391,26 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
359
391
|
peerConnection.peerLogicalStream = new MediaStream();
|
|
360
392
|
|
|
361
393
|
peerConnection.oniceconnectionstatechange = function (state) {
|
|
362
|
-
trace('ICE Connection state for peer ' + peerId + ' was changed to: ' + state.currentTarget.iceConnectionState, state);
|
|
363
|
-
|
|
364
|
-
|
|
394
|
+
tracer.trace('ICE Connection state for peer ' + peerId + ' was changed to: ' + state.currentTarget.iceConnectionState, state);
|
|
395
|
+
var cnnState = state.currentTarget.iceConnectionState;
|
|
396
|
+
if (cnnState === 'disconnected') {
|
|
397
|
+
//According to https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceConnectionState
|
|
398
|
+
//Connection can become active again, so we will do nothing.
|
|
399
|
+
// if (peerConnection.peerType === CLIENT_TYPES.INITIATOR) {
|
|
400
|
+
// //this._destroyPeerConnection(peerConnection);
|
|
401
|
+
// this.disconnect();
|
|
402
|
+
// }
|
|
403
|
+
} else if (cnnState === 'failed' || cnnState === 'closed') {
|
|
404
|
+
//According to https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceConnectionState
|
|
405
|
+
//When iceConnectionState is failed or closed, the peer connection can be destroyed.
|
|
406
|
+
//In our case, we disconnecting from media session, and when session will be needed again, it will be connected.
|
|
407
|
+
_this8.disconnect();
|
|
365
408
|
}
|
|
366
409
|
};
|
|
367
410
|
|
|
368
411
|
peerConnection.onicecandidate = function (event) {
|
|
369
412
|
if (event.candidate) {
|
|
370
|
-
trace(_this8._selfClientType + ' peerConn.onicecandidate', event.candidate);
|
|
413
|
+
tracer.trace(_this8._selfClientType + ' peerConn.onicecandidate', event.candidate);
|
|
371
414
|
_this8._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {
|
|
372
415
|
sessionId: _this8._credentials.sessionId,
|
|
373
416
|
peerId: peerId,
|
|
@@ -375,7 +418,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
375
418
|
clientType: _this8._selfClientType
|
|
376
419
|
});
|
|
377
420
|
} else {
|
|
378
|
-
trace('ICE Candidate is null in peerConnection', event);
|
|
421
|
+
tracer.trace('ICE Candidate is null in peerConnection', event);
|
|
379
422
|
}
|
|
380
423
|
};
|
|
381
424
|
|
|
@@ -385,7 +428,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
385
428
|
streams = trackEvent.streams;
|
|
386
429
|
|
|
387
430
|
|
|
388
|
-
trace('Stream created from peer connection track: ' + track.kind, track, streams.length > 0 ? streams[0] : 'NO STREAM');
|
|
431
|
+
tracer.trace('Stream created from peer connection track: ' + track.kind, track, streams.length > 0 ? streams[0] : 'NO STREAM');
|
|
389
432
|
|
|
390
433
|
var tsStream = new _stream.TsWebRTCStream(_this8, new MediaStream([track]));
|
|
391
434
|
|
|
@@ -400,7 +443,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
400
443
|
|
|
401
444
|
this._peerConnections.set(peerId, peerConnection);
|
|
402
445
|
|
|
403
|
-
trace(this._selfClientType + ' peerConnection created');
|
|
446
|
+
tracer.trace(this._selfClientType + ' peerConnection created');
|
|
404
447
|
|
|
405
448
|
return peerConnection;
|
|
406
449
|
};
|
|
@@ -479,9 +522,9 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
479
522
|
var candidate = _ref6.candidate,
|
|
480
523
|
peerId = _ref6.peerId;
|
|
481
524
|
|
|
482
|
-
trace('_iceCandidateReceivedHandler', candidate);
|
|
525
|
+
tracer.trace('_iceCandidateReceivedHandler', candidate);
|
|
483
526
|
if (!candidate) {
|
|
484
|
-
trace('NO iceCandidate');
|
|
527
|
+
tracer.trace('NO iceCandidate');
|
|
485
528
|
|
|
486
529
|
return;
|
|
487
530
|
}
|
|
@@ -489,21 +532,21 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
489
532
|
var peerConnection = this._peerConnections.get(peerId);
|
|
490
533
|
|
|
491
534
|
if (!peerConnection || !peerConnection.remoteDescription) {
|
|
492
|
-
trace('Queueing iceCandidate', candidate);
|
|
535
|
+
tracer.trace('Queueing iceCandidate', candidate);
|
|
493
536
|
this._queueIceCandidate(candidate, peerId);
|
|
494
537
|
|
|
495
538
|
return;
|
|
496
539
|
}
|
|
497
540
|
|
|
498
|
-
trace('Going to add iceCandidate', candidate);
|
|
541
|
+
tracer.trace('Going to add iceCandidate', candidate);
|
|
499
542
|
this._addIceCandidateToPeer(candidate, peerConnection);
|
|
500
543
|
};
|
|
501
544
|
|
|
502
545
|
TurnWebRtcSessionV2.prototype._addIceCandidateToPeer = function _addIceCandidateToPeer(iceCandidate, peerConnection) {
|
|
503
546
|
return peerConnection.addIceCandidate(iceCandidate).then(function () {
|
|
504
|
-
trace('ICE Candidate add to peer connection');
|
|
547
|
+
tracer.trace('ICE Candidate add to peer connection');
|
|
505
548
|
}).catch(function (e) {
|
|
506
|
-
trace('Error adding ICE Candidate to peer connection', e);
|
|
549
|
+
tracer.trace('Error adding ICE Candidate to peer connection', e);
|
|
507
550
|
});
|
|
508
551
|
};
|
|
509
552
|
|
|
@@ -515,11 +558,11 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
515
558
|
|
|
516
559
|
if (pendingIces) {
|
|
517
560
|
pendingIces.forEach(function (pendingIce) {
|
|
518
|
-
trace('Adding pending ICE to peer connections');
|
|
561
|
+
tracer.trace('Adding pending ICE to peer connections');
|
|
519
562
|
_this10._addIceCandidateToPeer(pendingIce, peerConnection);
|
|
520
563
|
});
|
|
521
564
|
} else {
|
|
522
|
-
trace('No pending ICE found for peer', peerId);
|
|
565
|
+
tracer.trace('No pending ICE found for peer', peerId);
|
|
523
566
|
}
|
|
524
567
|
});
|
|
525
568
|
};
|
|
@@ -532,12 +575,6 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
|
|
|
532
575
|
this._pendingPeersIce[peerId].push(iceCandidate);
|
|
533
576
|
};
|
|
534
577
|
|
|
535
|
-
TurnWebRtcSessionV2.prototype._iceStateDisconnected = function _iceStateDisconnected(peerConnection) {
|
|
536
|
-
if (peerConnection.peerType === _constants.CLIENT_TYPES.INITIATOR) {
|
|
537
|
-
this._destroyPeerConnection(peerConnection);
|
|
538
|
-
}
|
|
539
|
-
};
|
|
540
|
-
|
|
541
578
|
//#endregion
|
|
542
579
|
|
|
543
580
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["oldCode/webrtc/session-turn.v2.js"],"names":["io","tracer","TurnWebRtcSessionV2","_credentials","sessionId","credentials","constraints","clientType","streamFactory","_socket","_localPeer","_pendingPeersIce","_peerConnections","Map","_constraints","_selfClientType","_localStreamFactory","_connectPromise","iceServers","ice","map","item","urls","url","username","login","credential","password","_configuration","iceTransportPolicy","_joinResponseHandler","bind","_iceCandidateReceivedHandler","_sendOfferHandler","_sdpOfferHandler","_initiatorReconnectHandler","_peerDisconnectedHandler","_extendPeerConnection","connect","connectOnly","trace","_connectSocket","then","emit","SOCKET_EVENTS","OUTGOING","JOIN_ROOM","catch","error","setTimeout","SESSION_EVENTS","EXCEPTION","source","disconnect","forEach","peerConnection","_destroyPeerConnection","off","DISCONNECTED","reason","Promise","resolve","reject","socket","SOCKET_RECONNECTION_DELAY","SOCKET_RECONNECTION_DELAY_MAX","SOCKET_RECONNECTION_ATTEMPTS","SOCKET_PATH","done","_","once","err","on","INCOMING","ERROR","args","SDP_OFFER","PUBLISHER_RECONNECT","ICE_CANDIDATE","uid","peerId","_createPeerConnection","CLIENT_TYPES","GUEST","offerParams","offerToReceiveAudio","offerToReceiveVideo","localStream","peerConnectionStream","TsWebRTCStream","clone","DEFAULT_STREAM_NAMES","MOBILE_CLIENT_VIDEO_STREAM","getTracks","track","addTrack","_mediaStream","registerStream","id","createOffer","offerDesc","sdpOffer","sdp","setLocalDescription","e","sdpAnswer","_withPeerConnection","answer","RTCSessionDescription","type","setRemoteDescription","_processQueuedIceCandidates","INITIATOR","subscriberInitChain","audio","kind","stream","MediaStream","streamName","DASHBOARD_AUDIO_STREAM","agentAudioStream","peerLogicalStream","remoteDesc","createAnswer","SDP_ANSWER","initiatorPeer","_getInitiatorPeer","RECONNECT_TURN_SERVER","peer","_getPeerConnectionsByType","length","peerConnectionType","get","Error","RTCPeerConnection","peerType","oniceconnectionstatechange","state","currentTarget","iceConnectionState","cnnState","onicecandidate","event","candidate","ontrack","trackEvent","streams","tsStream","remote","STREAM_CREATED","set","_getRemoteStreams","unregisterStream","STREAM_DESTROYED","size","delete","close","result","push","callback","prototype","remoteDescription","_queueIceCandidate","_addIceCandidateToPeer","iceCandidate","addIceCandidate","pendingIces","pendingIce","TsMediaSession"],"mappings":"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","file":"session-turn.v2.js","sourcesContent":["import {SESSION_EVENTS, TsMediaSession} from '../session';\nimport * as io from 'socket.io-client';\nimport {\n CLIENT_TYPES, DEFAULT_STREAM_NAMES,\n SOCKET_EVENTS,\n SOCKET_PATH,\n SOCKET_RECONNECTION_ATTEMPTS,\n SOCKET_RECONNECTION_DELAY,\n SOCKET_RECONNECTION_DELAY_MAX\n} from './constants';\nimport {TsWebRTCStream} from './stream';\n\nimport {getTracer} from '../tracer';\n\nconst tracer = getTracer();\n\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nexport class TurnWebRtcSessionV2 extends TsMediaSession {\n get id() {\n return this._credentials.sessionId;\n }\n\n constructor({credentials, constraints, clientType, streamFactory}) {\n super();\n\n this._socket = null;\n this._localPeer = null;\n this._pendingPeersIce = {};\n this._peerConnections = new Map();\n\n this._credentials = credentials;\n this._constraints = constraints;\n this._selfClientType = clientType;\n this._localStreamFactory = streamFactory;\n\n this._connectPromise = null;\n\n const iceServers = credentials.ice.map((item) => ({\n urls: item.url,\n username: item.login,\n credential: item.password\n }));\n\n this._configuration = {\n iceServers,\n iceTransportPolicy: 'relay'\n };\n\n this._joinResponseHandler = this._joinResponseHandler.bind(this);\n this._iceCandidateReceivedHandler = this._iceCandidateReceivedHandler.bind(this);\n this._sendOfferHandler = this._sendOfferHandler.bind(this);\n this._sdpOfferHandler = this._sdpOfferHandler.bind(this);\n this._initiatorReconnectHandler = this._initiatorReconnectHandler.bind(this);\n this._peerDisconnectedHandler = this._peerDisconnectedHandler.bind(this);\n\n this._extendPeerConnection();\n }\n\n //#region Socket Connectivity\n\n connect(connectOnly = false) {\n if (this._connectPromise) {\n tracer.trace('already connecting');\n return this._connectPromise;\n }\n\n tracer.trace('connect');\n\n this._connectPromise = this._connectSocket(this._credentials.url, connectOnly)\n .then(() => {\n tracer.trace('Joining SessionId: ' + this._credentials.sessionId);\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.JOIN_ROOM, {\n clientType: this._selfClientType,\n sessionId: this._credentials.sessionId\n });\n\n this._connectPromise = null;\n })\n .catch((error) => {\n setTimeout(() => this._connectPromise = null);\n this.emit(SESSION_EVENTS.EXCEPTION, {source: 'connect', error});\n throw error;\n });\n\n return this._connectPromise;\n }\n\n disconnect() {\n tracer.trace('Disconnecting from media session');\n\n this._peerConnections.forEach((peerConnection) => {\n this._destroyPeerConnection(peerConnection);\n });\n\n this._socket.off();\n this._socket.disconnect();\n\n this.emit(SESSION_EVENTS.DISCONNECTED, {reason: 'disconnected'});\n }\n\n _connectSocket(url, connectOnly) {\n return new Promise((resolve, reject) => {\n const socket = this._socket = io.connect(url, {\n 'forceNew': true,\n 'reconnectionDelay': SOCKET_RECONNECTION_DELAY,\n 'reconnectionDelayMax': SOCKET_RECONNECTION_DELAY_MAX,\n 'reconnectionAttempts': SOCKET_RECONNECTION_ATTEMPTS,\n 'path': SOCKET_PATH\n });\n\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n\n socket.once('connect', () => done());\n socket.on(SOCKET_EVENTS.INCOMING.ERROR, done);\n socket.on('connect_error', done);\n socket.on('connect_timeout', done);\n\n socket.on('reconnect_attempt', (args) => {\n tracer.trace('Session Socket reconnect_attempt', args);\n });\n\n socket.on('reconnecting', (args) => {\n tracer.trace('Session Socket reconnecting', args);\n });\n\n socket.on('disconnect', (reason) => {\n tracer.trace('Session Socket disconnected, reason:', reason);\n // The initial example of differentiating between \"forced\" disconnect and \"network\" disconnect is taken from:\n // https://socket.io/docs/client-api/#Event-%E2%80%98disconnect%E2%80%99\n //if (reason !== 'io server disconnect' && reason !== 'io client disconnect') {\n // the disconnection was initiated by the server or by client, you need to call (connect) manually\n this.disconnect();\n //}\n });\n\n if (!connectOnly) {\n //PUBLISHING NOT SUPPORTED YET\n //socket.on(SOCKET_EVENTS.INCOMING.SEND_OFFER, this._sendOfferHandler);\n //socket.on(SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, this._joinResponseHandler);\n //socket.on(SOCKET_EVENTS.INCOMING.PEER_DISCONNECTED, this._peerDisconnectedHandler);\n\n socket.on(SOCKET_EVENTS.INCOMING.SDP_OFFER, this._sdpOfferHandler);\n socket.on(SOCKET_EVENTS.INCOMING.PUBLISHER_RECONNECT, this._initiatorReconnectHandler);\n\n socket.on(SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, this._iceCandidateReceivedHandler);\n }\n });\n }\n\n //#endregion\n\n //#region WebRTC Initiator - session Initiator (User on mobile device)\n\n // Received by Initiator, causing him to emit SDP_OFFER\n _sendOfferHandler({uid, peerId}) {\n tracer.trace('_sendOfferHandler');\n\n const peerConnection = this._createPeerConnection(peerId, CLIENT_TYPES.GUEST);\n const offerParams = {offerToReceiveAudio: true, offerToReceiveVideo: true};\n\n this._localStreamFactory(this._constraints)\n .then((localStream) => {\n tracer.trace('_sendOfferHandler stream and peer created');\n\n const peerConnectionStream = new TsWebRTCStream(this, localStream.clone(), DEFAULT_STREAM_NAMES.MOBILE_CLIENT_VIDEO_STREAM, false);\n\n peerConnectionStream.peerConnection = peerConnection;\n\n localStream.getTracks().forEach((track) => {\n tracer.trace('Adding local tracks to peer connection');\n peerConnection.addTrack(track, peerConnectionStream._mediaStream);\n });\n\n this.registerStream(peerConnectionStream.id, peerConnectionStream);\n })\n .then(() => peerConnection.createOffer(offerParams))\n .then((offerDesc) => {\n tracer.trace('Initiator has created sdp offer', {offerDesc});\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.SDP_OFFER, {\n uid,\n peerId,\n sessionId: this._credentials.sessionId,\n sdpOffer: offerDesc.sdp\n });\n\n return peerConnection.setLocalDescription(offerDesc)\n .then(() => {\n tracer.trace('Local description was set on');\n });\n })\n .catch((e) => {\n tracer.trace('Error', e);\n });\n }\n\n // Received by the Initiator: Indicates that publish should be started\n _joinResponseHandler({sdpAnswer, uid, peerId}) {\n tracer.trace('joinResponse Received', sdpAnswer);\n\n this._withPeerConnection(peerId, (peerConnection) => {\n const answer = new RTCSessionDescription({\n type: 'answer',\n sdp: sdpAnswer\n });\n\n peerConnection.setRemoteDescription(answer)\n .then(() => {\n tracer.trace('Remote description was set', answer);\n\n this._processQueuedIceCandidates(peerId);\n })\n .catch((e) => {\n tracer.trace('Error', e);\n });\n });\n }\n\n // Received by Initiator after a guests socket has been disconnected\n _peerDisconnectedHandler({peerId}) {\n tracer.trace('_peerDisconnectedHandler');\n }\n\n //#endregion WebRTC Initiator - session Initiator (User on mobile device)\n\n //#region WebRTC Guest - session Guest (Agent on dashboard platform)\n\n // Received by Guest, causing him to emit SDP_ANSWER\n _sdpOfferHandler({sdpOffer, peerId, uid}) {\n tracer.trace('sdpOffer Received', {sdpOffer});\n\n const peerConnection = this._createPeerConnection(peerId, CLIENT_TYPES.INITIATOR);\n\n let subscriberInitChain = Promise.resolve();\n\n if (this._constraints.audio) {\n subscriberInitChain = subscriberInitChain.then(() => {\n tracer.trace('Creating agent local streams');\n\n return this._localStreamFactory(this._constraints)\n .then((localStream) => {\n localStream.getTracks().forEach((track) => {\n tracer.trace('Adding local tracks to peer connection');\n\n if (track.kind === 'audio') {\n\n const stream = new MediaStream([track]);\n const streamName = DEFAULT_STREAM_NAMES.DASHBOARD_AUDIO_STREAM;\n const agentAudioStream = new TsWebRTCStream(this, stream, streamName, false);\n\n this.registerStream(agentAudioStream.id, agentAudioStream);\n peerConnection.addTrack(track, peerConnection.peerLogicalStream);\n\n tracer.trace('Agent audio stream added to peerConnection');\n }\n });\n });\n });\n }\n\n subscriberInitChain.then(() => {\n const remoteDesc = new RTCSessionDescription({type: 'offer', sdp: sdpOffer});\n\n return peerConnection.setRemoteDescription(remoteDesc)\n .then(() => {\n tracer.trace('Remote description was set', remoteDesc);\n\n return peerConnection.createAnswer()\n .then((sdpAnswer) => {\n tracer.trace('_sdpOfferHandler answer created', sdpAnswer);\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.SDP_ANSWER, {\n uid,\n peerId,\n sessionId: this._credentials.sessionId,\n sdpAnswer: sdpAnswer.sdp\n });\n\n return peerConnection.setLocalDescription(sdpAnswer)\n .then(() => {\n tracer.trace('_sdpOfferHandler local desc was set');\n\n this._processQueuedIceCandidates(peerId);\n });\n });\n });\n\n });\n\n return subscriberInitChain.catch((e) => {\n tracer.trace('Error in _sdpOfferHandler', e);\n throw e;\n });\n }\n\n // Received by Guest after an Initiator reconnects to room\n _initiatorReconnectHandler() {\n tracer.trace('_initiatorReconnectHandler');\n\n const initiatorPeer = this._getInitiatorPeer();\n\n if (initiatorPeer) {\n this._destroyPeerConnection(initiatorPeer);\n }\n\n this.emit(SESSION_EVENTS.RECONNECT_TURN_SERVER);\n }\n\n _getInitiatorPeer() {\n const peer = this._getPeerConnectionsByType(CLIENT_TYPES.INITIATOR);\n\n return peer.length > 0 ? peer[0] : null;\n }\n\n //#endregion WebRTC Guest - session Guest (Agent on dashboard platform)\n\n //#region Peer Connection\n\n _createPeerConnection(peerId, peerConnectionType) {\n if (this._peerConnections.get(peerId)) {\n throw new Error(`${this._selfClientType} peer connection for ${peerId} already exists`);\n }\n\n const peerConnection = new RTCPeerConnection(this._configuration);\n\n peerConnection.peerId = peerId;\n peerConnection.peerType = peerConnectionType;\n peerConnection.peerLogicalStream = new MediaStream();\n\n peerConnection.oniceconnectionstatechange = (state) => {\n tracer.trace(`ICE Connection state for peer ${peerId} was changed to: ${state.currentTarget.iceConnectionState}`, state);\n const cnnState = state.currentTarget.iceConnectionState;\n if (cnnState === 'disconnected') {\n //According to https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceConnectionState\n //Connection can become active again, so we will do nothing.\n // if (peerConnection.peerType === CLIENT_TYPES.INITIATOR) {\n // //this._destroyPeerConnection(peerConnection);\n // this.disconnect();\n // }\n } else if (cnnState === 'failed' || cnnState === 'closed') {\n //According to https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceConnectionState\n //When iceConnectionState is failed or closed, the peer connection can be destroyed.\n //In our case, we disconnecting from media session, and when session will be needed again, it will be connected.\n this.disconnect();\n }\n };\n\n peerConnection.onicecandidate = (event) => {\n if (event.candidate) {\n tracer.trace(`${this._selfClientType} peerConn.onicecandidate`, event.candidate);\n this._socket.emit(SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {\n sessionId: this._credentials.sessionId,\n peerId: peerId,\n candidate: event.candidate,\n clientType: this._selfClientType\n });\n } else {\n tracer.trace('ICE Candidate is null in peerConnection', event);\n }\n };\n\n if (this._selfClientType === CLIENT_TYPES.GUEST) {\n peerConnection.ontrack = (trackEvent) => {\n const {track, streams} = trackEvent;\n\n tracer.trace(`Stream created from peer connection track: ${track.kind}`, track, streams.length > 0 ? streams[0] : 'NO STREAM');\n\n const tsStream = new TsWebRTCStream(this, new MediaStream([track]));\n\n tsStream.peerConnection = peerConnection;\n tsStream.remote = true;\n\n this.registerStream(tsStream.id, tsStream);\n\n this.emit(SESSION_EVENTS.STREAM_CREATED, tsStream);\n };\n }\n\n this._peerConnections.set(peerId, peerConnection);\n\n tracer.trace(`${this._selfClientType} peerConnection created`);\n\n return peerConnection;\n }\n\n _destroyPeerConnection(peerConnection) {\n if (this._selfClientType === CLIENT_TYPES.GUEST) {\n this._getRemoteStreams(peerConnection).forEach((stream) => {\n this.unregisterStream(stream.id);\n this.emit(SESSION_EVENTS.STREAM_DESTROYED, {stream});\n });\n }\n\n if (this._selfClientType === CLIENT_TYPES.INITIATOR && this._peerConnections.size === 0) {\n //TODO - ALEX: When initiator will be implemented, here we need to destroy local stream (or better raise, event).\n }\n\n this._peerConnections.delete(peerConnection.peerId);\n peerConnection.close();\n }\n\n _getRemoteStreams(peerConnection) {\n const result = [];\n\n this.streams.forEach((stream) => {\n if (stream.peerConnection === peerConnection && stream.remote) {\n result.push(stream);\n }\n });\n\n return result;\n }\n\n _getPeerConnectionsByType(peerType) {\n const result = [];\n\n this._peerConnections.forEach((peerConnection) => {\n if (peerConnection.peerType === peerType) {\n result.push(peerConnection);\n }\n });\n\n return result;\n }\n\n _withPeerConnection(peerId, callback) {\n if (this._peerConnections.get(peerId)) {\n return callback(this._peerConnections.get(peerId));\n }\n\n return null;\n }\n\n _extendPeerConnection() {\n //TODO - Alex: Need to modify IE shim, and add these methods inside shim itself\n\n if (!RTCPeerConnection.prototype.peerId) {\n RTCPeerConnection.prototype.peerId = '';\n }\n\n if (!RTCPeerConnection.prototype.peerType) {\n RTCPeerConnection.prototype.peerType = null;\n }\n\n if (!RTCPeerConnection.prototype.peerLogicalStream) {\n RTCPeerConnection.prototype.peerLogicalStream = null;\n }\n }\n\n //#endregion\n\n //#region ICE Candidates\n\n _iceCandidateReceivedHandler({candidate, peerId}) {\n tracer.trace('_iceCandidateReceivedHandler', candidate);\n if (!candidate) {\n tracer.trace('NO iceCandidate');\n\n return;\n }\n\n const peerConnection = this._peerConnections.get(peerId);\n\n if (!peerConnection || !peerConnection.remoteDescription) {\n tracer.trace('Queueing iceCandidate', candidate);\n this._queueIceCandidate(candidate, peerId);\n\n return;\n }\n\n tracer.trace('Going to add iceCandidate', candidate);\n this._addIceCandidateToPeer(candidate, peerConnection);\n }\n\n _addIceCandidateToPeer(iceCandidate, peerConnection) {\n return peerConnection.addIceCandidate(iceCandidate)\n .then(() => {\n tracer.trace('ICE Candidate add to peer connection');\n })\n .catch((e) => {\n tracer.trace('Error adding ICE Candidate to peer connection', e);\n });\n }\n\n _processQueuedIceCandidates(peerId) {\n this._withPeerConnection(peerId, (peerConnection) => {\n const pendingIces = this._pendingPeersIce[peerId];\n\n if (pendingIces) {\n pendingIces.forEach((pendingIce) => {\n tracer.trace('Adding pending ICE to peer connections');\n this._addIceCandidateToPeer(pendingIce, peerConnection);\n });\n } else {\n tracer.trace('No pending ICE found for peer', peerId);\n }\n });\n }\n\n _queueIceCandidate(iceCandidate, peerId) {\n if (!this._pendingPeersIce[peerId]) {\n this._pendingPeersIce[peerId] = [];\n }\n\n this._pendingPeersIce[peerId].push(iceCandidate);\n }\n\n //#endregion\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["oldCode/webrtc/session.js"],"names":[],"mappings":";;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"session.js","sourcesContent":["export * from './session-kms.js';\nexport * from './session-turn.js';\nexport * from './session-loopback.js';\nexport * from './session-turn.v2.js';\n"]}
|
|
@@ -31,9 +31,7 @@ exports.EVENTS = _stream.EVENTS;
|
|
|
31
31
|
var TORCH_DELAY = 1500;
|
|
32
32
|
var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
|
|
33
33
|
|
|
34
|
-
var
|
|
35
|
-
return window.WebRtcSessionTrace === true;
|
|
36
|
-
});
|
|
34
|
+
var tracer = (0, _tracer.getTracer)();
|
|
37
35
|
|
|
38
36
|
/**
|
|
39
37
|
* WebRTC-specific implementation of TsMediaStream.
|
|
@@ -239,7 +237,7 @@ var TsWebRTCStream = exports.TsWebRTCStream = function (_TsMediaStream) {
|
|
|
239
237
|
var bindVideoStreamToElement = function bindVideoStreamToElement(stream, target) {
|
|
240
238
|
return new Promise(function (resolve, reject) {
|
|
241
239
|
var doResolve = function doResolve(videoEl) {
|
|
242
|
-
trace('Video element created successfully');
|
|
240
|
+
tracer.trace('Video element created successfully');
|
|
243
241
|
resolve(videoEl);
|
|
244
242
|
};
|
|
245
243
|
|
|
@@ -263,17 +261,17 @@ var TsWebRTCStream = exports.TsWebRTCStream = function (_TsMediaStream) {
|
|
|
263
261
|
var playRes = videoEl.play();
|
|
264
262
|
if (playRes && playRes.then) {
|
|
265
263
|
playRes.then(function () {
|
|
266
|
-
trace('Video element play success');
|
|
264
|
+
tracer.trace('Video element play success');
|
|
267
265
|
});
|
|
268
266
|
}
|
|
269
267
|
|
|
270
268
|
if (playRes && playRes.catch) {
|
|
271
269
|
playRes.catch(function (error) {
|
|
272
|
-
trace('Reject while executing play method on video element', error);
|
|
270
|
+
tracer.trace('Reject while executing play method on video element', error);
|
|
273
271
|
});
|
|
274
272
|
}
|
|
275
273
|
} catch (error) {
|
|
276
|
-
trace('Error while executing play method on video element', error);
|
|
274
|
+
tracer.trace('Error while executing play method on video element', error);
|
|
277
275
|
}
|
|
278
276
|
|
|
279
277
|
if (isIE11) {
|
|
@@ -354,9 +352,9 @@ var TsWebRTCStream = exports.TsWebRTCStream = function (_TsMediaStream) {
|
|
|
354
352
|
window.WebRTCAdapter.unBindVideoElement(videoEl);
|
|
355
353
|
if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {
|
|
356
354
|
videoEl.parentNode.removeChild(videoEl);
|
|
357
|
-
trace('Video element removed successfully');
|
|
355
|
+
tracer.trace('Video element removed successfully');
|
|
358
356
|
} else {
|
|
359
|
-
trace('Video element not removed', videoEl, videoEl.parentNode);
|
|
357
|
+
tracer.trace('Video element not removed', videoEl, videoEl.parentNode);
|
|
360
358
|
}
|
|
361
359
|
doResolve();
|
|
362
360
|
} else {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["oldCode/webrtc/stream.js"],"names":["EVENTS","TORCH_DELAY","isIE11","TsEnvironmentDetect","tracer","TsWebRTCStream","session","mediaStream","name","isRemote","videoTrackSettings","id","peerConnection","_torchDelayTimeOut","_torchOffTimeOut","_mediaStream","_session","_name","hasVideo","_isMobile","DEFAULT_STREAM_NAMES","MOBILE_CLIENT_VIDEO_STREAM","hasAudio","remote","DASHBOARD_AUDIO_STREAM","MOBILE_CLIENT_AUDIO_STREAM","Math","random","toString","on","SESSION_EVENTS","DISCONNECTED","publisher","destroy","subscriber","_getPeerConnection","_","get","publishAudio","publish","getTracks","forEach","track","kind","setEnabled","enabled","emit","STREAM_PROPERTY_CHANGED","stream","property","value","PROPERTY_CHANGED","publishVideo","subscribe","target","params","height","width","fitMode","insertMode","elementHeight","elementWidth","bindVideoStreamToElement","Promise","resolve","reject","doResolve","videoEl","trace","document","createElement","muted","playsInline","window","WebRTCAdapter","appendChild","bindVideoElement","srcObject","setAttribute","playRes","play","then","catch","error","handleComplete","parentElement","tagName","waitForObjectSettings","intervalInMs","timeoutInMs","isVideoPlaying","videoHeight","videoWidth","waitForVideoSettings","Error","assign","style","TsMediaSubscriber","_element","setupDimensionsListener","destroySubscriber","SUBSCRIBER_EVENTS","DESTROYED","firstChild","unBindVideoElement","parentNode","removeChild","remove","getSnapshot","tsMediaElement","timeout","format","quality","x","y","w","h","videoElement","crop","isUndefined","resize","getImgData","canvas","ctx","getContext","drawImage","toDataURL","getImgDataIE11","_drawAndRemove","image","base64","getFrame","Image","onload","imgData","length","getStats","pc","getVideoTracks","reports","matches","report","includes","type","push","video","head","e","getFullVideoStats","turnFlashlight","isTorchOn","navigator","mediaDevices","clearInterval","setTimeout","capatibilitiesAfter","getCapabilities","torch","applyConstraints","advanced","console","setAutoLightOffTimer","flashlightTimeout","enabledVideoTracks","filter","enabledAudioTracks","getAudioTracks","TsMediaStream"],"mappings":";;;;;;;AAAA;;AAKA;;AAIA;;AAKA;;AAMA;;AACA;;AAKA;;;;;;;;QARQA,M,GAAAA,c;;;AAKR,IAAMC,cAAc,IAApB;AACA,IAAMC,SAAU,IAAIC,wCAAJ,EAAD,CAA4BD,MAA5B,EAAf;;AAIA,IAAME,SAAS,wBAAf;;AAEA;;;;;;;;;;;;IAWaC,c,WAAAA,c;;;AACT,4BAAYC,OAAZ,EAAqBC,WAArB,EAAkCC,IAAlC,EAAwCC,QAAxC,EAAkDC,kBAAlD,EAAsE;AAAA;;AAGlE;AAHkE,qDAClE,0BAAMH,YAAYI,EAAlB,EAAsBL,OAAtB,EAA+BG,QAA/B,EAAyCC,kBAAzC,CADkE;;AAIlE,cAAKE,cAAL,GAAsB,IAAtB;;AAEA,cAAKC,kBAAL,GAA0B,IAA1B;AACA,cAAKC,gBAAL,GAAwB,IAAxB;;AAEA;;;;;;;;AAQA,cAAKC,YAAL,GAAoBR,WAApB;;AAEA;;;;;;;;AAQA,cAAKS,QAAL,GAAgBV,OAAhB;;AAEA,cAAKW,KAAL,GAAaT,IAAb;;AAEA,YAAI,CAAC,MAAKS,KAAV,EAAiB;AACb,gBAAI,MAAKC,QAAT,EAAmB;AACf,oBAAI,CAAC,MAAKF,QAAL,CAAcG,SAAnB,EAA8B;AAC1B,0BAAKF,KAAL,GAAaG,gCAAqBC,0BAAlC;AACH;AACJ,aAJD,MAIO,IAAI,MAAKC,QAAT,EAAmB;AACtB,oBAAI,MAAKN,QAAL,CAAcG,SAAlB,EAA6B;AACzB,0BAAKF,KAAL,GAAa,MAAKM,MAAL,GAAcH,gCAAqBI,sBAAnC,GAA4DJ,gCAAqBK,0BAA9F;AACH,iBAFD,MAEO;AACH,0BAAKR,KAAL,GAAa,MAAKM,MAAL,GAAcH,gCAAqBK,0BAAnC,GAAgEL,gCAAqBI,sBAAlG;AACH;AACJ;AACJ;;AAED,YAAI,CAAC,MAAKP,KAAV,EAAiB;AACb,kBAAKA,KAAL,GAAaS,KAAKC,MAAL,GAAcC,QAAd,EAAb;AACH;;AAED;AACA;AACAtB,gBAAQuB,EAAR,CAAWC,gBAAeC,YAA1B,EAAwC,YAAM;AAC1C,gBAAI,MAAKC,SAAT,EAAoB;AAChB,sBAAKA,SAAL,CAAeC,OAAf;AACH;;AAED,gBAAI,MAAKC,UAAT,EAAqB;AACjB,sBAAKA,UAAL,CAAgBD,OAAhB;AACH;AACJ,SARD;AAnDkE;AA4DrE;;AAED;;;;;;;;6BA8CAE,kB,iCAAqB;AACjB;AACA,eAAO,KAAKvB,cAAL,IACAwB,EAAEC,GAAF,CAAM,KAAKrB,QAAX,EAAqB,wBAArB,CADA,IAEAoB,EAAEC,GAAF,CAAM,KAAKrB,QAAX,EAAqB,oBAArB,CAFP;AAGH,K;;AAED;;;;;;;;;;;;;;6BAYAsB,Y,yBAAaC,O,EAAS;AAClB,aAAKxB,YAAL,CAAkByB,SAAlB,GAA8BC,OAA9B,CAAsC,UAACC,KAAD,EAAW;AAC7C,gBAAIA,MAAMC,IAAN,KAAe,OAAnB,EAA4B;AACxB,oBAAID,MAAME,UAAV,EAAsB;AAClBF,0BAAME,UAAN,CAAiBL,OAAjB;AACH,iBAFD,MAEO;AACHG,0BAAMG,OAAN,GAAgBN,OAAhB;AACH;AACJ;AACJ,SARD;;AAUA,aAAKvB,QAAL,CAAc8B,IAAd,CAAmBhB,gBAAeiB,uBAAlC,EAA2D;AACvDC,oBAAQ,IAD+C;AAEvDC,sBAAU,UAF6C;AAGvDC,mBAAOX;AAHgD,SAA3D;;AAMA,aAAKO,IAAL,CAAU9C,eAAOmD,gBAAjB,EAAmC;AAC/BH,oBAAQ,IADuB;AAE/BC,sBAAU,UAFqB;AAG/BC,mBAAOX;AAHwB,SAAnC;AAKH,K;;AAED;;;;;;;;;;;;;6BAWAa,Y,yBAAab,O,EAAS;AAClB,aAAKxB,YAAL,CAAkByB,SAAlB,GAA8BC,OAA9B,CAAsC,UAACC,KAAD,EAAW;AAC7C,gBAAIA,MAAMC,IAAN,KAAe,OAAnB,EAA4B;AACxB,oBAAID,MAAME,UAAV,EAAsB;AAClBF,0BAAME,UAAN,CAAiBL,OAAjB;AACH,iBAFD,MAEO;AACHG,0BAAMG,OAAN,GAAgBN,OAAhB;AACH;AACJ;AACJ,SARD;;AAUA,aAAKvB,QAAL,CAAc8B,IAAd,CAAmBhB,gBAAeiB,uBAAlC,EAA2D;AACvDC,oBAAQ,IAD+C;AAEvDC,sBAAU,UAF6C;AAGvDC,mBAAOX;AAHgD,SAA3D;AAKH,K;;AAED;;;;;;;;;;;;;;;;;;;;;6BAmBAc,S,sBAAUC,M,EAKP;AAAA;;AAAA,YALeC,MAKf,uEALwB;AACvBC,oBAAQ,MADe;AAEvBC,mBAAO,MAFgB;AAGvBC,qBAAS,SAHc;AAIvBC,wBAAY;AAJW,SAKxB;;AACC,YAAI,CAACJ,MAAL,EAAa;AACTA,qBAASD,MAAT;AACAA,qBAAS,IAAT;AACH;;AAED,YAAMM,gBAAiB,OAAOL,OAAOC,MAAd,KAAyB,QAA1B,GAAsCD,OAAOC,MAA7C,GAAsDD,OAAOC,MAAP,GAAgB,IAA5F;AACA,YAAMK,eAAgB,OAAON,OAAOE,KAAd,KAAwB,QAAzB,GAAqCF,OAAOE,KAA5C,GAAoDF,OAAOE,KAAP,GAAe,IAAxF;;AAEA,YAAMK,2BAA2B,SAA3BA,wBAA2B,CAACd,MAAD,EAASM,MAAT,EAAoB;AACjD,mBAAO,IAAIS,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACpC,oBAAMC,YAAY,SAAZA,SAAY,CAACC,OAAD,EAAa;AAC3B/D,2BAAOgE,KAAP,CAAa,oCAAb;AACAJ,4BAAQG,OAAR;AACH,iBAHD;;AAKA,oBAAMA,UAAUE,SAASC,aAAT,CAAuB,OAAvB,CAAhB;AACAH,wBAAQI,KAAR,GAAgB,IAAhB;AACAJ,wBAAQK,WAAR,GAAsB,IAAtB;;AAEA,oBAAItE,UAAUuE,OAAOC,aAArB,EAAoC;AAChCpB,2BAAOqB,WAAP,CAAmBR,OAAnB;AACAM,2BAAOC,aAAP,CAAqBE,gBAArB,CAAsCT,OAAtC;AACH;;AAEDA,wBAAQU,SAAR,GAAoB7B,MAApB;;AAEA,oBAAI,CAAC9C,MAAL,EAAa;AACT;AACAiE,4BAAQW,YAAR,CAAqB,OAArB,EAA8B,EAA9B;AACH;;AAED,oBAAI;AACA,wBAAMC,UAAUZ,QAAQa,IAAR,EAAhB;AACA,wBAAID,WAAWA,QAAQE,IAAvB,EAA6B;AACzBF,gCAAQE,IAAR,CAAa,YAAM;AACf7E,mCAAOgE,KAAP,CAAa,4BAAb;AACH,yBAFD;AAGH;;AAED,wBAAIW,WAAWA,QAAQG,KAAvB,EAA8B;AAC1BH,gCAAQG,KAAR,CAAc,UAACC,KAAD,EAAW;AACrB/E,mCAAOgE,KAAP,CAAa,qDAAb,EAAoEe,KAApE;AACH,yBAFD;AAGH;AACJ,iBAbD,CAaE,OAAOA,KAAP,EAAc;AACZ/E,2BAAOgE,KAAP,CAAa,oDAAb,EAAmEe,KAAnE;AACH;;AAGD,oBAAIjF,MAAJ,EAAY;AACR,wBAAMkF,iBAAiB,SAAjBA,cAAiB,GAAM;AACzB,+BAAOjB,QAAQkB,aAAR,CAAsBC,OAAtB,KAAkC,QAAzC;AACH,qBAFD;;AAIA,wBAAMC,wBAAwB,EAACC,cAAc,EAAf,EAAmBC,aAAa,GAAhC,EAA9B;;AAEA,6DAAkBL,cAAlB,EAAkCG,qBAAlC,EACKN,IADL,CACU,YAAM;AACR;AACA,4BAAMS,iBAAiB,SAAjBA,cAAiB;AAAA,mCAAMvB,QAAQwB,WAAR,IAAuB,CAAvB,IAA4BxB,QAAQyB,UAAR,IAAsB,CAAxD;AAAA,yBAAvB;AACA,4BAAMC,uBAAuB,EAACL,cAAc,EAAf,EAAmBC,aAAa,KAAhC,EAA7B;AACA,iEAAkBC,cAAlB,EAAkCG,oBAAlC,EACKZ,IADL,CACU;AAAA,mCAAMf,UAAUC,QAAQkB,aAAlB,CAAN;AAAA,yBADV,EAEKH,KAFL,CAEW;AAAA,mCAAMjB,OAAO,IAAI6B,KAAJ,CAAU,yCAAV,CAAP,CAAN;AAAA,yBAFX;AAGH,qBARL;AASH,iBAhBD,MAgBO;AACHxC,2BAAOqB,WAAP,CAAmBR,OAAnB;AACAD,8BAAUC,OAAV;AACH;AAEJ,aA7DM,CAAP;AA8DH,SA/DD;;AAiEA,eAAOL,yBAAyB,KAAK/C,YAA9B,EAA4CuC,MAA5C,EACF2B,IADE,CACG,UAACd,OAAD,EAAa;AACf/B,cAAE2D,MAAF,CAAS5B,QAAQ6B,KAAjB,EAAwB;AACpBxC,wBAAQI,aADY;AAEpBH,uBAAOI,YAFa;;AAIpB,8BAAcN,OAAOG;AAJD,aAAxB;;AAOA,gBAAMxB,aAAa,IAAI+D,6BAAJ,CAAsB;AACrC3C,8BADqC;AAErCtC,0BAAU,OAAKA,QAFsB;AAGrCgC,wBAAQ,MAH6B;AAIrCkD,0BAAU/B;AAJ2B,aAAtB,CAAnB;;AAOA,mBAAKgC,uBAAL,CAA6BhC,OAA7B,EAAsCjC,UAAtC;;AAEA,mBAAKA,UAAL,GAAkBA,UAAlB;;AAEA,mBAAOA,UAAP;AACH,SArBE,CAAP;AAsBH,K;;AAED;;;;;;;;;;;;;;;;;6BAeAkE,iB,8BAAkBlE,U,EAAY;AAC1B,eAAO,IAAI6B,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC5B,gBAAME,YAAY,SAAZA,SAAY,GAAM;AACpBhC,2BAAWY,IAAX,CAAgBuD,mBAAkBC,SAAlC;AACAtC;AACH,aAHD;;AAKA,gBAAI9D,UAAUuE,OAAOC,aAArB,EAAoC;AAChC,oBAAMP,UAAUjC,WAAWgE,QAAX,CAAoBK,UAApC;AACA9B,uBAAOC,aAAP,CAAqB8B,kBAArB,CAAwCrC,OAAxC;AACA,oBAAIA,WAAWA,QAAQsC,UAAnB,IAAiCtC,QAAQsC,UAAR,CAAmBC,WAAxD,EAAqE;AACjEvC,4BAAQsC,UAAR,CAAmBC,WAAnB,CAA+BvC,OAA/B;AACA/D,2BAAOgE,KAAP,CAAa,oCAAb;AACH,iBAHD,MAGO;AACHhE,2BAAOgE,KAAP,CAAa,2BAAb,EAA0CD,OAA1C,EAAmDA,QAAQsC,UAA3D;AACH;AACDvC;AACH,aAVD,MAUO;AACHhC,2BAAWgE,QAAX,CAAoBS,MAApB;AACAzC;AACH;AACJ,SApBM,CAAP;AAqBH,K;;AAED;;;6BACA0C,W,wBAAYC,c,EAAsF;AAAA,YAAtEC,OAAsE,uEAA5D,CAA4D;;AAAA,uFAAJ,EAAI;AAAA,+BAAxDC,MAAwD;AAAA,YAAxDA,MAAwD,+BAA/C,WAA+C;AAAA,gCAAlCC,OAAkC;AAAA,YAAlCA,OAAkC,gCAAxB,IAAwB;AAAA,YAAlBC,CAAkB,QAAlBA,CAAkB;AAAA,YAAfC,CAAe,QAAfA,CAAe;AAAA,YAAZC,CAAY,QAAZA,CAAY;AAAA,YAATC,CAAS,QAATA,CAAS;;AAC9F,YAAMC,eAAeR,eAAeX,QAApC;AAD8F,YAEvFN,UAFuF,GAE5DyB,YAF4D,CAEvFzB,UAFuF;AAAA,YAE3ED,WAF2E,GAE5D0B,YAF4D,CAE3E1B,WAF2E;;AAG9F,YAAM2B,OAAO,CAAClF,EAAEmF,WAAF,CAAcN,CAAd,CAAD,IAAqB,CAAC7E,EAAEmF,WAAF,CAAcL,CAAd,CAAtB,IAA0C,CAAC9E,EAAEmF,WAAF,CAAcJ,CAAd,CAA3C,IAA+D,CAAC/E,EAAEmF,WAAF,CAAcH,CAAd,CAA7E;AACA,YAAMI,SAAS,CAACF,IAAD,KAAU,CAAClF,EAAEmF,WAAF,CAAcJ,CAAd,CAAD,IAAqB,CAAC/E,EAAEmF,WAAF,CAAcH,CAAd,CAAhC,CAAf;;AAEA,YAAII,MAAJ,EAAY;AACR,gBAAI,CAACJ,CAAL,EAAQ;AACJA,oBAAID,KAAKxB,cAAcC,UAAnB,CAAJ;AACH,aAFD,MAEO,IAAI,CAACuB,CAAL,EAAQ;AACXA,oBAAIC,KAAKxB,aAAaD,WAAlB,CAAJ;AACH;AACJ;;AAED,iBAAS8B,UAAT,GAAsB;AAClB,gBAAMC,SAASrD,SAASC,aAAT,CAAuB,QAAvB,CAAf;AACA,gBAAMqD,MAAMD,OAAOE,UAAP,CAAkB,IAAlB,CAAZ;;AAEA,gBAAIN,IAAJ,EAAU;AACNI,uBAAOjE,KAAP,GAAe0D,CAAf;AACAO,uBAAOlE,MAAP,GAAgB4D,CAAhB;;AAEAO,oBAAIE,SAAJ,CAAcR,YAAd,EAA4BJ,CAA5B,EAA+BC,CAA/B,EAAkCC,CAAlC,EAAqCC,CAArC,EAAwC,CAAxC,EAA2C,CAA3C,EAA8CD,CAA9C,EAAiDC,CAAjD;AACH,aALD,MAKO,IAAII,MAAJ,EAAY;AACfE,uBAAOjE,KAAP,GAAe0D,CAAf;AACAO,uBAAOlE,MAAP,GAAgB4D,CAAhB;;AAEAO,oBAAIE,SAAJ,CAAcR,YAAd,EAA4B,CAA5B,EAA+B,CAA/B,EAAkCF,CAAlC,EAAqCC,CAArC;AACH,aALM,MAKA;AACHM,uBAAOlE,MAAP,GAAgBmC,WAAhB;AACA+B,uBAAOjE,KAAP,GAAemC,UAAf;;AAEA+B,oBAAIE,SAAJ,CAAcR,YAAd,EAA4B,CAA5B,EAA+B,CAA/B;AACH;;AAED,mBAAOK,OAAOI,SAAP,CAAiBf,MAAjB,EAAyBC,OAAzB,CAAP;AACH;;AAED,iBAASe,cAAT,GAA0B;AACtB,mBAAO,IAAIhE,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC5B,oBAAM0D,SAASrD,SAASC,aAAT,CAAuB,QAAvB,CAAf;AACA,oBAAMqD,MAAMD,OAAOE,UAAP,CAAkB,IAAlB,CAAZ;;AAEA,oBAAIN,QAAQE,MAAZ,EAAoB;AAChBE,2BAAOjE,KAAP,GAAe0D,CAAf;AACAO,2BAAOlE,MAAP,GAAgB4D,CAAhB;AACH,iBAHD,MAGO;AACHM,2BAAOlE,MAAP,GAAgBmC,WAAhB;AACA+B,2BAAOjE,KAAP,GAAemC,UAAf;AACH;;AAED,yBAASoC,cAAT,CAAwBC,KAAxB,EAA+B;AAC3B,wBAAIX,IAAJ,EAAU;AACNK,4BAAIE,SAAJ,CAAcI,KAAd,EAAqBhB,CAArB,EAAwBC,CAAxB,EAA2BC,CAA3B,EAA8BC,CAA9B,EAAiC,CAAjC,EAAoC,CAApC,EAAuCD,CAAvC,EAA0CC,CAA1C;AACH,qBAFD,MAEO,IAAII,MAAJ,EAAY;AACfG,4BAAIE,SAAJ,CAAcI,KAAd,EAAqB,CAArB,EAAwB,CAAxB,EAA2Bd,CAA3B,EAA8BC,CAA9B;AACH,qBAFM,MAEA;AACHO,4BAAIE,SAAJ,CAAcI,KAAd,EAAqB,CAArB,EAAwB,CAAxB,EAA2BrC,UAA3B,EAAuCD,WAAvC;AACH;;AAED,2BAAO+B,OAAOI,SAAP,CAAiBf,MAAjB,EAAyBC,OAAzB,CAAP;AACH;;AAED,oBAAMkB,SAASb,aAAac,QAAb,EAAf;AACA,oBAAMF,QAAQ,IAAIG,KAAJ,EAAd;;AAEAH,sBAAMI,MAAN,GAAe;AAAA,2BAAMrE,QAAQgE,eAAeC,KAAf,CAAR,CAAN;AAAA,iBAAf;AACAA,sBAAMnD,YAAN,CAAmB,KAAnB,EAA0B,2BAA2BoD,MAArD;AACH,aA7BM,CAAP;AA8BH;;AAED,eAAOnE,QAAQC,OAAR,CAAgB9D,SAAS6H,gBAAT,GAA4BN,YAA5C,EACFxC,IADE,CACG,UAACqD,OAAD,EAAa;AACf,gBAAI,CAACA,OAAD,IAAYA,QAAQC,MAAR,GAAiB,EAAjC,EAAqC;AACjC,uBAAOxE,QAAQE,MAAR,CAAe,0BAAf,CAAP;AACH;;AAED,mBAAOqE,OAAP;AACH,SAPE,CAAP;AAQH,K;;AAED;;;;;;;;;;;;;;;6BAaAE,Q,qBAAStG,U,EAAY;AAAA;;AACjB,eAAO,IAAI6B,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC5B,gBAAI;AACA,oBAAMyE,KAAK,OAAKtG,kBAAL,EAAX;;AAEA,oBAAIjC,UAAU,CAACuI,EAAf,EAAmB;AACf,2BAAOzE,SAAP;AACH;;AAEDyE,mBAAGD,QAAH,CAAY,OAAKzH,YAAL,CAAkB2H,cAAlB,GAAmC,CAAnC,CAAZ,EACKzD,IADL,CACU,UAAC0D,OAAD,EAAa;AACf,wBAAMC,UAAU,EAAhB;;AAEAD,4BAAQlG,OAAR,CAAgB,UAACoG,MAAD,EAAY;AACxB,4BAAIzG,EAAE0G,QAAF,CAAW,CAAC,aAAD,EAAgB,MAAhB,CAAX,EAAoCD,OAAOE,IAA3C,CAAJ,EAAsD;AAClDH,oCAAQI,IAAR,CAAaH,MAAb;AACH;AACJ,qBAJD;;AAMA,2BAAO7E,QAAQ;AACXiF,+BAAO7G,EAAE8G,IAAF,CAAON,OAAP;AADI,qBAAR,CAAP;AAGH,iBAbL;AAcH,aArBD,CAqBE,OAAOO,CAAP,EAAU;AACR;AACA;AACAnF;AACH;AACJ,SA3BM,CAAP;AA4BH,K;;AAED;;6BAEAoF,iB,gCAAoB;AAAA;;AAChB,eAAO,IAAIrF,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACpC,gBAAI;AACA,oBAAMwE,KAAK,OAAKtG,kBAAL,EAAX;;AAEA,oBAAI,CAACsG,EAAL,EAAS;AACL,2BAAOxE,OAAO,oBAAP,CAAP;AACH;;AAED,uBAAOD,QAAQyE,GAAGD,QAAH,CAAY,OAAKzH,YAAL,CAAkB2H,cAAlB,GAAmC,CAAnC,CAAZ,CAAR,CAAP;AAEH,aATD,CASE,OAAOS,CAAP,EAAU;AACRlF,uBAAOkF,CAAP;AACH;AACJ,SAbM,CAAP;AAcH,K;;6BAEDE,c,6BAAiC;AAAA;;AAAA,YAAlBC,SAAkB,uEAAN,IAAM;;AAC7B,eAAO,IAAIvF,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACpC,gBAAI,OAAKpD,kBAAT,EAA6B;AACzB,uBAAOoD,OAAO,iBAAP,CAAP;AACH;;AAED,gBAAI,CAACsF,SAAD,IAAc,CAACA,UAAUC,YAA7B,EAA2C;AACvC,uBAAOvF,OAAO,iBAAP,CAAP;AACH;;AAED,gBAAMvB,QAAQ,OAAK3B,YAAL,CAAkB2H,cAAlB,GAAmC,CAAnC,CAAd;;AAEA,gBAAI,CAAChG,KAAL,EAAY;AACR,uBAAOuB,OAAO,UAAP,CAAP;AACH;AACD,gBAAI,OAAKnD,gBAAT,EAA2B;AACvB2I,8BAAc,OAAK3I,gBAAnB;AACA,uBAAKA,gBAAL,GAAwB,IAAxB;AACH;;AAED,mBAAKD,kBAAL,GAA0B6I,WAAW,YAAM;AACvC,oBAAIC,sBAAsB,EAA1B;;AAEA,oBAAI;AACAA,0CAAsBjH,MAAMkH,eAAN,EAAtB;AACH,iBAFD,CAEE,OAAOT,CAAP,EAAU;AACR,2BAAOlF,OAAO,iBAAP,CAAP;AACH;;AAED,oBAAI,CAAC0F,oBAAoBE,KAAzB,EAAgC;AAC5B,2BAAO5F,OAAO,wBAAP,CAAP;AACH;;AAED,uBAAOvB,MAAMoH,gBAAN,CAAuB;AAC1BC,8BAAU,CAAC;AACPF,+BAAOP;AADA,qBAAD;AADgB,iBAAvB,EAIJrE,IAJI,CAIC,YAAM;AACV,2BAAKpE,kBAAL,GAA0B,IAA1B;AACAmD,4BAAQ,IAAR;AACH,iBAPM,EAOJkB,KAPI,CAOE,UAACiE,CAAD,EAAO;AACZ,2BAAKtI,kBAAL,GAA0B,IAA1B;AACAmJ,4BAAQ7E,KAAR,CAAcgE,CAAd;AACAlF,2BAAO,6CAAP;AACH,iBAXM,CAAP;AAYH,aAzByB,EAyBvBhE,WAzBuB,CAA1B;AA0BH,SA7CM,CAAP;AA8CH,K;;6BAEDgK,oB,iCAAqBC,iB,EAAmB;AAAA;;AACpC,eAAO,IAAInG,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC5B,gBAAI,CAACkG,iBAAL,EAAwB;AACpB,uBAAOjG,OAAO,YAAP,CAAP;AACH;;AAED,gBAAMvB,QAAQ,OAAK3B,YAAL,CAAkB2H,cAAlB,GAAmC,CAAnC,CAAd;;AAEA,gBAAI,CAAChG,KAAL,EAAY;AACR,uBAAOuB,OAAO,UAAP,CAAP;AACH;;AAED,mBAAKnD,gBAAL,GAAwB4I,WAAW,YAAM;;AAErC,oBAAI,CAAChH,KAAL,EAAY;AACR,2BAAOuB,OAAO,UAAP,CAAP;AACH;;AAEDvB,sBAAMoH,gBAAN,CAAuB;AACnBC,8BAAU,CAAC;AACPF,+BAAO;AADA,qBAAD;AADS,iBAAvB,EAIG5E,IAJH,CAIQ,YAAM;AACV,2BAAKnE,gBAAL,GAAwB,IAAxB;AACAkD;AACH,iBAPD;AAQH,aAduB,EAcrBkG,iBAdqB,CAAxB;AAeH,SA1BM,CAAP;AA2BH,K;;;;4BA/eQ;AACL,mBAAO,KAAKnJ,YAAL,CAAkBJ,EAAzB;AACH;;AAED;;;;;;;;;4BAMW;AACP,mBAAO,KAAKM,KAAZ;AACH;;AAED;;;;;;;;;4BAMe;AACX,gBAAMkJ,qBAAqB,KAAKpJ,YAAL,CAAkB2H,cAAlB,GACtB0B,MADsB,CACf,UAAC1H,KAAD;AAAA,uBAAWA,MAAMG,OAAjB;AAAA,aADe,CAA3B;;AAGA,mBAAOsH,mBAAmB5B,MAAnB,GAA4B,CAAnC;AACH;;AAED;;;;;;;;;4BAMe;AACX,gBAAM8B,qBAAqB,KAAKtJ,YAAL,CAAkBuJ,cAAlB,GACtBF,MADsB,CACf,UAAC1H,KAAD;AAAA,uBAAWA,MAAMG,OAAjB;AAAA,aADe,CAA3B;;AAGA,mBAAOwH,mBAAmB9B,MAAnB,GAA4B,CAAnC;AACH;;;;EA3G+BgC,qB","file":"stream.js","sourcesContent":["import {\n EVENTS,\n TsMediaStream\n} from '../stream';\n\nimport {\n EVENTS as SESSION_EVENTS\n} from '../session';\n\nimport {\n EVENTS as SUBSCRIBER_EVENTS,\n TsMediaSubscriber\n} from '../subscriber';\n\nimport {\n DEFAULT_STREAM_NAMES\n} from './constants';\n\nexport {EVENTS};\n\nimport {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\nimport {repeatWithTimeout} from '@techsee/techsee-common/lib/core/retry-with-timeout';\n\nconst TORCH_DELAY = 1500;\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nimport {getTracer} from '../tracer';\n\nconst tracer = getTracer();\n\n/**\n * WebRTC-specific implementation of TsMediaStream.\n *\n * Instances of this class are mostly used internally by TsMediaPublisher\n * and for subscribers creating.\n *\n * @class\n * @extends TsMediaStream\n *\n * @see TsMediaStream\n */\nexport class TsWebRTCStream extends TsMediaStream {\n constructor(session, mediaStream, name, isRemote, videoTrackSettings) {\n super(mediaStream.id, session, isRemote, videoTrackSettings);\n\n //In TurnWebRtcSessionV2, we keep connection on instance of stream.\n this.peerConnection = null;\n\n this._torchDelayTimeOut = null;\n this._torchOffTimeOut = null;\n\n /**\n * Browser's native media stream\n *\n * @public\n * @member { Object }\n *\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStream MediaStream API}\n */\n this._mediaStream = mediaStream;\n\n /**\n * Instance of TsWebRTCSession\n *\n * @private\n * @member { Object }\n *\n * @see TsWebRTCSession\n */\n this._session = session;\n\n this._name = name;\n\n if (!this._name) {\n if (this.hasVideo) {\n if (!this._session._isMobile) {\n this._name = DEFAULT_STREAM_NAMES.MOBILE_CLIENT_VIDEO_STREAM;\n }\n } else if (this.hasAudio) {\n if (this._session._isMobile) {\n this._name = this.remote ? DEFAULT_STREAM_NAMES.DASHBOARD_AUDIO_STREAM : DEFAULT_STREAM_NAMES.MOBILE_CLIENT_AUDIO_STREAM;\n } else {\n this._name = this.remote ? DEFAULT_STREAM_NAMES.MOBILE_CLIENT_AUDIO_STREAM : DEFAULT_STREAM_NAMES.DASHBOARD_AUDIO_STREAM;\n }\n }\n }\n\n if (!this._name) {\n this._name = Math.random().toString();\n }\n\n // TODO I think this will never be emitted, as both app/mobile call session.off() before they call session.disconnect(). And we call the destroy elsewhere\n // TODO Need to make sure that it's always the case, especially for IOS\n session.on(SESSION_EVENTS.DISCONNECTED, () => {\n if (this.publisher) {\n this.publisher.destroy();\n }\n\n if (this.subscriber) {\n this.subscriber.destroy();\n }\n });\n }\n\n /**\n * Unique id of the stream\n *\n * @member { String }\n * @type { String }\n */\n get id() {\n return this._mediaStream.id;\n }\n\n /**\n * Unique name of the stream\n *\n * @member { String }\n * @type { String }\n */\n get name() {\n return this._name;\n }\n\n /**\n * Whether or not stream has enabled video tracks\n *\n * @member { Boolean }\n * @type { Boolean }\n */\n get hasVideo() {\n const enabledVideoTracks = this._mediaStream.getVideoTracks()\n .filter((track) => track.enabled);\n\n return enabledVideoTracks.length > 0;\n }\n\n /**\n * Whether or not stream has enabled audio tracks\n *\n * @member { Boolean }\n * @type { Boolean }\n */\n get hasAudio() {\n const enabledAudioTracks = this._mediaStream.getAudioTracks()\n .filter((track) => track.enabled);\n\n return enabledAudioTracks.length > 0;\n }\n\n _getPeerConnection() {\n // KMS store the peer connection as _pc, TURN store it as _lastPc\n return this.peerConnection\n || _.get(this._session, '_lastPc.peerConnection')\n || _.get(this._session, '_pc.peerConnection');\n }\n\n /**\n * Publish or unpublish audio tracks.\n *\n * Used internally by TsMediaPublisher.publishAudio\n *\n * @method\n *\n * @param { Boolean } publish\n *\n * @fires SESSION_EVENTS.STREAM_PROPERTY_CHANGED\n * @fires STREAM_EVENTS.PROPERTY_CHANGED\n */\n publishAudio(publish) {\n this._mediaStream.getTracks().forEach((track) => {\n if (track.kind === 'audio') {\n if (track.setEnabled) {\n track.setEnabled(publish);\n } else {\n track.enabled = publish;\n }\n }\n });\n\n this._session.emit(SESSION_EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: this,\n property: 'hasAudio',\n value: publish\n });\n\n this.emit(EVENTS.PROPERTY_CHANGED, {\n stream: this,\n property: 'hasAudio',\n value: publish\n });\n }\n\n /**\n * Publish or unpublish video tracks.\n *\n * Used internally by TsMediaPublisher.publishVideo\n *\n * @method\n *\n * @param { Boolean } publish\n *\n * @fires SESSION_EVENTS.STREAM_PROPERTY_CHANGED\n */\n publishVideo(publish) {\n this._mediaStream.getTracks().forEach((track) => {\n if (track.kind === 'video') {\n if (track.setEnabled) {\n track.setEnabled(publish);\n } else {\n track.enabled = publish;\n }\n }\n });\n\n this._session.emit(SESSION_EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: this,\n property: 'hasVideo',\n value: publish\n });\n }\n\n /**\n * Subscribe to a remote stream.\n *\n * Used internally by TsMediaStream.subscribe\n *\n * @method\n *\n * @param { TsMediaStream } stream\n * @param { DOMElement } target\n * @param { Object } params\n * @param { String|Number } params.height Subscriber's view height\n * @param { String|Number } params.width Subscriber's view width\n * @param { String } params.fitMode Subscriber's view fit mode\n * @param { String } params.insertMode Subscriber's view insert mode (Is not in use yet)\n *\n * @returns { Promise<TsMediaSubscriber> } subsriber instance\n *\n * @see TsMediaStream\n */\n subscribe(target, params = {\n height: '100%',\n width: '100%',\n fitMode: 'contain',\n insertMode: 'append'\n }) {\n if (!params) {\n params = target;\n target = null;\n }\n\n const elementHeight = (typeof params.height === 'string') ? params.height : params.height + 'px';\n const elementWidth = (typeof params.width === 'string') ? params.width : params.width + 'px';\n\n const bindVideoStreamToElement = (stream, target) => {\n return new Promise((resolve, reject) => {\n const doResolve = (videoEl) => {\n tracer.trace('Video element created successfully');\n resolve(videoEl);\n };\n\n const videoEl = document.createElement('video');\n videoEl.muted = true;\n videoEl.playsInline = true;\n\n if (isIE11 && window.WebRTCAdapter) {\n target.appendChild(videoEl);\n window.WebRTCAdapter.bindVideoElement(videoEl);\n }\n\n videoEl.srcObject = stream;\n\n if (!isIE11) {\n // Hack to override behavior introduced by Chrome/FF that unmuted video elements can't auto play\n videoEl.setAttribute('muted', '');\n }\n\n try {\n const playRes = videoEl.play();\n if (playRes && playRes.then) {\n playRes.then(() => {\n tracer.trace('Video element play success');\n });\n }\n\n if (playRes && playRes.catch) {\n playRes.catch((error) => {\n tracer.trace('Reject while executing play method on video element', error);\n });\n }\n } catch (error) {\n tracer.trace('Error while executing play method on video element', error);\n }\n\n\n if (isIE11) {\n const handleComplete = () => {\n return videoEl.parentElement.tagName !== 'OBJECT';\n };\n\n const waitForObjectSettings = {intervalInMs: 30, timeoutInMs: 200};\n\n repeatWithTimeout(handleComplete, waitForObjectSettings)\n .then(() => {\n //We will wait, until video is played, then we resolve\n const isVideoPlaying = () => videoEl.videoHeight <= 0 || videoEl.videoWidth <= 0;\n const waitForVideoSettings = {intervalInMs: 50, timeoutInMs: 10000};\n repeatWithTimeout(isVideoPlaying, waitForVideoSettings)\n .then(() => doResolve(videoEl.parentElement))\n .catch(() => reject(new Error('Timeout while waiting for video to play')));\n });\n } else {\n target.appendChild(videoEl);\n doResolve(videoEl);\n }\n\n });\n };\n\n return bindVideoStreamToElement(this._mediaStream, target)\n .then((videoEl) => {\n _.assign(videoEl.style, {\n height: elementHeight,\n width: elementWidth,\n\n 'object-fit': params.fitMode\n });\n\n const subscriber = new TsMediaSubscriber({\n target,\n _session: this._session,\n stream: this,\n _element: videoEl\n });\n\n this.setupDimensionsListener(videoEl, subscriber);\n\n this.subscriber = subscriber;\n\n return subscriber;\n });\n }\n\n /**\n * Unsubscribe from the stream and destroy subscriber's view.\n *\n * Used internally by TsMediaSubscriber.destroy.\n *\n * @method\n *\n * @param { TsMediaSubscriber } subscriber\n *\n * @returns { Promise }\n *\n * @fires SUBSCRIBER_EVENTS#DESTROYED\n *\n * @see TsMediaSubscriber#destroy\n */\n destroySubscriber(subscriber) {\n return new Promise((resolve) => {\n const doResolve = () => {\n subscriber.emit(SUBSCRIBER_EVENTS.DESTROYED);\n resolve();\n };\n\n if (isIE11 && window.WebRTCAdapter) {\n const videoEl = subscriber._element.firstChild;\n window.WebRTCAdapter.unBindVideoElement(videoEl);\n if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {\n videoEl.parentNode.removeChild(videoEl);\n tracer.trace('Video element removed successfully');\n } else {\n tracer.trace('Video element not removed', videoEl, videoEl.parentNode);\n }\n doResolve();\n } else {\n subscriber._element.remove();\n doResolve();\n }\n });\n }\n\n /* eslint-disable no-unused-vars */\n getSnapshot(tsMediaElement, timeout = 0, {format = 'image/png', quality = 0.92, x, y, w, h} = {}) {\n const videoElement = tsMediaElement._element;\n const {videoWidth, videoHeight} = videoElement;\n const crop = !_.isUndefined(x) && !_.isUndefined(y) && !_.isUndefined(w) && !_.isUndefined(h);\n const resize = !crop && (!_.isUndefined(w) || !_.isUndefined(h));\n\n if (resize) {\n if (!h) {\n h = w * (videoHeight / videoWidth);\n } else if (!w) {\n w = h * (videoWidth / videoHeight);\n }\n }\n\n function getImgData() {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (crop) {\n canvas.width = w;\n canvas.height = h;\n\n ctx.drawImage(videoElement, x, y, w, h, 0, 0, w, h);\n } else if (resize) {\n canvas.width = w;\n canvas.height = h;\n\n ctx.drawImage(videoElement, 0, 0, w, h);\n } else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n\n ctx.drawImage(videoElement, 0, 0);\n }\n\n return canvas.toDataURL(format, quality);\n }\n\n function getImgDataIE11() {\n return new Promise((resolve) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (crop || resize) {\n canvas.width = w;\n canvas.height = h;\n } else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n }\n\n function _drawAndRemove(image) {\n if (crop) {\n ctx.drawImage(image, x, y, w, h, 0, 0, w, h);\n } else if (resize) {\n ctx.drawImage(image, 0, 0, w, h);\n } else {\n ctx.drawImage(image, 0, 0, videoWidth, videoHeight);\n }\n\n return canvas.toDataURL(format, quality);\n }\n\n const base64 = videoElement.getFrame();\n const image = new Image();\n\n image.onload = () => resolve(_drawAndRemove(image));\n image.setAttribute('src', 'data:image/bmp;base64,' + base64);\n });\n }\n\n return Promise.resolve(isIE11 ? getImgDataIE11() : getImgData())\n .then((imgData) => {\n if (!imgData || imgData.length < 10) {\n return Promise.reject('Failed to get a snapshot');\n }\n\n return imgData;\n });\n }\n\n /**\n * Get statistics of the media subscription like bytes received.\n *\n * Used internally by TsMediaSubscriber.getStats\n *\n * @method\n *\n * @param { TsMediaSubscriber } subscriber\n *\n * @returns { Promise<ToBeDefined> } stats\n *\n * @see TsMediaSubscriber#getStats\n */\n getStats(subscriber) {\n return new Promise((resolve) => {\n try {\n const pc = this._getPeerConnection();\n\n if (isIE11 || !pc) {\n return resolve();\n }\n\n pc.getStats(this._mediaStream.getVideoTracks()[0])\n .then((reports) => {\n const matches = [];\n\n reports.forEach((report) => {\n if (_.includes(['inbound-rtp', 'ssrc'], report.type)) {\n matches.push(report);\n }\n });\n\n return resolve({\n video: _.head(matches)\n });\n });\n } catch (e) {\n // when this fails, it's most likely due ot no support for the getStats\n // functionality, so we don't want to log this as a recurring error\n resolve();\n }\n });\n }\n\n /* eslint-enable no-unused-vars */\n\n getFullVideoStats() {\n return new Promise((resolve, reject) => {\n try {\n const pc = this._getPeerConnection();\n\n if (!pc) {\n return reject('NO_PEER_CONNECTION');\n }\n\n return resolve(pc.getStats(this._mediaStream.getVideoTracks()[0]));\n\n } catch (e) {\n reject(e);\n }\n });\n }\n\n turnFlashlight(isTorchOn = true) {\n return new Promise((resolve, reject) => {\n if (this._torchDelayTimeOut) {\n return reject('No tourch delay');\n }\n\n if (!navigator || !navigator.mediaDevices) {\n return reject('No mediaDevices');\n }\n\n const track = this._mediaStream.getVideoTracks()[0];\n\n if (!track) {\n return reject('No track');\n }\n if (this._torchOffTimeOut) {\n clearInterval(this._torchOffTimeOut);\n this._torchOffTimeOut = null;\n }\n\n this._torchDelayTimeOut = setTimeout(() => {\n let capatibilitiesAfter = {};\n\n try {\n capatibilitiesAfter = track.getCapabilities();\n } catch (e) {\n return reject('No capabilities');\n }\n\n if (!capatibilitiesAfter.torch) {\n return reject('No tourch capabilities');\n }\n\n return track.applyConstraints({\n advanced: [{\n torch: isTorchOn\n }]\n }).then(() => {\n this._torchDelayTimeOut = null;\n resolve(true);\n }).catch((e) => {\n this._torchDelayTimeOut = null;\n console.error(e);\n reject('Can\\'t turn on the light, please try later!');\n });\n }, TORCH_DELAY);\n });\n }\n\n setAutoLightOffTimer(flashlightTimeout) {\n return new Promise((resolve) => {\n if (!flashlightTimeout) {\n return reject('No timeout');\n }\n\n const track = this._mediaStream.getVideoTracks()[0];\n\n if (!track) {\n return reject('No track');\n }\n\n this._torchOffTimeOut = setTimeout(() => {\n\n if (!track) {\n return reject('No track');\n }\n\n track.applyConstraints({\n advanced: [{\n torch: false\n }]\n }).then(() => {\n this._torchOffTimeOut = null;\n resolve();\n });\n }, flashlightTimeout);\n });\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["oldCode/webrtc/temasys/adapter-loader.js"],"names":["module","exports","window","AdapterJS","require"],"mappings":";;AACA;;AAEAA,OAAOC,OAAP,GAAiB,YAAM;AACnB,QAAI,CAACC,OAAOC,SAAZ,EAAuB;AACnBD,eAAOC,SAAP,GAAmBC,QAAQ,WAAR,CAAnB;AACH;;AAED,WAAOF,OAAOC,SAAd;AACH,CAND","file":"adapter-loader.js","sourcesContent":["\n// TODO try to not to use window, just a var\n\nmodule.exports = () => {\n if (!window.AdapterJS) {\n window.AdapterJS = require('./adapter');\n }\n\n return window.AdapterJS;\n};\n"]}
|