@techsee/techsee-media-service 0.6.1-alpha.8 → 0.7.0-alpha.2

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.
Files changed (149) hide show
  1. package/lib/constants.js.map +1 -0
  2. package/lib/event-emitter.js.map +1 -0
  3. package/lib/{oldCode/index.js → index.js} +1 -1
  4. package/lib/index.js.map +1 -0
  5. package/lib/{oldCode/opentok → opentok}/session.js +0 -6
  6. package/lib/opentok/session.js.map +1 -0
  7. package/lib/opentok/stream.js.map +1 -0
  8. package/lib/publisher.js.map +1 -0
  9. package/lib/qos/raw-qos.js.map +1 -1
  10. package/lib/{oldCode/service.js → service.js} +6 -4
  11. package/lib/service.js.map +1 -0
  12. package/lib/session.js.map +1 -0
  13. package/lib/stream.js.map +1 -0
  14. package/lib/subscriber.js.map +1 -0
  15. package/lib/tracer.js +22 -0
  16. package/lib/tracer.js.map +1 -0
  17. package/lib/v2/Contracts.d.ts +41 -0
  18. package/lib/v2/Contracts.d.ts.map +1 -0
  19. package/lib/v2/Contracts.js +31 -0
  20. package/lib/v2/Contracts.js.map +1 -0
  21. package/lib/v2/LocalStreamManager.d.ts +8 -0
  22. package/lib/v2/LocalStreamManager.d.ts.map +1 -0
  23. package/lib/v2/LocalStreamManager.js +94 -0
  24. package/lib/v2/LocalStreamManager.js.map +1 -0
  25. package/lib/v2/MediaServiceBase.d.ts +24 -0
  26. package/lib/v2/MediaServiceBase.d.ts.map +1 -0
  27. package/lib/v2/MediaServiceBase.js +85 -0
  28. package/lib/v2/MediaServiceBase.js.map +1 -0
  29. package/lib/v2/MediaSubscriber.d.ts +8 -0
  30. package/lib/v2/MediaSubscriber.d.ts.map +1 -0
  31. package/lib/v2/MediaSubscriber.js +17 -0
  32. package/lib/v2/MediaSubscriber.js.map +1 -0
  33. package/lib/webrtc/constants.js.map +1 -0
  34. package/lib/{oldCode/webrtc → webrtc}/helper.js +4 -2
  35. package/lib/webrtc/helper.js.map +1 -0
  36. package/lib/webrtc/session-kms.js.map +1 -0
  37. package/lib/webrtc/session-loopback.js.map +1 -0
  38. package/lib/{oldCode/webrtc → webrtc}/session-turn.js +41 -47
  39. package/lib/webrtc/session-turn.js.map +1 -0
  40. package/lib/{oldCode/webrtc → webrtc}/session-turn.v2.js +48 -85
  41. package/lib/webrtc/session-turn.v2.js.map +1 -0
  42. package/lib/webrtc/session.js.map +1 -0
  43. package/lib/{oldCode/webrtc → webrtc}/stream.js +9 -7
  44. package/lib/webrtc/stream.js.map +1 -0
  45. package/lib/webrtc/temasys/adapter-loader.js.map +1 -0
  46. package/lib/webrtc/temasys/adapter.js.map +1 -0
  47. package/lib/webrtc/webrtc-ie-shim.js.map +1 -0
  48. package/package.json +4 -6
  49. package/lib/LocalStreamManager.d.ts +0 -21
  50. package/lib/LocalStreamManager.d.ts.map +0 -1
  51. package/lib/LocalStreamManager.js +0 -268
  52. package/lib/LocalStreamManager.js.map +0 -1
  53. package/lib/MediaConstants.d.ts +0 -52
  54. package/lib/MediaConstants.d.ts.map +0 -1
  55. package/lib/MediaConstants.js +0 -68
  56. package/lib/MediaConstants.js.map +0 -1
  57. package/lib/MediaContracts.d.ts +0 -122
  58. package/lib/MediaContracts.d.ts.map +0 -1
  59. package/lib/MediaContracts.js +0 -6
  60. package/lib/MediaContracts.js.map +0 -1
  61. package/lib/MediaPublisher.d.ts +0 -14
  62. package/lib/MediaPublisher.d.ts.map +0 -1
  63. package/lib/MediaPublisher.js +0 -43
  64. package/lib/MediaPublisher.js.map +0 -1
  65. package/lib/MediaServiceBase.d.ts +0 -64
  66. package/lib/MediaServiceBase.d.ts.map +0 -1
  67. package/lib/MediaServiceBase.js +0 -591
  68. package/lib/MediaServiceBase.js.map +0 -1
  69. package/lib/MediaSession/MediaSessionBase.d.ts +0 -23
  70. package/lib/MediaSession/MediaSessionBase.d.ts.map +0 -1
  71. package/lib/MediaSession/MediaSessionBase.js +0 -63
  72. package/lib/MediaSession/MediaSessionBase.js.map +0 -1
  73. package/lib/MediaSession/SessionOpentok.v3.d.ts +0 -49
  74. package/lib/MediaSession/SessionOpentok.v3.d.ts.map +0 -1
  75. package/lib/MediaSession/SessionOpentok.v3.js +0 -379
  76. package/lib/MediaSession/SessionOpentok.v3.js.map +0 -1
  77. package/lib/MediaSession/SessionTurn.v3.d.ts +0 -32
  78. package/lib/MediaSession/SessionTurn.v3.d.ts.map +0 -1
  79. package/lib/MediaSession/SessionTurn.v3.js +0 -439
  80. package/lib/MediaSession/SessionTurn.v3.js.map +0 -1
  81. package/lib/MediaSession/TurnConstants.d.ts +0 -18
  82. package/lib/MediaSession/TurnConstants.d.ts.map +0 -1
  83. package/lib/MediaSession/TurnConstants.js +0 -36
  84. package/lib/MediaSession/TurnConstants.js.map +0 -1
  85. package/lib/MediaSubscriber.d.ts +0 -35
  86. package/lib/MediaSubscriber.d.ts.map +0 -1
  87. package/lib/MediaSubscriber.js +0 -203
  88. package/lib/MediaSubscriber.js.map +0 -1
  89. package/lib/MediaUtils/Compatibility.d.ts +0 -11
  90. package/lib/MediaUtils/Compatibility.d.ts.map +0 -1
  91. package/lib/MediaUtils/Compatibility.js +0 -71
  92. package/lib/MediaUtils/Compatibility.js.map +0 -1
  93. package/lib/MediaUtils/MediaDomUtils.d.ts +0 -4
  94. package/lib/MediaUtils/MediaDomUtils.d.ts.map +0 -1
  95. package/lib/MediaUtils/MediaDomUtils.js +0 -200
  96. package/lib/MediaUtils/MediaDomUtils.js.map +0 -1
  97. package/lib/MediaUtils/MediaTracer.d.ts +0 -3
  98. package/lib/MediaUtils/MediaTracer.d.ts.map +0 -1
  99. package/lib/MediaUtils/MediaTracer.js +0 -12
  100. package/lib/MediaUtils/MediaTracer.js.map +0 -1
  101. package/lib/TechseeMediaStream.d.ts +0 -14
  102. package/lib/TechseeMediaStream.d.ts.map +0 -1
  103. package/lib/TechseeMediaStream.js +0 -58
  104. package/lib/TechseeMediaStream.js.map +0 -1
  105. package/lib/oldCode/constants.js.map +0 -1
  106. package/lib/oldCode/event-emitter.js.map +0 -1
  107. package/lib/oldCode/index.js.map +0 -1
  108. package/lib/oldCode/opentok/session.js.map +0 -1
  109. package/lib/oldCode/opentok/stream.js.map +0 -1
  110. package/lib/oldCode/publisher.js.map +0 -1
  111. package/lib/oldCode/service.js.map +0 -1
  112. package/lib/oldCode/session.js.map +0 -1
  113. package/lib/oldCode/stream.js.map +0 -1
  114. package/lib/oldCode/subscriber.js.map +0 -1
  115. package/lib/oldCode/tracer.d.ts +0 -35
  116. package/lib/oldCode/tracer.d.ts.map +0 -1
  117. package/lib/oldCode/tracer.js +0 -151
  118. package/lib/oldCode/tracer.js.map +0 -1
  119. package/lib/oldCode/utils/ImageFixer.d.ts +0 -1
  120. package/lib/oldCode/utils/ImageFixer.d.ts.map +0 -1
  121. package/lib/oldCode/utils/ImageFixer.js +0 -58
  122. package/lib/oldCode/utils/ImageFixer.js.map +0 -1
  123. package/lib/oldCode/webrtc/constants.js.map +0 -1
  124. package/lib/oldCode/webrtc/helper.js.map +0 -1
  125. package/lib/oldCode/webrtc/session-kms.js.map +0 -1
  126. package/lib/oldCode/webrtc/session-loopback.js.map +0 -1
  127. package/lib/oldCode/webrtc/session-turn.js.map +0 -1
  128. package/lib/oldCode/webrtc/session-turn.v2.js.map +0 -1
  129. package/lib/oldCode/webrtc/session.js.map +0 -1
  130. package/lib/oldCode/webrtc/stream.js.map +0 -1
  131. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +0 -1
  132. package/lib/oldCode/webrtc/temasys/adapter.js.map +0 -1
  133. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +0 -1
  134. package/lib/webrtc-ie-shim.js +0 -3218
  135. package/lib/webrtc-ie-shim.js.map +0 -1
  136. /package/lib/{oldCode/constants.js → constants.js} +0 -0
  137. /package/lib/{oldCode/event-emitter.js → event-emitter.js} +0 -0
  138. /package/lib/{oldCode/opentok → opentok}/stream.js +0 -0
  139. /package/lib/{oldCode/publisher.js → publisher.js} +0 -0
  140. /package/lib/{oldCode/session.js → session.js} +0 -0
  141. /package/lib/{oldCode/stream.js → stream.js} +0 -0
  142. /package/lib/{oldCode/subscriber.js → subscriber.js} +0 -0
  143. /package/lib/{oldCode/webrtc → webrtc}/constants.js +0 -0
  144. /package/lib/{oldCode/webrtc → webrtc}/session-kms.js +0 -0
  145. /package/lib/{oldCode/webrtc → webrtc}/session-loopback.js +0 -0
  146. /package/lib/{oldCode/webrtc → webrtc}/session.js +0 -0
  147. /package/lib/{oldCode/webrtc → webrtc}/temasys/adapter-loader.js +0 -0
  148. /package/lib/{oldCode/webrtc → webrtc}/temasys/adapter.js +0 -0
  149. /package/lib/{oldCode/webrtc → webrtc}/webrtc-ie-shim.js +0 -0
@@ -25,7 +25,9 @@ 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 tracer = (0, _tracer.getTracer)();
28
+ var trace = (0, _tracer.getTracer)('WebRtcSessionTrace', function () {
29
+ return window.WebRtcSessionTrace === true;
30
+ });
29
31
 
30
32
  //Currently this version supports subscribing only. Publishing will be implemented as needed.
31
33
 
@@ -59,8 +61,6 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
59
61
  _this._selfClientType = clientType;
60
62
  _this._localStreamFactory = streamFactory;
61
63
 
62
- _this._connectPromise = null;
63
-
64
64
  var iceServers = credentials.ice.map(function (item) {
65
65
  return {
66
66
  urls: item.url,
@@ -92,46 +92,32 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
92
92
 
93
93
  var connectOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
94
94
 
95
- if (this._connectPromise) {
96
- tracer.trace('already connecting');
97
- return this._connectPromise;
98
- }
99
-
100
- tracer.trace('connect');
95
+ trace('connect');
101
96
 
102
- this._connectPromise = this._connectSocket(this._credentials.url, connectOnly).then(function () {
103
- tracer.trace('Joining SessionId: ' + _this2._credentials.sessionId);
97
+ return this._connectSocket(this._credentials.url, connectOnly).then(function () {
98
+ trace('Joining SessionId: ' + _this2._credentials.sessionId);
104
99
 
105
100
  _this2._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.JOIN_ROOM, {
106
101
  clientType: _this2._selfClientType,
107
102
  sessionId: _this2._credentials.sessionId
108
103
  });
109
-
110
- _this2._connectPromise = null;
111
104
  }).catch(function (error) {
112
- setTimeout(function () {
113
- return _this2._connectPromise = null;
114
- });
115
105
  _this2.emit(_session.SESSION_EVENTS.EXCEPTION, { source: 'connect', error: error });
116
106
  throw error;
117
107
  });
118
-
119
- return this._connectPromise;
120
108
  };
121
109
 
122
110
  TurnWebRtcSessionV2.prototype.disconnect = function disconnect() {
123
111
  var _this3 = this;
124
112
 
125
- tracer.trace('Disconnecting from media session');
126
-
127
113
  this._peerConnections.forEach(function (peerConnection) {
128
114
  _this3._destroyPeerConnection(peerConnection);
129
115
  });
130
116
 
117
+ this.emit(_session.SESSION_EVENTS.DISCONNECTED, { reason: 'disconnected' });
118
+
131
119
  this._socket.off();
132
120
  this._socket.disconnect();
133
-
134
- this.emit(_session.SESSION_EVENTS.DISCONNECTED, { reason: 'disconnected' });
135
121
  };
136
122
 
137
123
  TurnWebRtcSessionV2.prototype._connectSocket = function _connectSocket(url, connectOnly) {
@@ -157,24 +143,6 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
157
143
  socket.on('connect_error', done);
158
144
  socket.on('connect_timeout', done);
159
145
 
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
-
178
146
  if (!connectOnly) {
179
147
  //PUBLISHING NOT SUPPORTED YET
180
148
  //socket.on(SOCKET_EVENTS.INCOMING.SEND_OFFER, this._sendOfferHandler);
@@ -202,20 +170,20 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
202
170
  var uid = _ref2.uid,
203
171
  peerId = _ref2.peerId;
204
172
 
205
- tracer.trace('_sendOfferHandler');
173
+ trace('_sendOfferHandler');
206
174
 
207
175
  var peerConnection = this._createPeerConnection(peerId, _constants.CLIENT_TYPES.GUEST);
208
176
  var offerParams = { offerToReceiveAudio: true, offerToReceiveVideo: true };
209
177
 
210
178
  this._localStreamFactory(this._constraints).then(function (localStream) {
211
- tracer.trace('_sendOfferHandler stream and peer created');
179
+ trace('_sendOfferHandler stream and peer created');
212
180
 
213
181
  var peerConnectionStream = new _stream.TsWebRTCStream(_this5, localStream.clone(), _constants.DEFAULT_STREAM_NAMES.MOBILE_CLIENT_VIDEO_STREAM, false);
214
182
 
215
183
  peerConnectionStream.peerConnection = peerConnection;
216
184
 
217
185
  localStream.getTracks().forEach(function (track) {
218
- tracer.trace('Adding local tracks to peer connection');
186
+ trace('Adding local tracks to peer connection');
219
187
  peerConnection.addTrack(track, peerConnectionStream._mediaStream);
220
188
  });
221
189
 
@@ -223,7 +191,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
223
191
  }).then(function () {
224
192
  return peerConnection.createOffer(offerParams);
225
193
  }).then(function (offerDesc) {
226
- tracer.trace('Initiator has created sdp offer', { offerDesc: offerDesc });
194
+ trace('Initiator has created sdp offer', { offerDesc: offerDesc });
227
195
 
228
196
  _this5._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.SDP_OFFER, {
229
197
  uid: uid,
@@ -233,10 +201,10 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
233
201
  });
234
202
 
235
203
  return peerConnection.setLocalDescription(offerDesc).then(function () {
236
- tracer.trace('Local description was set on');
204
+ trace('Local description was set on');
237
205
  });
238
206
  }).catch(function (e) {
239
- tracer.trace('Error', e);
207
+ trace('Error', e);
240
208
  });
241
209
  };
242
210
 
@@ -250,7 +218,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
250
218
  uid = _ref3.uid,
251
219
  peerId = _ref3.peerId;
252
220
 
253
- tracer.trace('joinResponse Received', sdpAnswer);
221
+ trace('joinResponse Received', sdpAnswer);
254
222
 
255
223
  this._withPeerConnection(peerId, function (peerConnection) {
256
224
  var answer = new RTCSessionDescription({
@@ -259,11 +227,11 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
259
227
  });
260
228
 
261
229
  peerConnection.setRemoteDescription(answer).then(function () {
262
- tracer.trace('Remote description was set', answer);
230
+ trace('Remote description was set', answer);
263
231
 
264
232
  _this6._processQueuedIceCandidates(peerId);
265
233
  }).catch(function (e) {
266
- tracer.trace('Error', e);
234
+ trace('Error', e);
267
235
  });
268
236
  });
269
237
  };
@@ -274,7 +242,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
274
242
  TurnWebRtcSessionV2.prototype._peerDisconnectedHandler = function _peerDisconnectedHandler(_ref4) {
275
243
  var peerId = _ref4.peerId;
276
244
 
277
- tracer.trace('_peerDisconnectedHandler');
245
+ trace('_peerDisconnectedHandler');
278
246
  };
279
247
 
280
248
  //#endregion WebRTC Initiator - session Initiator (User on mobile device)
@@ -291,7 +259,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
291
259
  peerId = _ref5.peerId,
292
260
  uid = _ref5.uid;
293
261
 
294
- tracer.trace('sdpOffer Received', { sdpOffer: sdpOffer });
262
+ trace('sdpOffer Received', { sdpOffer: sdpOffer });
295
263
 
296
264
  var peerConnection = this._createPeerConnection(peerId, _constants.CLIENT_TYPES.INITIATOR);
297
265
 
@@ -299,11 +267,11 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
299
267
 
300
268
  if (this._constraints.audio) {
301
269
  subscriberInitChain = subscriberInitChain.then(function () {
302
- tracer.trace('Creating agent local streams');
270
+ trace('Creating agent local streams');
303
271
 
304
272
  return _this7._localStreamFactory(_this7._constraints).then(function (localStream) {
305
273
  localStream.getTracks().forEach(function (track) {
306
- tracer.trace('Adding local tracks to peer connection');
274
+ trace('Adding local tracks to peer connection');
307
275
 
308
276
  if (track.kind === 'audio') {
309
277
 
@@ -314,7 +282,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
314
282
  _this7.registerStream(agentAudioStream.id, agentAudioStream);
315
283
  peerConnection.addTrack(track, peerConnection.peerLogicalStream);
316
284
 
317
- tracer.trace('Agent audio stream added to peerConnection');
285
+ trace('Agent audio stream added to peerConnection');
318
286
  }
319
287
  });
320
288
  });
@@ -325,10 +293,10 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
325
293
  var remoteDesc = new RTCSessionDescription({ type: 'offer', sdp: sdpOffer });
326
294
 
327
295
  return peerConnection.setRemoteDescription(remoteDesc).then(function () {
328
- tracer.trace('Remote description was set', remoteDesc);
296
+ trace('Remote description was set', remoteDesc);
329
297
 
330
298
  return peerConnection.createAnswer().then(function (sdpAnswer) {
331
- tracer.trace('_sdpOfferHandler answer created', sdpAnswer);
299
+ trace('_sdpOfferHandler answer created', sdpAnswer);
332
300
 
333
301
  _this7._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.SDP_ANSWER, {
334
302
  uid: uid,
@@ -338,7 +306,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
338
306
  });
339
307
 
340
308
  return peerConnection.setLocalDescription(sdpAnswer).then(function () {
341
- tracer.trace('_sdpOfferHandler local desc was set');
309
+ trace('_sdpOfferHandler local desc was set');
342
310
 
343
311
  _this7._processQueuedIceCandidates(peerId);
344
312
  });
@@ -347,7 +315,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
347
315
  });
348
316
 
349
317
  return subscriberInitChain.catch(function (e) {
350
- tracer.trace('Error in _sdpOfferHandler', e);
318
+ trace('Error in _sdpOfferHandler', e);
351
319
  throw e;
352
320
  });
353
321
  };
@@ -356,7 +324,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
356
324
 
357
325
 
358
326
  TurnWebRtcSessionV2.prototype._initiatorReconnectHandler = function _initiatorReconnectHandler() {
359
- tracer.trace('_initiatorReconnectHandler');
327
+ trace('_initiatorReconnectHandler');
360
328
 
361
329
  var initiatorPeer = this._getInitiatorPeer();
362
330
 
@@ -391,26 +359,15 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
391
359
  peerConnection.peerLogicalStream = new MediaStream();
392
360
 
393
361
  peerConnection.oniceconnectionstatechange = function (state) {
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();
362
+ trace('ICE Connection state for peer ' + peerId + ' was changed to: ' + state.currentTarget.iceConnectionState, state);
363
+ if (state.currentTarget.iceConnectionState === 'disconnected') {
364
+ _this8._iceStateDisconnected(peerConnection);
408
365
  }
409
366
  };
410
367
 
411
368
  peerConnection.onicecandidate = function (event) {
412
369
  if (event.candidate) {
413
- tracer.trace(_this8._selfClientType + ' peerConn.onicecandidate', event.candidate);
370
+ trace(_this8._selfClientType + ' peerConn.onicecandidate', event.candidate);
414
371
  _this8._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {
415
372
  sessionId: _this8._credentials.sessionId,
416
373
  peerId: peerId,
@@ -418,7 +375,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
418
375
  clientType: _this8._selfClientType
419
376
  });
420
377
  } else {
421
- tracer.trace('ICE Candidate is null in peerConnection', event);
378
+ trace('ICE Candidate is null in peerConnection', event);
422
379
  }
423
380
  };
424
381
 
@@ -428,7 +385,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
428
385
  streams = trackEvent.streams;
429
386
 
430
387
 
431
- tracer.trace('Stream created from peer connection track: ' + track.kind, track, streams.length > 0 ? streams[0] : 'NO STREAM');
388
+ trace('Stream created from peer connection track: ' + track.kind, track, streams.length > 0 ? streams[0] : 'NO STREAM');
432
389
 
433
390
  var tsStream = new _stream.TsWebRTCStream(_this8, new MediaStream([track]));
434
391
 
@@ -443,7 +400,7 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
443
400
 
444
401
  this._peerConnections.set(peerId, peerConnection);
445
402
 
446
- tracer.trace(this._selfClientType + ' peerConnection created');
403
+ trace(this._selfClientType + ' peerConnection created');
447
404
 
448
405
  return peerConnection;
449
406
  };
@@ -522,9 +479,9 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
522
479
  var candidate = _ref6.candidate,
523
480
  peerId = _ref6.peerId;
524
481
 
525
- tracer.trace('_iceCandidateReceivedHandler', candidate);
482
+ trace('_iceCandidateReceivedHandler', candidate);
526
483
  if (!candidate) {
527
- tracer.trace('NO iceCandidate');
484
+ trace('NO iceCandidate');
528
485
 
529
486
  return;
530
487
  }
@@ -532,21 +489,21 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
532
489
  var peerConnection = this._peerConnections.get(peerId);
533
490
 
534
491
  if (!peerConnection || !peerConnection.remoteDescription) {
535
- tracer.trace('Queueing iceCandidate', candidate);
492
+ trace('Queueing iceCandidate', candidate);
536
493
  this._queueIceCandidate(candidate, peerId);
537
494
 
538
495
  return;
539
496
  }
540
497
 
541
- tracer.trace('Going to add iceCandidate', candidate);
498
+ trace('Going to add iceCandidate', candidate);
542
499
  this._addIceCandidateToPeer(candidate, peerConnection);
543
500
  };
544
501
 
545
502
  TurnWebRtcSessionV2.prototype._addIceCandidateToPeer = function _addIceCandidateToPeer(iceCandidate, peerConnection) {
546
503
  return peerConnection.addIceCandidate(iceCandidate).then(function () {
547
- tracer.trace('ICE Candidate add to peer connection');
504
+ trace('ICE Candidate add to peer connection');
548
505
  }).catch(function (e) {
549
- tracer.trace('Error adding ICE Candidate to peer connection', e);
506
+ trace('Error adding ICE Candidate to peer connection', e);
550
507
  });
551
508
  };
552
509
 
@@ -558,11 +515,11 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
558
515
 
559
516
  if (pendingIces) {
560
517
  pendingIces.forEach(function (pendingIce) {
561
- tracer.trace('Adding pending ICE to peer connections');
518
+ trace('Adding pending ICE to peer connections');
562
519
  _this10._addIceCandidateToPeer(pendingIce, peerConnection);
563
520
  });
564
521
  } else {
565
- tracer.trace('No pending ICE found for peer', peerId);
522
+ trace('No pending ICE found for peer', peerId);
566
523
  }
567
524
  });
568
525
  };
@@ -575,6 +532,12 @@ var TurnWebRtcSessionV2 = exports.TurnWebRtcSessionV2 = function (_TsMediaSessio
575
532
  this._pendingPeersIce[peerId].push(iceCandidate);
576
533
  };
577
534
 
535
+ TurnWebRtcSessionV2.prototype._iceStateDisconnected = function _iceStateDisconnected(peerConnection) {
536
+ if (peerConnection.peerType === _constants.CLIENT_TYPES.INITIATOR) {
537
+ this._destroyPeerConnection(peerConnection);
538
+ }
539
+ };
540
+
578
541
  //#endregion
579
542
 
580
543
 
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webrtc/session-turn.v2.js"],"names":["io","trace","window","WebRtcSessionTrace","TurnWebRtcSessionV2","_credentials","sessionId","credentials","constraints","clientType","streamFactory","_socket","_localPeer","_pendingPeersIce","_peerConnections","Map","_constraints","_selfClientType","_localStreamFactory","iceServers","ice","map","item","urls","url","username","login","credential","password","_configuration","iceTransportPolicy","_joinResponseHandler","bind","_iceCandidateReceivedHandler","_sendOfferHandler","_sdpOfferHandler","_initiatorReconnectHandler","_peerDisconnectedHandler","_extendPeerConnection","connect","connectOnly","_connectSocket","then","emit","SOCKET_EVENTS","OUTGOING","JOIN_ROOM","catch","error","SESSION_EVENTS","EXCEPTION","source","disconnect","forEach","peerConnection","_destroyPeerConnection","DISCONNECTED","reason","off","Promise","resolve","reject","socket","SOCKET_RECONNECTION_DELAY","SOCKET_RECONNECTION_DELAY_MAX","SOCKET_RECONNECTION_ATTEMPTS","SOCKET_PATH","done","_","once","err","on","INCOMING","ERROR","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","_iceStateDisconnected","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 trace = getTracer('WebRtcSessionTrace', () => window.WebRtcSessionTrace === true);\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 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 trace('connect');\n\n return this._connectSocket(this._credentials.url, connectOnly)\n .then(() => {\n 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 .catch((error) => {\n this.emit(SESSION_EVENTS.EXCEPTION, {source: 'connect', error});\n throw error;\n });\n }\n\n disconnect() {\n this._peerConnections.forEach((peerConnection) => {\n this._destroyPeerConnection(peerConnection);\n });\n\n this.emit(SESSION_EVENTS.DISCONNECTED, {reason: 'disconnected'});\n\n this._socket.off();\n this._socket.disconnect();\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 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 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 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 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 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 trace('Local description was set on');\n });\n })\n .catch((e) => {\n trace('Error', e);\n });\n }\n\n // Received by the Initiator: Indicates that publish should be started\n _joinResponseHandler({sdpAnswer, uid, peerId}) {\n 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 trace('Remote description was set', answer);\n\n this._processQueuedIceCandidates(peerId);\n })\n .catch((e) => {\n trace('Error', e);\n });\n });\n }\n\n // Received by Initiator after a guests socket has been disconnected\n _peerDisconnectedHandler({peerId}) {\n 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 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 trace('Creating agent local streams');\n\n return this._localStreamFactory(this._constraints)\n .then((localStream) => {\n localStream.getTracks().forEach((track) => {\n 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 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 trace('Remote description was set', remoteDesc);\n\n return peerConnection.createAnswer()\n .then((sdpAnswer) => {\n 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 trace('_sdpOfferHandler local desc was set');\n\n this._processQueuedIceCandidates(peerId);\n });\n });\n });\n\n });\n\n return subscriberInitChain.catch((e) => {\n trace('Error in _sdpOfferHandler', e);\n throw e;\n });\n }\n\n // Received by Guest after an Initiator reconnects to room\n _initiatorReconnectHandler() {\n 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 trace(`ICE Connection state for peer ${peerId} was changed to: ${state.currentTarget.iceConnectionState}`, state);\n if (state.currentTarget.iceConnectionState === 'disconnected') {\n this._iceStateDisconnected(peerConnection);\n }\n };\n\n peerConnection.onicecandidate = (event) => {\n if (event.candidate) {\n 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 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 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 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 trace('_iceCandidateReceivedHandler', candidate);\n if (!candidate) {\n trace('NO iceCandidate');\n\n return;\n }\n\n const peerConnection = this._peerConnections.get(peerId);\n\n if (!peerConnection || !peerConnection.remoteDescription) {\n trace('Queueing iceCandidate', candidate);\n this._queueIceCandidate(candidate, peerId);\n\n return;\n }\n\n 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 trace('ICE Candidate add to peer connection');\n })\n .catch((e) => {\n 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 trace('Adding pending ICE to peer connections');\n this._addIceCandidateToPeer(pendingIce, peerConnection);\n });\n } else {\n 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 _iceStateDisconnected(peerConnection) {\n if (peerConnection.peerType === CLIENT_TYPES.INITIATOR) {\n this._destroyPeerConnection(peerConnection);\n }\n }\n\n //#endregion\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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,7 +31,9 @@ exports.EVENTS = _stream.EVENTS;
31
31
  var TORCH_DELAY = 1500;
32
32
  var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
33
33
 
34
- var tracer = (0, _tracer.getTracer)();
34
+ var trace = (0, _tracer.getTracer)('WebRtcSessionTrace', function () {
35
+ return window.WebRtcSessionTrace === true;
36
+ });
35
37
 
36
38
  /**
37
39
  * WebRTC-specific implementation of TsMediaStream.
@@ -237,7 +239,7 @@ var TsWebRTCStream = exports.TsWebRTCStream = function (_TsMediaStream) {
237
239
  var bindVideoStreamToElement = function bindVideoStreamToElement(stream, target) {
238
240
  return new Promise(function (resolve, reject) {
239
241
  var doResolve = function doResolve(videoEl) {
240
- tracer.trace('Video element created successfully');
242
+ trace('Video element created successfully');
241
243
  resolve(videoEl);
242
244
  };
243
245
 
@@ -261,17 +263,17 @@ var TsWebRTCStream = exports.TsWebRTCStream = function (_TsMediaStream) {
261
263
  var playRes = videoEl.play();
262
264
  if (playRes && playRes.then) {
263
265
  playRes.then(function () {
264
- tracer.trace('Video element play success');
266
+ trace('Video element play success');
265
267
  });
266
268
  }
267
269
 
268
270
  if (playRes && playRes.catch) {
269
271
  playRes.catch(function (error) {
270
- tracer.trace('Reject while executing play method on video element', error);
272
+ trace('Reject while executing play method on video element', error);
271
273
  });
272
274
  }
273
275
  } catch (error) {
274
- tracer.trace('Error while executing play method on video element', error);
276
+ trace('Error while executing play method on video element', error);
275
277
  }
276
278
 
277
279
  if (isIE11) {
@@ -352,9 +354,9 @@ var TsWebRTCStream = exports.TsWebRTCStream = function (_TsMediaStream) {
352
354
  window.WebRTCAdapter.unBindVideoElement(videoEl);
353
355
  if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {
354
356
  videoEl.parentNode.removeChild(videoEl);
355
- tracer.trace('Video element removed successfully');
357
+ trace('Video element removed successfully');
356
358
  } else {
357
- tracer.trace('Video element not removed', videoEl, videoEl.parentNode);
359
+ trace('Video element not removed', videoEl, videoEl.parentNode);
358
360
  }
359
361
  doResolve();
360
362
  } else {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webrtc/stream.js"],"names":["EVENTS","TORCH_DELAY","isIE11","TsEnvironmentDetect","trace","window","WebRtcSessionTrace","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","document","createElement","muted","playsInline","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":"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","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 trace = getTracer('WebRtcSessionTrace', () => window.WebRtcSessionTrace === true);\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 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 trace('Video element play success');\n });\n }\n\n if (playRes && playRes.catch) {\n playRes.catch((error) => {\n trace('Reject while executing play method on video element', error);\n });\n }\n } catch (error) {\n 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 trace('Video element removed successfully');\n } else {\n 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":["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"]}