@techsee/techsee-media-service 10.0.0 → 11.0.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.
Files changed (53) hide show
  1. package/lib/MultiParty/opentok/OpentokSubscriber.js +0 -2
  2. package/lib/MultiParty/opentok/OpentokSubscriber.js.map +1 -1
  3. package/package.json +5 -3
  4. package/lib/oldCode/constants.js +0 -25
  5. package/lib/oldCode/constants.js.map +0 -1
  6. package/lib/oldCode/event-emitter.js +0 -62
  7. package/lib/oldCode/event-emitter.js.map +0 -1
  8. package/lib/oldCode/index.js +0 -60
  9. package/lib/oldCode/index.js.map +0 -1
  10. package/lib/oldCode/opentok/session.js +0 -335
  11. package/lib/oldCode/opentok/session.js.map +0 -1
  12. package/lib/oldCode/opentok/stream.js +0 -324
  13. package/lib/oldCode/opentok/stream.js.map +0 -1
  14. package/lib/oldCode/publisher.js +0 -168
  15. package/lib/oldCode/publisher.js.map +0 -1
  16. package/lib/oldCode/service.js +0 -417
  17. package/lib/oldCode/service.js.map +0 -1
  18. package/lib/oldCode/session.js +0 -132
  19. package/lib/oldCode/session.js.map +0 -1
  20. package/lib/oldCode/stream.js +0 -223
  21. package/lib/oldCode/stream.js.map +0 -1
  22. package/lib/oldCode/subscriber.js +0 -115
  23. package/lib/oldCode/subscriber.js.map +0 -1
  24. package/lib/oldCode/tracer.d.ts +0 -36
  25. package/lib/oldCode/tracer.d.ts.map +0 -1
  26. package/lib/oldCode/tracer.js +0 -202
  27. package/lib/oldCode/tracer.js.map +0 -1
  28. package/lib/oldCode/utils/ImageFixer.d.ts +0 -1
  29. package/lib/oldCode/utils/ImageFixer.d.ts.map +0 -1
  30. package/lib/oldCode/utils/ImageFixer.js +0 -83
  31. package/lib/oldCode/utils/ImageFixer.js.map +0 -1
  32. package/lib/oldCode/webrtc/constants.js +0 -106
  33. package/lib/oldCode/webrtc/constants.js.map +0 -1
  34. package/lib/oldCode/webrtc/helper.js +0 -225
  35. package/lib/oldCode/webrtc/helper.js.map +0 -1
  36. package/lib/oldCode/webrtc/session-kms.js +0 -573
  37. package/lib/oldCode/webrtc/session-kms.js.map +0 -1
  38. package/lib/oldCode/webrtc/session-loopback.js +0 -354
  39. package/lib/oldCode/webrtc/session-loopback.js.map +0 -1
  40. package/lib/oldCode/webrtc/session-turn.js +0 -927
  41. package/lib/oldCode/webrtc/session-turn.js.map +0 -1
  42. package/lib/oldCode/webrtc/session-turn.v2.js +0 -592
  43. package/lib/oldCode/webrtc/session-turn.v2.js.map +0 -1
  44. package/lib/oldCode/webrtc/session.js +0 -58
  45. package/lib/oldCode/webrtc/session.js.map +0 -1
  46. package/lib/oldCode/webrtc/stream.js +0 -696
  47. package/lib/oldCode/webrtc/stream.js.map +0 -1
  48. package/lib/oldCode/webrtc/temasys/adapter-loader.js +0 -11
  49. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +0 -1
  50. package/lib/oldCode/webrtc/temasys/adapter.js +0 -5933
  51. package/lib/oldCode/webrtc/temasys/adapter.js.map +0 -1
  52. package/lib/oldCode/webrtc/webrtc-ie-shim.js +0 -3437
  53. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +0 -1
@@ -1,927 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.TurnWebRTCSession = void 0;
9
-
10
- var _session = require("../session");
11
-
12
- var _publisher = require("../publisher");
13
-
14
- var _stream = require("./stream");
15
-
16
- var io = _interopRequireWildcard(require("socket.io-client"));
17
-
18
- var _tsEnvironmentDetect = require("@techsee/techsee-common/lib/helpers/ts-environment-detect");
19
-
20
- var _constants = require("./constants");
21
-
22
- var _helper = require("./helper");
23
-
24
- var _tracer = require("../tracer");
25
-
26
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
-
28
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
-
30
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
31
-
32
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
33
-
34
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
35
-
36
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
37
-
38
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
39
-
40
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
41
-
42
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
43
-
44
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
45
-
46
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
-
48
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
49
-
50
- var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
51
-
52
- var _require = require('kurento-utils'),
53
- WebRtcPeer = _require.WebRtcPeer; // eslint-disable-line global-require
54
-
55
-
56
- var tracer = (0, _tracer.getTracer)();
57
- /**
58
- * WebRTC-specific implementation of TsMediaSession.
59
- *
60
- * Instance of this class is returned by TsMediaService.initSession call
61
- * with 'TURN_SERVER' as desired mediaType.
62
- *
63
- * @class
64
- * @extends TsMediaSession
65
- *
66
- * @see TsMediaSession
67
- */
68
-
69
- var TurnWebRTCSession = /*#__PURE__*/function (_TsMediaSession) {
70
- _inherits(TurnWebRTCSession, _TsMediaSession);
71
-
72
- var _super = _createSuper(TurnWebRTCSession);
73
-
74
- function TurnWebRTCSession(_ref, localStreamFactory) {
75
- var _this;
76
-
77
- var credentials = _ref.credentials,
78
- isMobile = _ref.isMobile,
79
- resolution = _ref.resolution,
80
- deviceOpts = _ref.deviceOpts;
81
-
82
- _classCallCheck(this, TurnWebRTCSession);
83
-
84
- _this = _super.call(this);
85
- tracer.trace('Constructor');
86
- _this._credentials = credentials;
87
- _this._isMobile = isMobile;
88
- _this._resolution = resolution;
89
- _this._deviceOpts = deviceOpts;
90
- _this._incomingIce = [];
91
- _this._localStreamFactory = localStreamFactory;
92
- var iceServers = credentials.ice.map(function (item) {
93
- return {
94
- urls: item.url,
95
- username: item.login,
96
- credential: item.password
97
- };
98
- });
99
- _this._configuration = {
100
- iceServers: iceServers,
101
- iceTransportPolicy: 'relay'
102
- };
103
- /**
104
- * Socket.io connection to the signaling server
105
- *
106
- * @private
107
- * @member { Object }
108
- */
109
-
110
- _this._socket = null;
111
- /**
112
- * RTCPeerConnection to the media server.
113
- *
114
- * For now kurento-utils is used for connection establishment.
115
- *
116
- * @private
117
- * @member { Object }
118
- */
119
-
120
- _this._pcs = {};
121
- return _this;
122
- }
123
- /**
124
- * Id of the session.
125
- *
126
- * @member { String }
127
- *
128
- * @type { String }
129
- */
130
-
131
-
132
- _createClass(TurnWebRTCSession, [{
133
- key: "id",
134
- get: function get() {
135
- return this._credentials.sessionId;
136
- }
137
- /**
138
- *
139
- * @member { String }
140
- *
141
- * @type { String }
142
- */
143
-
144
- }, {
145
- key: "_connectSocket",
146
- value: function _connectSocket(url) {
147
- var _this2 = this;
148
-
149
- return new Promise(function (resolve, reject) {
150
- tracer.trace('Connect socket');
151
- var socket = io.connect(url, {
152
- 'forceNew': true,
153
- 'reconnectionDelay': _constants.SOCKET_RECONNECTION_DELAY,
154
- 'reconnectionDelayMax': _constants.SOCKET_RECONNECTION_DELAY_MAX,
155
- 'reconnectionAttempts': _constants.SOCKET_RECONNECTION_ATTEMPTS,
156
- 'path': _constants.SOCKET_PATH
157
- });
158
-
159
- var done = _.once(function (err) {
160
- tracer.trace(err ? 'Error' : 'Connected', err);
161
- err ? reject(err) : resolve();
162
- }); //
163
- // When connection is established
164
- //
165
-
166
-
167
- socket.once('connect', function () {
168
- return done();
169
- }); //
170
- // errorOccured is ts-media-client signal
171
- //
172
-
173
- socket.on(_constants.SOCKET_EVENTS.INCOMING.ERROR, done); //
174
- // And these 2 are socket.io connection failed events
175
- //
176
-
177
- socket.on('connect_error', done);
178
- socket.on('connect_timeout', done);
179
- socket.on(_constants.SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, function (_ref2) {
180
- var sdpAnswer = _ref2.sdpAnswer,
181
- uid = _ref2.uid,
182
- peerId = _ref2.peerId;
183
- tracer.trace('SOCKET_EVENTS.INCOMING.JOIN_RESPONSE');
184
- var pc = _this2._pcs[peerId];
185
-
186
- if (!pc) {
187
- tracer.trace('No peer found');
188
- var error = "pc not found. peer=".concat(peerId, " uid=").concat(uid);
189
-
190
- _this2.emit(_session.EVENTS.EXCEPTION, {
191
- source: 'JOIN_RESPONSE',
192
- error: error
193
- });
194
-
195
- return done(error);
196
- }
197
-
198
- pc.processAnswer(sdpAnswer, function (error) {
199
- if (error) {
200
- _this2.emit(_session.EVENTS.EXCEPTION, {
201
- source: 'processAnswer',
202
- error: error
203
- });
204
-
205
- return done(error);
206
- }
207
-
208
- tracer.trace('ANSWER PROCESSED'); // FIXME why don't we have _incomingIce per PC? current assumes we don't have parallel connections, not good
209
-
210
- _.forEach(_this2._incomingIce, function (candidate) {
211
- pc.addIceCandidate(candidate, function (error) {
212
- tracer.trace('ICE ADDED AFTER ANSWER');
213
-
214
- if (error) {
215
- _this2.emit(_session.EVENTS.EXCEPTION, {
216
- source: 'JOIN_RESPONSE addIceCandidate',
217
- error: error
218
- });
219
- }
220
- });
221
- });
222
-
223
- _this2._incomingIce.length = 0;
224
- });
225
-
226
- _this2.emit(_session.EVENTS.CONNECTED);
227
-
228
- _this2.publish(_this2.publisher)["catch"](function (error) {
229
- _this2.emit(_session.EVENTS.EXCEPTION, {
230
- source: 'publish',
231
- error: error
232
- });
233
- });
234
- });
235
- socket.on(_constants.SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, function (_ref3) {
236
- var candidate = _ref3.candidate,
237
- peerId = _ref3.peerId;
238
- tracer.trace('SOCKET_EVENTS.INCOMING.ICE_CANDIDATE');
239
- var pc = _this2._pcs[peerId];
240
-
241
- if (!pc) {
242
- tracer.trace('NO PEER FOUND ADD TO ICE QUEUE');
243
-
244
- _this2._incomingIce.push(candidate);
245
-
246
- return;
247
- }
248
-
249
- pc.addIceCandidate(candidate, function (error) {
250
- tracer.trace('ICE ADDED AFTER INCOMING');
251
-
252
- if (error) {
253
- _this2.emit(_session.EVENTS.EXCEPTION, {
254
- source: 'ICE_CANDIDATE addIceCandidate',
255
- error: error
256
- });
257
- }
258
- });
259
- }); // Received by publisher, causing him to emit SDP_OFFER
260
-
261
- socket.on(_constants.SOCKET_EVENTS.INCOMING.SEND_OFFER, function (_ref4) {
262
- var uid = _ref4.uid,
263
- peerId = _ref4.peerId;
264
- tracer.trace('SOCKET_EVENTS.INCOMING.SEND_OFFER');
265
-
266
- _this2._createRTCPeerConnection(peerId).then(function (pc) {
267
- tracer.trace('GENERATING OFFER');
268
- pc.generateOffer(function (error, offer) {
269
- tracer.trace('OFFER GENERATED');
270
-
271
- if (error) {
272
- return done(error);
273
- }
274
-
275
- socket.emit(_constants.SOCKET_EVENTS.OUTGOING.SDP_OFFER, {
276
- uid: uid,
277
- peerId: peerId,
278
- sessionId: _this2._credentials.sessionId,
279
- sdpOffer: offer
280
- });
281
- });
282
- })["catch"](function (error) {
283
- _this2.emit(_session.EVENTS.EXCEPTION, {
284
- source: '_createRTCPeerConnection',
285
- error: error
286
- });
287
-
288
- if (error && error.name) {
289
- _this2.lastError = error.name;
290
- }
291
- });
292
- }); // Received by subscriber, causing him to emit SDP_ANSWER
293
-
294
- socket.on(_constants.SOCKET_EVENTS.INCOMING.SDP_OFFER, function (_ref5) {
295
- var sdpOffer = _ref5.sdpOffer,
296
- peerId = _ref5.peerId,
297
- uid = _ref5.uid;
298
- tracer.trace('SOCKET_EVENTS.INCOMING.SDP_OFFER');
299
- Promise.resolve().then(function () {
300
- var pc = _this2._pcs[peerId];
301
-
302
- if (pc) {
303
- tracer.trace('PEER ALREADY EXISTS');
304
- return pc;
305
- }
306
-
307
- return _this2._createRTCPeerConnection(peerId);
308
- }).then(function (pc) {
309
- tracer.trace('PROCESS OFFER');
310
- pc.processOffer(sdpOffer, function (error, sdpAnswer) {
311
- tracer.trace('OFFER PROCESSED');
312
-
313
- if (error) {
314
- return done(error);
315
- }
316
-
317
- socket.emit(_constants.SOCKET_EVENTS.OUTGOING.SDP_ANSWER, {
318
- uid: uid,
319
- peerId: peerId,
320
- sessionId: _this2._credentials.sessionId,
321
- sdpAnswer: sdpAnswer
322
- });
323
- });
324
- })["catch"](function (error) {
325
- _this2.emit(_session.EVENTS.EXCEPTION, {
326
- source: 'response on INCOMING.SDP_OFFER',
327
- error: error
328
- });
329
-
330
- if (error && error.name) {
331
- _this2.lastError = error.name;
332
- }
333
- });
334
- }); // Received by subscriber after a publisher reconnects to room
335
-
336
- socket.on(_constants.SOCKET_EVENTS.INCOMING.PUBLISHER_RECONNECT, function () {
337
- tracer.trace('SOCKET_EVENTS.INCOMING.PUBLISHER_RECONNECT'); // Clean up and reconnect with a new peer-connection,
338
- // to prevent reconnection issues
339
-
340
- _this2._streams.clear();
341
-
342
- socket.off();
343
-
344
- _.forEach(_this2._pcs, function (_ref6) {
345
- var peerConnection = _ref6.peerConnection;
346
- tracer.trace('CLOSING PEER');
347
- peerConnection.close();
348
- });
349
-
350
- _this2._pcs = {};
351
-
352
- _this2.emit(_session.EVENTS.RECONNECT_TURN_SERVER);
353
- }); // Received by publisher after a subscriber's socket has been disconnected
354
-
355
- socket.on(_constants.SOCKET_EVENTS.INCOMING.PEER_DISCONNECTED, function () {
356
- var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
357
- peerId = _ref7.peerId;
358
-
359
- tracer.trace('SOCKET_EVENTS.INCOMING.PEER_DISCONNECTED');
360
-
361
- if (peerId && _this2._pcs[peerId]) {
362
- if (_this2._lastPc === _this2._pcs[peerId]) {
363
- _this2._lastPc = null;
364
- }
365
-
366
- if (Object.getOwnPropertyNames(_this2._pcs).length === 1) {
367
- _this2._toggleAllStreams(false);
368
- }
369
-
370
- _this2._pcs[peerId].peerConnection.close();
371
-
372
- delete _this2._pcs[peerId];
373
- }
374
- });
375
- _this2._socket = socket;
376
- });
377
- }
378
- }, {
379
- key: "_setupConnection",
380
- value: function _setupConnection(pc) {
381
- var _this3 = this;
382
-
383
- return new Promise(function (resolve) {
384
- tracer.trace('_setupConnection');
385
-
386
- pc.peerConnection.oniceconnectionstatechange = function (e) {
387
- tracer.trace('oniceconnectionstatechange', e);
388
-
389
- if (_this3.iceCheckingTimeout) {
390
- clearTimeout(_this3.iceCheckingTimeout);
391
- _this3.iceCheckingTimeout = null;
392
- }
393
-
394
- if (e.target.iceConnectionState === 'failed') {
395
- // if this is one of many in the publisher, skip
396
- // already attempting a reconnect
397
- if (_this3._turnServerReconnectInterval) {
398
- return;
399
- }
400
-
401
- _this3._turnServerReconnectInterval = setInterval(function () {
402
- if (!navigator.onLine) {
403
- return;
404
- }
405
-
406
- clearInterval(_this3._turnServerReconnectInterval);
407
- _this3._turnServerReconnectInterval = null;
408
-
409
- if (!_this3._socket.connected) {
410
- _this3.disconnected = false;
411
-
412
- _this3._socket.connect();
413
- }
414
-
415
- _this3.emit(_session.EVENTS.RECONNECT_TURN_SERVER);
416
- }, _constants.RECONNECT_TURN_SERVER_INTERVAL);
417
- } else if (e.target.iceConnectionState === 'checking') {
418
- _this3.iceCheckingTimeout = setTimeout(function () {
419
- _this3.emit(_session.EVENTS.TURN_SERVER_CONNECTION_FAILED);
420
- }, _constants.FAILED_CONNECTING_TURN_SERVER_INTERVAL);
421
- }
422
- };
423
-
424
- pc.peerConnection.onremovestream = function (_ref8) {
425
- var stream = _ref8.stream;
426
- tracer.trace('onremovestream');
427
-
428
- _this3._streams["delete"](stream.id);
429
- };
430
-
431
- resolve();
432
- });
433
- }
434
- }, {
435
- key: "_getPeerType",
436
- value: function _getPeerType(constraints, isMobile) {
437
- if (isMobile || constraints.audio) {
438
- return _constants.PEER_CONNECTION_TYPES.SEND_RECV;
439
- }
440
-
441
- return _constants.PEER_CONNECTION_TYPES.RECV_ONLY;
442
- }
443
- }, {
444
- key: "_connectRTCPeer",
445
- value: function _connectRTCPeer(_ref9) {
446
- var _this4 = this;
447
-
448
- var constraints = _ref9.constraints,
449
- configuration = _ref9.configuration,
450
- sessionId = _ref9.sessionId,
451
- isMobile = _ref9.isMobile,
452
- peerId = _ref9.peerId;
453
- return new Promise(function (resolve, reject) {
454
- tracer.trace('_connectRTCPeer');
455
-
456
- var done = _.once(function (err, pc) {
457
- tracer.trace(err ? 'Error' : 'Peer Connected', err);
458
- err ? reject(err) : resolve(pc);
459
- });
460
-
461
- var setupWebRtcPeer = function setupWebRtcPeer(stream) {
462
- tracer.trace('setupWebRtcPeer');
463
-
464
- var peerConnectionType = _this4._getPeerType(constraints, isMobile);
465
-
466
- var peerConfig = {
467
- configuration: configuration,
468
- videoStream: isMobile ? stream : undefined,
469
- mediaConstraints: constraints,
470
- onicecandidate: function onicecandidate(candidate) {
471
- tracer.trace('onicecandidate', candidate);
472
-
473
- _this4._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {
474
- sessionId: sessionId,
475
- peerId: peerId,
476
- candidate: candidate,
477
- clientType: isMobile ? _constants.CLIENT_TYPES.PUBLISHER : _constants.CLIENT_TYPES.SUBSCRIBER
478
- });
479
- }
480
- };
481
- var pc = WebRtcPeer[peerConnectionType](peerConfig, function (error) {
482
- if (error) {
483
- return done(error);
484
- }
485
-
486
- _this4._setupConnection(pc).then(function () {
487
- return done(null, pc);
488
- })["catch"](done);
489
- });
490
- _this4._pcs[peerId] = pc;
491
- _this4._lastPc = pc;
492
- };
493
-
494
- _this4._localStreamFactory(constraints).then(function (localStream) {
495
- setupWebRtcPeer(localStream);
496
- })["catch"](function () {
497
- setupWebRtcPeer(undefined);
498
- });
499
- });
500
- }
501
- }, {
502
- key: "_setTrackStateTo",
503
- value: function _setTrackStateTo(state) {
504
- tracer.trace('_setTrackStateTo');
505
- return function (track) {
506
- if (track.setEnabled) {
507
- track.setEnabled(state);
508
- } else {
509
- track.enabled = state;
510
- }
511
- };
512
- }
513
- /**
514
- * Establish socket and peer connection to the media server.
515
- *
516
- * @method
517
- * @returns { Promise }
518
- *
519
- * @fires SESSION_EVENTS#CONNECTED
520
- */
521
-
522
- }, {
523
- key: "connect",
524
- value: function connect() {
525
- var _this5 = this;
526
-
527
- tracer.trace('connect');
528
- return this._connectSocket(this._credentials.url).then(function () {
529
- tracer.trace('Socket connected getting constraints');
530
- return (0, _helper.getMediaConstraints)({
531
- resolution: _this5._resolution,
532
- deviceOpts: _this5._deviceOpts
533
- });
534
- }).then(function (constraints) {
535
- tracer.trace('connect - constraints', constraints); // streaming from dashboard is not supported and we
536
- // don't want to access the camera without a reason
537
-
538
- if (!_this5._isMobile && constraints.video) {
539
- tracer.trace('connect - deleting video for non mobile');
540
- delete constraints.video;
541
- }
542
-
543
- _this5._constraints = constraints;
544
- var clientType = _this5._isMobile ? _constants.CLIENT_TYPES.PUBLISHER : _constants.CLIENT_TYPES.SUBSCRIBER;
545
- tracer.trace('connect - emitting joinRoom', {
546
- clientType: clientType,
547
- sessionId: _this5._credentials.sessionId
548
- });
549
-
550
- _this5._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.JOIN_ROOM, {
551
- clientType: clientType,
552
- sessionId: _this5._credentials.sessionId
553
- });
554
- })["catch"](function (error) {
555
- tracer.trace('connect error', error);
556
-
557
- _this5.emit(_session.EVENTS.EXCEPTION, {
558
- source: 'connect',
559
- error: error
560
- });
561
-
562
- throw error;
563
- });
564
- }
565
- }, {
566
- key: "_createRTCPeerConnection",
567
- value: function _createRTCPeerConnection(peerId) {
568
- var _this6 = this;
569
-
570
- tracer.trace('_createRTCPeerConnection');
571
- return this._connectRTCPeer({
572
- constraints: this._constraints,
573
- configuration: this._configuration,
574
- sessionId: this._credentials.sessionId,
575
- isMobile: this._isMobile,
576
- peerId: peerId
577
- }).then(function (pc) {
578
- tracer.trace('peer connection created');
579
-
580
- if (_this6._isMobile) {
581
- pc.peerConnection.getLocalStreams().forEach(function (stream) {
582
- if (!_this6.publisher) {
583
- stream.getTracks().forEach(_this6._setTrackStateTo(false));
584
- }
585
- });
586
- }
587
-
588
- pc.peerConnection.onaddstream = function (_ref10) {
589
- var stream = _ref10.stream;
590
- tracer.trace('peer connection onaddstream', stream);
591
- var tsStream = new _stream.TsWebRTCStream(_this6, stream);
592
-
593
- _this6.emit(_session.EVENTS.STREAM_CREATED, tsStream);
594
- };
595
-
596
- return pc;
597
- });
598
- }
599
- }, {
600
- key: "_toggleAllStreams",
601
- value: function _toggleAllStreams(state) {
602
- var _this7 = this;
603
-
604
- if (this._isMobile) {
605
- _.forEach(this._pcs, function (pc) {
606
- pc.peerConnection.getLocalStreams().forEach(function (stream) {
607
- stream.getTracks().forEach(_this7._setTrackStateTo(state));
608
- });
609
- });
610
- }
611
- }
612
- }, {
613
- key: "_stopStream",
614
- value: function _stopStream(pc) {
615
- if (this._isMobile) {
616
- pc.peerConnection.getLocalStreams().forEach(function (stream) {
617
- stream.getTracks().forEach(function (track) {
618
- return track.stop();
619
- });
620
- });
621
- }
622
- }
623
- }, {
624
- key: "_stopAllStreams",
625
- value: function _stopAllStreams() {
626
- var _this8 = this;
627
-
628
- _.forEach(this._pcs, function (pc) {
629
- return _this8._stopStream(pc);
630
- });
631
- }
632
- /**
633
- * Close all media streams, disconnect RTCPeerConnection and socket.io
634
- *
635
- * @method
636
- * @returns { Promise }
637
- *
638
- * @fires SESSION_EVENTS#DISCONNECTED
639
- */
640
-
641
- }, {
642
- key: "disconnect",
643
- value: function disconnect() {
644
- var _this9 = this;
645
-
646
- tracer.trace('disconnect');
647
- return Promise.resolve().then(function () {
648
- if (_this9.destroyed) {
649
- return null;
650
- }
651
-
652
- _this9._stopAllStreams();
653
-
654
- _.forEach(_this9._pcs, function (_ref11) {
655
- var peerConnection = _ref11.peerConnection;
656
- return peerConnection.close();
657
- });
658
-
659
- _this9._pcs = {};
660
-
661
- _this9._socket.disconnect();
662
-
663
- var event = {
664
- reason: 'disconnected'
665
- };
666
-
667
- _this9.emit(_session.EVENTS.DISCONNECTED, event);
668
-
669
- return event;
670
- });
671
- }
672
- }, {
673
- key: "_waitForPublishingApproval",
674
- value: function _waitForPublishingApproval(caller, cb) {
675
- tracer.trace('_waitForPublishingApproval');
676
-
677
- try {
678
- var pc = _.get(caller, '_lastPc.peerConnection');
679
-
680
- if (!pc) {
681
- throw new Error('No peer connection for publishing');
682
- } //
683
- // Get media streams that were created on session initialization
684
- //
685
-
686
-
687
- var mediaStream = pc.getLocalStreams()[0];
688
-
689
- if (mediaStream) {
690
- return cb(null, mediaStream);
691
- }
692
-
693
- if (caller.lastError === 'NotAllowedError') {
694
- return cb({
695
- code: 1500,
696
- name: 'NotAllowedError'
697
- });
698
- } else if (caller.lastError === 'PermissionDismissedError') {
699
- return cb({
700
- code: 8,
701
- name: 'PermissionDismissedError'
702
- });
703
- }
704
-
705
- setTimeout(caller._waitForPublishingApproval, _constants.PUBLISH_APPROVAL_CHECK_INTERVAL, caller, cb);
706
- } catch (err) {
707
- return cb(err);
708
- }
709
- }
710
- /**
711
- * Create new TsMediaPublisher instance
712
- *
713
- * @method
714
- *
715
- * @param { DOMElement } [target] Video element
716
- * that will be used to render publishing video stream
717
- * @param { Object } params
718
- * @param { String } [params.videoDevice] Video device id
719
- * @param { String } [params.videoParams] Video device id
720
- * @param { String } [params.videoParams.fitMode] Video fit mode
721
- * @param { Number|String } [params.videoParams.width] Video element width
722
- * @param { Number|String } [params.videoParams.height] Video element height
723
- * @param { String } [params.audioDevice] Video device id
724
- *
725
- * @returns { Promise<TsMediaPublisher> } publisher
726
- *
727
- * @see TsMediaPublisher
728
- */
729
-
730
- }, {
731
- key: "createPublisher",
732
- value: function createPublisher(target, params) {
733
- var _this10 = this;
734
-
735
- if (!params) {
736
- params = target;
737
- target = null;
738
- }
739
-
740
- tracer.trace('createPublisher');
741
- return (this._lastPc ? Promise.resolve() : Promise.delay(_constants.WAIT_FOR_PC_INTERVAL)).then(function () {
742
- return new Promise(function (resolve, reject) {
743
- _this10._waitForPublishingApproval(_this10, function (err, mediaStream) {
744
- if (err) {
745
- return reject(err);
746
- }
747
-
748
- return resolve(mediaStream);
749
- });
750
- });
751
- }).then(function (mediaStream) {
752
- //
753
- // Get tracks that are related to the publisher (audio or video)
754
- //
755
- var tracks = _this10._lastPc.peerConnection.getLocalStreams().reduce(function (result, mediaStream) {
756
- mediaStream.getTracks().filter(function (track) {
757
- return track.kind === 'video' && params.videoDevice || track.kind === 'audio' && params.audioDevice;
758
- }).forEach(function (track) {
759
- return result.push(track);
760
- });
761
- return result;
762
- }, []);
763
-
764
- var tsstream = new _stream.TsWebRTCStream(_this10, mediaStream, params.name);
765
- tsstream.remote = false;
766
- var publisher = new _publisher.TsMediaPublisher(_this10, {
767
- stream: tsstream,
768
- tracks: tracks,
769
- videoParams: params.videoParams,
770
- videoHeight: tsstream.videoDimensions.height,
771
- videoWidth: tsstream.videoDimensions.width,
772
- _target: target
773
- });
774
- tsstream.publisher = publisher;
775
- _this10.publisher = publisher;
776
- return publisher;
777
- });
778
- }
779
- /**
780
- * Publish stream from previously create TsMediaPublisher instance.
781
- *
782
- * Used internally by TsMediaPublisher.publish
783
- *
784
- * @method
785
- *
786
- * @param { TsMediaPublisher } publisher
787
- *
788
- * @returns { Promise }
789
- *
790
- * @fires PUBLISHER_EVENTS#STREAM_CREATED
791
- * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED
792
- * @fires STREAM_EVENTS#PROPERTY_CHANGED
793
- *
794
- * @see TsMediaPublisher#publish
795
- */
796
-
797
- }, {
798
- key: "publish",
799
- value: function publish(publisher) {
800
- var _this11 = this;
801
-
802
- tracer.trace('publish');
803
- return Promise.resolve().then(function () {
804
- if (!publisher) {
805
- return;
806
- }
807
-
808
- publisher.emit(_publisher.EVENTS.STREAM_CREATED, publisher.stream);
809
-
810
- _this11.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
811
- stream: publisher.stream,
812
- property: 'hasVideo',
813
- value: publisher.stream.hasVideo
814
- });
815
-
816
- _this11.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
817
- stream: publisher.stream,
818
- property: 'hasAudio',
819
- value: publisher.stream.hasAudio
820
- });
821
-
822
- if (_this11.publisher._element) {
823
- return;
824
- }
825
-
826
- if (publisher._target) {
827
- //
828
- // New video element where publishing video stream will be rendered
829
- //
830
- var video = document.createElement('video'); //Currently this code is used only in mobile, so when publishing, then we always need only video track
831
- //to set to video element. Otherwise, when VOIP enabled, technician side will hear himself through this video element.
832
-
833
- var videoTracks = publisher.stream._mediaStream.getVideoTracks();
834
-
835
- if (!isIE11) {
836
- video.srcObject = new MediaStream(videoTracks);
837
- }
838
-
839
- video.playsInline = true;
840
- video.autoplay = true;
841
-
842
- if (_this11._isMobile) {
843
- video.muted = true;
844
- }
845
-
846
- if (isIE11) {
847
- publisher._target.appendChild(video);
848
-
849
- publisher._element = attachMediaStream(video, publisher.stream._mediaStream);
850
- }
851
-
852
- var params = _.assign({}, {
853
- fitMode: 'contain',
854
- insertMode: 'append',
855
- mirror: false,
856
- resolution: '480x640',
857
- width: '100%',
858
- height: '100%'
859
- }, publisher.videoParams);
860
-
861
- var elementHeight = typeof params.height === 'string' ? params.height : params.height + 'px';
862
- var elementWidth = typeof params.width === 'string' ? params.width : params.width + 'px';
863
-
864
- _.assign((isIE11 ? publisher._element : video).style, {
865
- height: elementHeight,
866
- width: elementWidth,
867
- position: 'relative',
868
- 'object-fit': params.fitMode
869
- });
870
-
871
- if (!isIE11) {
872
- publisher._target.appendChild(video);
873
-
874
- publisher._element = video;
875
- }
876
-
877
- publisher.stream.setupDimensionsListener(video);
878
- } //
879
- // Enable (unpause) all media tracks related to publisher.
880
- // They are sending data to the server from this moment.
881
- //
882
-
883
-
884
- _this11._toggleAllStreams(true);
885
- });
886
- }
887
- /**
888
- * Unpublish stream and destroy publisher's view.
889
- *
890
- * Used internally by TsMediaPublisher.destroy
891
- *
892
- * @method
893
- *
894
- * @param { TsMediaPublisher } publisher
895
- *
896
- * @returns { Promise }
897
- *
898
- * @fires PUBLISHER_EVENTS#DESTROYED
899
- *
900
- * @see TsMediaPublisher#destroy
901
- */
902
-
903
- }, {
904
- key: "destroyPublisher",
905
- value: function destroyPublisher(publisher) {
906
- var _this12 = this;
907
-
908
- tracer.trace('destroyPublisher');
909
- return new Promise(function (resolve) {
910
- _this12._toggleAllStreams(false);
911
-
912
- if (publisher._element) {
913
- publisher._element.remove();
914
- }
915
-
916
- _this12.publisher = null;
917
- publisher.emit(_publisher.EVENTS.DESTROYED);
918
- return resolve();
919
- });
920
- }
921
- }]);
922
-
923
- return TurnWebRTCSession;
924
- }(_session.TsMediaSession);
925
-
926
- exports.TurnWebRTCSession = TurnWebRTCSession;
927
- //# sourceMappingURL=session-turn.js.map