@techsee/techsee-media-service 10.0.0 → 12.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 (109) hide show
  1. package/lib/MultiParty/DetectWebRtcService.d.ts +16 -14
  2. package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -1
  3. package/lib/MultiParty/DetectWebRtcService.js +221 -44
  4. package/lib/MultiParty/DetectWebRtcService.js.map +1 -1
  5. package/lib/MultiParty/MediaCapabilitiesService.d.ts +6 -12
  6. package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -1
  7. package/lib/MultiParty/MediaCapabilitiesService.js +58 -119
  8. package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -1
  9. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -1
  10. package/lib/MultiParty/MediaCapabilitiesUtils.js +2 -2
  11. package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -1
  12. package/lib/MultiParty/MediaTracer.d.ts +3 -0
  13. package/lib/MultiParty/MediaTracer.d.ts.map +1 -0
  14. package/lib/MultiParty/MediaTracer.js +17 -0
  15. package/lib/MultiParty/MediaTracer.js.map +1 -0
  16. package/lib/MultiParty/MultiPartyService.d.ts +2 -2
  17. package/lib/MultiParty/MultiPartyService.d.ts.map +1 -1
  18. package/lib/MultiParty/MultiPartyServiceFactory.d.ts +1 -1
  19. package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -1
  20. package/lib/MultiParty/MultiPartyServiceFactory.js +2 -2
  21. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -1
  22. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts +1 -1
  23. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts.map +1 -1
  24. package/lib/MultiParty/MultipartyServiceEventTypes.js +13 -13
  25. package/lib/MultiParty/MultipartyServiceEventTypes.js.map +1 -1
  26. package/lib/MultiParty/index.d.ts +2 -0
  27. package/lib/MultiParty/index.d.ts.map +1 -1
  28. package/lib/MultiParty/index.js +4 -0
  29. package/lib/MultiParty/index.js.map +1 -1
  30. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts +6 -18
  31. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts.map +1 -1
  32. package/lib/MultiParty/opentok/OpentokMultiPartyService.js +72 -77
  33. package/lib/MultiParty/opentok/OpentokMultiPartyService.js.map +1 -1
  34. package/lib/MultiParty/opentok/OpentokPublisher.d.ts +14 -4
  35. package/lib/MultiParty/opentok/OpentokPublisher.d.ts.map +1 -1
  36. package/lib/MultiParty/opentok/OpentokPublisher.js +49 -84
  37. package/lib/MultiParty/opentok/OpentokPublisher.js.map +1 -1
  38. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts +18 -0
  39. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts.map +1 -0
  40. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js +66 -0
  41. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js.map +1 -0
  42. package/lib/MultiParty/opentok/trace.d.ts.map +1 -1
  43. package/lib/MultiParty/opentok/trace.js +2 -2
  44. package/lib/MultiParty/opentok/trace.js.map +1 -1
  45. package/lib/MultiParty/{Contracts.d.ts → types.d.ts} +8 -1
  46. package/lib/MultiParty/types.d.ts.map +1 -0
  47. package/lib/MultiParty/{Contracts.js → types.js} +1 -1
  48. package/lib/MultiParty/types.js.map +1 -0
  49. package/lib/MultiParty/utils.d.ts +3 -0
  50. package/lib/MultiParty/utils.d.ts.map +1 -0
  51. package/lib/MultiParty/utils.js +21 -0
  52. package/lib/MultiParty/utils.js.map +1 -0
  53. package/package.json +7 -5
  54. package/lib/MultiParty/Contracts.d.ts.map +0 -1
  55. package/lib/MultiParty/Contracts.js.map +0 -1
  56. package/lib/MultiParty/opentok/OpentokUtils.d.ts +0 -2
  57. package/lib/MultiParty/opentok/OpentokUtils.d.ts.map +0 -1
  58. package/lib/MultiParty/opentok/OpentokUtils.js +0 -17
  59. package/lib/MultiParty/opentok/OpentokUtils.js.map +0 -1
  60. package/lib/oldCode/constants.js +0 -25
  61. package/lib/oldCode/constants.js.map +0 -1
  62. package/lib/oldCode/event-emitter.js +0 -62
  63. package/lib/oldCode/event-emitter.js.map +0 -1
  64. package/lib/oldCode/index.js +0 -60
  65. package/lib/oldCode/index.js.map +0 -1
  66. package/lib/oldCode/opentok/session.js +0 -335
  67. package/lib/oldCode/opentok/session.js.map +0 -1
  68. package/lib/oldCode/opentok/stream.js +0 -324
  69. package/lib/oldCode/opentok/stream.js.map +0 -1
  70. package/lib/oldCode/publisher.js +0 -168
  71. package/lib/oldCode/publisher.js.map +0 -1
  72. package/lib/oldCode/service.js +0 -417
  73. package/lib/oldCode/service.js.map +0 -1
  74. package/lib/oldCode/session.js +0 -132
  75. package/lib/oldCode/session.js.map +0 -1
  76. package/lib/oldCode/stream.js +0 -223
  77. package/lib/oldCode/stream.js.map +0 -1
  78. package/lib/oldCode/subscriber.js +0 -115
  79. package/lib/oldCode/subscriber.js.map +0 -1
  80. package/lib/oldCode/tracer.d.ts +0 -36
  81. package/lib/oldCode/tracer.d.ts.map +0 -1
  82. package/lib/oldCode/tracer.js +0 -202
  83. package/lib/oldCode/tracer.js.map +0 -1
  84. package/lib/oldCode/utils/ImageFixer.d.ts +0 -1
  85. package/lib/oldCode/utils/ImageFixer.d.ts.map +0 -1
  86. package/lib/oldCode/utils/ImageFixer.js +0 -83
  87. package/lib/oldCode/utils/ImageFixer.js.map +0 -1
  88. package/lib/oldCode/webrtc/constants.js +0 -106
  89. package/lib/oldCode/webrtc/constants.js.map +0 -1
  90. package/lib/oldCode/webrtc/helper.js +0 -225
  91. package/lib/oldCode/webrtc/helper.js.map +0 -1
  92. package/lib/oldCode/webrtc/session-kms.js +0 -573
  93. package/lib/oldCode/webrtc/session-kms.js.map +0 -1
  94. package/lib/oldCode/webrtc/session-loopback.js +0 -354
  95. package/lib/oldCode/webrtc/session-loopback.js.map +0 -1
  96. package/lib/oldCode/webrtc/session-turn.js +0 -927
  97. package/lib/oldCode/webrtc/session-turn.js.map +0 -1
  98. package/lib/oldCode/webrtc/session-turn.v2.js +0 -592
  99. package/lib/oldCode/webrtc/session-turn.v2.js.map +0 -1
  100. package/lib/oldCode/webrtc/session.js +0 -58
  101. package/lib/oldCode/webrtc/session.js.map +0 -1
  102. package/lib/oldCode/webrtc/stream.js +0 -696
  103. package/lib/oldCode/webrtc/stream.js.map +0 -1
  104. package/lib/oldCode/webrtc/temasys/adapter-loader.js +0 -11
  105. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +0 -1
  106. package/lib/oldCode/webrtc/temasys/adapter.js +0 -5933
  107. package/lib/oldCode/webrtc/temasys/adapter.js.map +0 -1
  108. package/lib/oldCode/webrtc/webrtc-ie-shim.js +0 -3437
  109. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +0 -1
@@ -1,573 +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.KMSWebRTCSession = 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 _jsCookie = _interopRequireDefault(require("js-cookie"));
19
-
20
- var _tsEnvironmentDetect = require("@techsee/techsee-common/lib/helpers/ts-environment-detect");
21
-
22
- var _constants = require("./constants");
23
-
24
- var _helper = require("./helper");
25
-
26
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
27
-
28
- 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); }
29
-
30
- 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; }
31
-
32
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
33
-
34
- 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); } }
35
-
36
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
37
-
38
- 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); }
39
-
40
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
41
-
42
- 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); }; }
43
-
44
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
45
-
46
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
47
-
48
- 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; } }
49
-
50
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
51
-
52
- var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
53
-
54
- var _require = require('kurento-utils'),
55
- WebRtcPeer = _require.WebRtcPeer;
56
-
57
- /**
58
- * WebRTC-specific implementation of TsMediaSession.
59
- *
60
- * Instance of this class is returned by TsMediaService.initSession call
61
- * with 'MEDIA_SERVER' as desired mediaType.
62
- *
63
- * @class
64
- * @extends TsMediaSession
65
- *
66
- * @see TsMediaSession
67
- */
68
- var KMSWebRTCSession = /*#__PURE__*/function (_TsMediaSession) {
69
- _inherits(KMSWebRTCSession, _TsMediaSession);
70
-
71
- var _super = _createSuper(KMSWebRTCSession);
72
-
73
- function KMSWebRTCSession(_ref) {
74
- var _this;
75
-
76
- var credentials = _ref.credentials,
77
- isMobile = _ref.isMobile,
78
- resolution = _ref.resolution,
79
- deviceOpts = _ref.deviceOpts;
80
-
81
- _classCallCheck(this, KMSWebRTCSession);
82
-
83
- _this = _super.call(this);
84
- _this._credentials = credentials;
85
- _this._isMobile = isMobile;
86
- _this._resolution = resolution;
87
- _this._deviceOpts = deviceOpts;
88
- var iceServers = credentials.ice.map(function (item) {
89
- return {
90
- urls: item.url,
91
- username: item.login,
92
- credential: item.password
93
- };
94
- });
95
- _this._configuration = {
96
- iceServers: iceServers,
97
- iceTransportPolicy: 'relay'
98
- };
99
- /**
100
- * Socket.io connection to the signaling server
101
- *
102
- * @private
103
- * @member { Object }
104
- */
105
-
106
- _this._socket = null;
107
- /**
108
- * RTCPeerConnection to the media server.
109
- *
110
- * For now kurento-utils is used for connection establishment.
111
- *
112
- * @private
113
- * @member { Object }
114
- */
115
-
116
- _this._pc = null;
117
- return _this;
118
- }
119
- /**
120
- * Id of the session.
121
- *
122
- * @member { String }
123
- *
124
- * @type { String }
125
- */
126
-
127
-
128
- _createClass(KMSWebRTCSession, [{
129
- key: "id",
130
- get: function get() {
131
- return this._credentials.sessionId;
132
- }
133
- /**
134
- * PipelineType of the session.
135
- *
136
- * @member { String }
137
- *
138
- * @type { String }
139
- */
140
-
141
- }, {
142
- key: "pipelineType",
143
- get: function get() {
144
- return this._credentials.pipelineType || _constants.PIPELINE_TYPES.AUDIO_VIDEO_TO_SUBSCRIBERS;
145
- }
146
- }, {
147
- key: "_connectSocket",
148
- value: function _connectSocket(url) {
149
- var _this2 = this;
150
-
151
- return new Promise(function (resolve, reject) {
152
- var socket = io.connect(url, {
153
- forceNew: true
154
- });
155
-
156
- var done = _.once(function (err) {
157
- err ? reject(err) : resolve();
158
- }); //
159
- // When connection is established
160
- //
161
-
162
-
163
- socket.once('connect', function () {
164
- return done();
165
- }); //
166
- // errorOccured is ts-media-client signal
167
- //
168
-
169
- socket.on(_constants.SOCKET_EVENTS.INCOMING.ERROR, done); //
170
- // And these 2 are socket.io connection failed events
171
- //
172
-
173
- socket.on('connect_error', done);
174
- socket.on('connect_timeout', done);
175
- _this2._socket = socket;
176
- });
177
- }
178
- }, {
179
- key: "_setupConnection",
180
- value: function _setupConnection(pc, sessionId) {
181
- var _this3 = this;
182
-
183
- var uid = _jsCookie["default"].get(_constants.COOKIES.UID);
184
-
185
- var clientType = this._isMobile ? _constants.CLIENT_TYPES.PUBLISHER : _constants.CLIENT_TYPES.SUBSCRIBER;
186
- return new Promise(function (resolve, reject) {
187
- _this3._socket.on(_constants.SOCKET_EVENTS.INCOMING.PIPELINE_DESTROYED, function () {
188
- _this3.destroyed = true;
189
-
190
- _this3._socket.off();
191
-
192
- _this3._socket.disconnect();
193
-
194
- _this3.emit(_session.EVENTS.DISCONNECTED, {
195
- reason: 'Client disconnected'
196
- });
197
- });
198
-
199
- pc.generateOffer(function (error, offer) {
200
- if (error) {
201
- return reject(error);
202
- }
203
-
204
- _this3._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.JOIN_PIPELINE, {
205
- uid: uid,
206
- sessionId: sessionId,
207
- clientType: clientType,
208
- pipelineType: _this3.pipelineType,
209
- sdpOffer: offer
210
- });
211
-
212
- resolve();
213
- });
214
- });
215
- }
216
- }, {
217
- key: "_getPeerType",
218
- value: function _getPeerType(constraints, isMobile) {
219
- if (isMobile || constraints.audio) {
220
- return _constants.PEER_CONNECTION_TYPES.SEND_RECV;
221
- }
222
-
223
- return _constants.PEER_CONNECTION_TYPES.RECV_ONLY;
224
- }
225
- }, {
226
- key: "_connectRTCPeer",
227
- value: function _connectRTCPeer(_ref2) {
228
- var _this4 = this;
229
-
230
- var constraints = _ref2.constraints,
231
- configuration = _ref2.configuration,
232
- sessionId = _ref2.sessionId,
233
- isMobile = _ref2.isMobile;
234
- return new Promise(function (resolve, reject) {
235
- var done = _.once(function (err) {
236
- err ? reject(err) : resolve();
237
- });
238
-
239
- var peerConnectionType = _this4._getPeerType(constraints, isMobile);
240
-
241
- var pc = WebRtcPeer[peerConnectionType]({
242
- configuration: configuration,
243
- mediaConstraints: constraints,
244
- onicecandidate: function onicecandidate(candidate) {
245
- _this4._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {
246
- sessionId: sessionId,
247
- candidate: candidate,
248
- clientType: isMobile ? _constants.CLIENT_TYPES.PUBLISHER : _constants.CLIENT_TYPES.SUBSCRIBER
249
- });
250
- }
251
- }, function (error) {
252
- if (error) {
253
- return done(error);
254
- }
255
-
256
- _this4._socket.on(_constants.SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, function (_ref3) {
257
- var sdpAnswer = _ref3.sdpAnswer,
258
- uid = _ref3.uid;
259
-
260
- _jsCookie["default"].set(_constants.COOKIES.UID, uid);
261
-
262
- pc.processAnswer(sdpAnswer, function (error) {
263
- if (error) {
264
- return done(error);
265
- }
266
- });
267
-
268
- _this4.emit(_session.EVENTS.CONNECTED);
269
-
270
- _this4._socket.off(_constants.SOCKET_EVENTS.INCOMING.ERROR);
271
-
272
- _this4._socket.off('connect_error');
273
-
274
- _this4._socket.off('connect_timeout');
275
-
276
- return done();
277
- });
278
-
279
- _this4._socket.on(_constants.SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, function (_ref4) {
280
- var candidate = _ref4.candidate;
281
- pc.addIceCandidate(candidate);
282
- });
283
-
284
- _this4._setupConnection(pc, sessionId).then(done)["catch"](done);
285
- });
286
- _this4._pc = pc;
287
- });
288
- }
289
- }, {
290
- key: "_setTrackStateTo",
291
- value: function _setTrackStateTo(state) {
292
- return function (track) {
293
- if (track.setEnabled) {
294
- track.setEnabled(state);
295
- } else {
296
- track.enabled = state;
297
- }
298
- };
299
- }
300
- /**
301
- * Establish socket and peer connection to the media server.
302
- *
303
- * @method
304
- * @returns { Promise }
305
- *
306
- * @fires SESSION_EVENTS#CONNECTED
307
- */
308
-
309
- }, {
310
- key: "connect",
311
- value: function connect() {
312
- var _this5 = this;
313
-
314
- return this._connectSocket(this._credentials.url).then(function () {
315
- return (0, _helper.getMediaConstraints)({
316
- resolution: _this5._resolution,
317
- deviceOpts: _this5._deviceOpts
318
- });
319
- }).then(function (constraints) {
320
- // streaming from dashboard is not supported and we
321
- // don't want to access the camera without a reason
322
- if (!_this5._isMobile && constraints.video) {
323
- delete constraints.video;
324
- }
325
-
326
- return _this5._connectRTCPeer({
327
- constraints: constraints,
328
- configuration: _this5._configuration,
329
- sessionId: _this5._credentials.sessionId,
330
- isMobile: _this5._isMobile
331
- });
332
- }).then(function () {
333
- _this5._pc.peerConnection.getLocalStreams().forEach(function (stream) {
334
- stream.getTracks().forEach(_this5._setTrackStateTo(false));
335
- });
336
-
337
- _this5._pc.peerConnection.onaddstream = function (_ref5) {
338
- var stream = _ref5.stream;
339
- var tsStream = new _stream.TsWebRTCStream(_this5, stream);
340
-
341
- _this5.emit(_session.EVENTS.STREAM_CREATED, tsStream);
342
- };
343
- });
344
- }
345
- /**
346
- * Close all media streams, disconnect RTCPeerConnection and socket.io
347
- *
348
- * @method
349
- * @returns { Promise }
350
- *
351
- * @fires SESSION_EVENTS#DISCONNECTED
352
- */
353
-
354
- }, {
355
- key: "disconnect",
356
- value: function disconnect() {
357
- var _this6 = this;
358
-
359
- return Promise.resolve().then(function () {
360
- if (_this6.destroyed) {
361
- return null;
362
- }
363
-
364
- _this6._pc.peerConnection.close();
365
-
366
- _this6._socket.emit(_constants.SOCKET_EVENTS.OUTGOING.DESTROY_PIPELINE, {
367
- sessionId: _this6._credentials.sessionId
368
- });
369
-
370
- _this6._socket.disconnect();
371
-
372
- var event = {
373
- reason: 'disconnected'
374
- };
375
-
376
- _this6.emit(_session.EVENTS.DISCONNECTED, event);
377
-
378
- return event;
379
- });
380
- }
381
- /**
382
- * Create new TsMediaPublisher instance
383
- *
384
- * @method
385
- *
386
- * @param { DOMElement } [target] Video element
387
- * that will be used to render publishing video stream
388
- * @param { Object } params
389
- * @param { String } [params.videoDevice] Video device id
390
- * @param { String } [params.videoParams] Video device id
391
- * @param { String } [params.videoParams.fitMode] Video fit mode
392
- * @param { Number|String } [params.videoParams.width] Video element width
393
- * @param { Number|String } [params.videoParams.height] Video element height
394
- * @param { String } [params.audioDevice] Video device id
395
- *
396
- * @returns { Promise<TsMediaPublisher> } publisher
397
- *
398
- * @see TsMediaPublisher
399
- */
400
-
401
- }, {
402
- key: "createPublisher",
403
- value: function createPublisher(target, params) {
404
- var _this7 = this;
405
-
406
- if (!params) {
407
- params = target;
408
- target = null;
409
- }
410
-
411
- return Promise.resolve().then(function () {
412
- //
413
- // Get media streams that were created on session initialization
414
- //
415
- var mediaStream = _this7._pc.peerConnection.getLocalStreams()[0]; //
416
- // Get tracks that are related to the publisher (audio or video)
417
- //
418
-
419
-
420
- var tracks = _this7._pc.peerConnection.getLocalStreams().reduce(function (result, mediaStream) {
421
- mediaStream.getTracks().filter(function (track) {
422
- return track.kind === 'video' && params.videoDevice || track.kind === 'audio' && params.audioDevice;
423
- }).forEach(function (track) {
424
- return result.push(track);
425
- });
426
- return result;
427
- }, []);
428
-
429
- var tsstream = new _stream.TsWebRTCStream(_this7, mediaStream, params.name);
430
- tsstream.remote = false;
431
- var publisher = new _publisher.TsMediaPublisher(_this7, {
432
- stream: tsstream,
433
- tracks: tracks,
434
- videoParams: params.videoParams,
435
- videoHeight: tsstream.videoDimensions.height,
436
- videoWidth: tsstream.videoDimensions.width,
437
- _target: target
438
- });
439
- tsstream.publisher = publisher;
440
- return publisher;
441
- });
442
- }
443
- /**
444
- * Publish stream from previously create TsMediaPublisher instance.
445
- *
446
- * Used internally by TsMediaPublisher.publish
447
- *
448
- * @method
449
- *
450
- * @param { TsMediaPublisher } publisher
451
- *
452
- * @returns { Promise }
453
- *
454
- * @fires PUBLISHER_EVENTS#STREAM_CREATED
455
- * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED
456
- * @fires STREAM_EVENTS#PROPERTY_CHANGED
457
- *
458
- * @see TsMediaPublisher#publish
459
- */
460
-
461
- }, {
462
- key: "publish",
463
- value: function publish(publisher) {
464
- var _this8 = this;
465
-
466
- return Promise.resolve().then(function () {
467
- publisher.emit(_publisher.EVENTS.STREAM_CREATED, publisher.stream);
468
-
469
- _this8.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
470
- stream: publisher.stream,
471
- property: 'hasVideo',
472
- value: publisher.stream.hasVideo
473
- });
474
-
475
- _this8.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
476
- stream: publisher.stream,
477
- property: 'hasAudio',
478
- value: publisher.stream.hasAudio
479
- });
480
-
481
- if (publisher._target) {
482
- //
483
- // New video element where publishing video stream will be rendered
484
- //
485
- var video = document.createElement('video');
486
-
487
- if (!isIE11) {
488
- video.src = URL.createObjectURL(publisher.stream._mediaStream);
489
- }
490
-
491
- video.playsInline = true;
492
- video.autoplay = true;
493
-
494
- if (isIE11) {
495
- publisher._target.appendChild(video);
496
-
497
- publisher._element = attachMediaStream(video, publisher.stream._mediaStream);
498
- }
499
-
500
- var params = _.assign({}, {
501
- fitMode: 'contain',
502
- insertMode: 'append',
503
- mirror: false,
504
- resolution: '480x640',
505
- width: '100%',
506
- height: '100%'
507
- }, publisher.videoParams);
508
-
509
- var elementHeight = typeof params.height === 'string' ? params.height : params.height + 'px';
510
- var elementWidth = typeof params.width === 'string' ? params.width : params.width + 'px';
511
-
512
- _.assign((isIE11 ? publisher._element : video).style, {
513
- height: elementHeight,
514
- width: elementWidth,
515
- position: 'relative',
516
- 'object-fit': params.fitMode
517
- });
518
-
519
- if (!isIE11) {
520
- publisher._target.appendChild(video);
521
-
522
- publisher._element = video;
523
- }
524
-
525
- publisher.stream.setupDimensionsListener(video);
526
- } //
527
- // Enable (unpause) all media tracks related to publisher.
528
- // They are sending data to the server from this moment.
529
- //
530
-
531
-
532
- publisher.tracks.forEach(_this8._setTrackStateTo(true));
533
- });
534
- }
535
- /**
536
- * Unpublish stream and destroy publisher's view.
537
- *
538
- * Used internally by TsMediaPublisher.destroy
539
- *
540
- * @method
541
- *
542
- * @param { TsMediaPublisher } publisher
543
- *
544
- * @returns { Promise }
545
- *
546
- * @fires PUBLISHER_EVENTS#DESTROYED
547
- *
548
- * @see TsMediaPublisher#destroy
549
- */
550
-
551
- }, {
552
- key: "destroyPublisher",
553
- value: function destroyPublisher(publisher) {
554
- var _this9 = this;
555
-
556
- return new Promise(function (resolve) {
557
- publisher.tracks.forEach(_this9._setTrackStateTo(false));
558
-
559
- if (publisher._element) {
560
- publisher._element.remove();
561
- }
562
-
563
- publisher.emit(_publisher.EVENTS.DESTROYED);
564
- return resolve();
565
- });
566
- }
567
- }]);
568
-
569
- return KMSWebRTCSession;
570
- }(_session.TsMediaSession);
571
-
572
- exports.KMSWebRTCSession = KMSWebRTCSession;
573
- //# sourceMappingURL=session-kms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["oldCode/webrtc/session-kms.js"],"names":["isIE11","TsEnvironmentDetect","require","WebRtcPeer","KMSWebRTCSession","credentials","isMobile","resolution","deviceOpts","_credentials","_isMobile","_resolution","_deviceOpts","iceServers","ice","map","item","urls","url","username","login","credential","password","_configuration","iceTransportPolicy","_socket","_pc","sessionId","pipelineType","PIPELINE_TYPES","AUDIO_VIDEO_TO_SUBSCRIBERS","Promise","resolve","reject","socket","io","connect","forceNew","done","_","once","err","on","SOCKET_EVENTS","INCOMING","ERROR","pc","uid","Cookies","get","COOKIES","UID","clientType","CLIENT_TYPES","PUBLISHER","SUBSCRIBER","PIPELINE_DESTROYED","destroyed","off","disconnect","emit","EVENTS","DISCONNECTED","reason","generateOffer","error","offer","OUTGOING","JOIN_PIPELINE","sdpOffer","constraints","audio","PEER_CONNECTION_TYPES","SEND_RECV","RECV_ONLY","configuration","peerConnectionType","_getPeerType","mediaConstraints","onicecandidate","candidate","ICE_CANDIDATE","JOIN_RESPONSE","sdpAnswer","set","processAnswer","CONNECTED","addIceCandidate","_setupConnection","then","state","track","setEnabled","enabled","_connectSocket","video","_connectRTCPeer","peerConnection","getLocalStreams","forEach","stream","getTracks","_setTrackStateTo","onaddstream","tsStream","TsWebRTCStream","STREAM_CREATED","close","DESTROY_PIPELINE","event","target","params","mediaStream","tracks","reduce","result","filter","kind","videoDevice","audioDevice","push","tsstream","name","remote","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","PUBLISHER_EVENTS","STREAM_PROPERTY_CHANGED","property","value","hasVideo","hasAudio","document","createElement","src","URL","createObjectURL","_mediaStream","playsInline","autoplay","appendChild","_element","attachMediaStream","assign","fitMode","insertMode","mirror","elementHeight","elementWidth","style","position","setupDimensionsListener","remove","DESTROYED","TsMediaSession"],"mappings":"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","sourcesContent":["import {\n EVENTS,\n TsMediaSession\n} from '../session';\n\nimport {\n EVENTS as PUBLISHER_EVENTS,\n TsMediaPublisher\n} from '../publisher';\n\nimport {\n TsWebRTCStream\n} from './stream';\n\nimport * as io from 'socket.io-client';\n\nimport Cookies from 'js-cookie';\n\nimport {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nconst {WebRtcPeer} = require('kurento-utils');\n\nimport {\n CLIENT_TYPES,\n COOKIES,\n PEER_CONNECTION_TYPES,\n PIPELINE_TYPES,\n SOCKET_EVENTS\n} from './constants';\n\nimport {\n getMediaConstraints\n} from './helper';\n\n\n/**\n * WebRTC-specific implementation of TsMediaSession.\n *\n * Instance of this class is returned by TsMediaService.initSession call\n * with 'MEDIA_SERVER' as desired mediaType.\n *\n * @class\n * @extends TsMediaSession\n *\n * @see TsMediaSession\n */\nexport class KMSWebRTCSession extends TsMediaSession {\n constructor({credentials, isMobile, resolution, deviceOpts}) {\n super();\n\n this._credentials = credentials;\n this._isMobile = isMobile;\n this._resolution = resolution;\n this._deviceOpts = deviceOpts;\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\n iceTransportPolicy: 'relay'\n };\n\n /**\n * Socket.io connection to the signaling server\n *\n * @private\n * @member { Object }\n */\n this._socket = null;\n\n /**\n * RTCPeerConnection to the media server.\n *\n * For now kurento-utils is used for connection establishment.\n *\n * @private\n * @member { Object }\n */\n this._pc = null;\n }\n\n /**\n * Id of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get id() {\n return this._credentials.sessionId;\n }\n\n /**\n * PipelineType of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get pipelineType() {\n return this._credentials.pipelineType || PIPELINE_TYPES.AUDIO_VIDEO_TO_SUBSCRIBERS;\n }\n\n _connectSocket(url) {\n return new Promise((resolve, reject) => {\n const socket = io.connect(url, {forceNew: true});\n\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n\n //\n // When connection is established\n //\n socket.once('connect', () => done());\n //\n // errorOccured is ts-media-client signal\n //\n socket.on(SOCKET_EVENTS.INCOMING.ERROR, done);\n //\n // And these 2 are socket.io connection failed events\n //\n socket.on('connect_error', done);\n socket.on('connect_timeout', done);\n\n this._socket = socket;\n });\n }\n\n _setupConnection(pc, sessionId) {\n const uid = Cookies.get(COOKIES.UID);\n const clientType = this._isMobile ? CLIENT_TYPES.PUBLISHER : CLIENT_TYPES.SUBSCRIBER;\n\n return new Promise((resolve, reject) => {\n this._socket.on(SOCKET_EVENTS.INCOMING.PIPELINE_DESTROYED, () => {\n this.destroyed = true;\n\n this._socket.off();\n this._socket.disconnect();\n\n this.emit(EVENTS.DISCONNECTED, {\n reason: 'Client disconnected'\n });\n });\n\n pc.generateOffer((error, offer) => {\n if (error) {\n return reject(error);\n }\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.JOIN_PIPELINE, {\n uid,\n sessionId,\n clientType,\n\n pipelineType: this.pipelineType,\n sdpOffer: offer\n });\n\n resolve();\n });\n });\n }\n\n _getPeerType(constraints, isMobile) {\n if (isMobile || constraints.audio) {\n return PEER_CONNECTION_TYPES.SEND_RECV;\n }\n\n return PEER_CONNECTION_TYPES.RECV_ONLY;\n }\n\n _connectRTCPeer({\n constraints,\n configuration,\n sessionId,\n isMobile\n }) {\n return new Promise((resolve, reject) => {\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n const peerConnectionType = this._getPeerType(constraints, isMobile);\n\n const pc = WebRtcPeer[peerConnectionType]({\n configuration,\n\n mediaConstraints: constraints,\n onicecandidate: (candidate) => {\n this._socket.emit(SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {\n sessionId,\n\n candidate,\n clientType: isMobile ? CLIENT_TYPES.PUBLISHER : CLIENT_TYPES.SUBSCRIBER\n });\n }\n }, (error) => {\n if (error) {\n return done(error);\n }\n\n this._socket.on(SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, ({sdpAnswer, uid}) => {\n Cookies.set(COOKIES.UID, uid);\n\n pc.processAnswer(sdpAnswer, (error) => {\n if (error) {\n return done(error);\n }\n });\n\n this.emit(EVENTS.CONNECTED);\n\n this._socket.off(SOCKET_EVENTS.INCOMING.ERROR);\n this._socket.off('connect_error');\n this._socket.off('connect_timeout');\n\n return done();\n });\n\n this._socket.on(SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, ({candidate}) => {\n pc.addIceCandidate(candidate);\n });\n\n this._setupConnection(pc, sessionId)\n .then(done)\n .catch(done);\n });\n\n this._pc = pc;\n });\n }\n\n _setTrackStateTo(state) {\n return function (track) {\n if (track.setEnabled) {\n track.setEnabled(state);\n } else {\n track.enabled = state;\n }\n };\n }\n\n /**\n * Establish socket and peer connection to the media server.\n *\n * @method\n * @returns { Promise }\n *\n * @fires SESSION_EVENTS#CONNECTED\n */\n connect() {\n return this._connectSocket(this._credentials.url)\n .then(() => (\n getMediaConstraints({\n resolution: this._resolution,\n deviceOpts: this._deviceOpts\n })\n ))\n .then((constraints) => {\n // streaming from dashboard is not supported and we\n // don't want to access the camera without a reason\n if (!this._isMobile && constraints.video) {\n delete constraints.video;\n }\n\n return this._connectRTCPeer({\n constraints,\n\n configuration: this._configuration,\n sessionId: this._credentials.sessionId,\n isMobile: this._isMobile\n });\n })\n .then(() => {\n this._pc.peerConnection.getLocalStreams().forEach((stream) => {\n stream.getTracks().forEach(this._setTrackStateTo(false));\n });\n\n this._pc.peerConnection.onaddstream = ({stream}) => {\n const tsStream = new TsWebRTCStream(this, stream);\n\n this.emit(EVENTS.STREAM_CREATED, tsStream);\n };\n });\n }\n\n /**\n * Close all media streams, disconnect RTCPeerConnection and socket.io\n *\n * @method\n * @returns { Promise }\n *\n * @fires SESSION_EVENTS#DISCONNECTED\n */\n disconnect() {\n return Promise.resolve()\n .then(() => {\n if (this.destroyed) {\n return null;\n }\n\n this._pc.peerConnection.close();\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.DESTROY_PIPELINE, {\n sessionId: this._credentials.sessionId\n });\n this._socket.disconnect();\n\n const event = {reason: 'disconnected'};\n\n this.emit(EVENTS.DISCONNECTED, event);\n\n return event;\n });\n }\n\n /**\n * Create new TsMediaPublisher instance\n *\n * @method\n *\n * @param { DOMElement } [target] Video element\n * that will be used to render publishing video stream\n * @param { Object } params\n * @param { String } [params.videoDevice] Video device id\n * @param { String } [params.videoParams] Video device id\n * @param { String } [params.videoParams.fitMode] Video fit mode\n * @param { Number|String } [params.videoParams.width] Video element width\n * @param { Number|String } [params.videoParams.height] Video element height\n * @param { String } [params.audioDevice] Video device id\n *\n * @returns { Promise<TsMediaPublisher> } publisher\n *\n * @see TsMediaPublisher\n */\n createPublisher(target, params) {\n if (!params) {\n params = target;\n target = null;\n }\n\n return Promise.resolve()\n .then(() => {\n //\n // Get media streams that were created on session initialization\n //\n const mediaStream = this._pc.peerConnection.getLocalStreams()[0];\n //\n // Get tracks that are related to the publisher (audio or video)\n //\n const tracks = this._pc.peerConnection.getLocalStreams().reduce((result, mediaStream) => {\n mediaStream.getTracks()\n .filter((track) => (track.kind === 'video' && params.videoDevice) ||\n (track.kind === 'audio' && params.audioDevice))\n .forEach((track) => result.push(track));\n\n return result;\n }, []);\n\n const tsstream = new TsWebRTCStream(this, mediaStream, params.name);\n\n tsstream.remote = false;\n\n const publisher = new TsMediaPublisher(this, {\n stream: tsstream,\n tracks,\n videoParams: params.videoParams,\n\n videoHeight: tsstream.videoDimensions.height,\n videoWidth: tsstream.videoDimensions.width,\n\n _target: target\n });\n\n tsstream.publisher = publisher;\n\n return publisher;\n });\n }\n\n /**\n * Publish stream from previously create TsMediaPublisher instance.\n *\n * Used internally by TsMediaPublisher.publish\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#STREAM_CREATED\n * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED\n * @fires STREAM_EVENTS#PROPERTY_CHANGED\n *\n * @see TsMediaPublisher#publish\n */\n publish(publisher) {\n return Promise.resolve()\n .then(() => {\n publisher.emit(PUBLISHER_EVENTS.STREAM_CREATED, publisher.stream);\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasVideo',\n value: publisher.stream.hasVideo\n });\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasAudio',\n value: publisher.stream.hasAudio\n });\n\n if (publisher._target) {\n //\n // New video element where publishing video stream will be rendered\n //\n const video = document.createElement('video');\n\n if (!isIE11) {\n video.src = URL.createObjectURL(publisher.stream._mediaStream);\n }\n\n video.playsInline = true;\n video.autoplay = true;\n\n if (isIE11) {\n publisher._target.appendChild(video);\n publisher._element = attachMediaStream(video, publisher.stream._mediaStream);\n }\n\n const params = _.assign({}, {\n fitMode: 'contain',\n insertMode: 'append',\n mirror: false,\n resolution: '480x640',\n width: '100%',\n height: '100%'\n }, publisher.videoParams);\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 _.assign((isIE11 ? publisher._element : video).style, {\n height: elementHeight,\n width: elementWidth,\n\n position: 'relative',\n 'object-fit': params.fitMode\n });\n\n if (!isIE11) {\n publisher._target.appendChild(video);\n publisher._element = video;\n }\n\n publisher.stream.setupDimensionsListener(video);\n }\n\n //\n // Enable (unpause) all media tracks related to publisher.\n // They are sending data to the server from this moment.\n //\n publisher.tracks.forEach(this._setTrackStateTo(true));\n });\n }\n\n /**\n * Unpublish stream and destroy publisher's view.\n *\n * Used internally by TsMediaPublisher.destroy\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#DESTROYED\n *\n * @see TsMediaPublisher#destroy\n */\n destroyPublisher(publisher) {\n return new Promise((resolve) => {\n publisher.tracks.forEach(this._setTrackStateTo(false));\n\n if (publisher._element) {\n publisher._element.remove();\n }\n\n publisher.emit(PUBLISHER_EVENTS.DESTROYED);\n\n return resolve();\n });\n }\n}\n"],"file":"session-kms.js"}