@techsee/techsee-media-service 9.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 (82) hide show
  1. package/lib/MultiParty/MultiPartyService.d.ts +3 -5
  2. package/lib/MultiParty/MultiPartyService.d.ts.map +1 -1
  3. package/lib/MultiParty/MultiPartyService.js +4 -7
  4. package/lib/MultiParty/MultiPartyService.js.map +1 -1
  5. package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -1
  6. package/lib/MultiParty/MultiPartyServiceFactory.js +2 -2
  7. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -1
  8. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts +11 -1
  9. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts.map +1 -1
  10. package/lib/MultiParty/{OpentokMultiPartyService.d.ts → opentok/OpentokMultiPartyService.d.ts} +9 -13
  11. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts.map +1 -0
  12. package/lib/MultiParty/{OpentokMultiPartyService.js → opentok/OpentokMultiPartyService.js} +109 -397
  13. package/lib/MultiParty/opentok/OpentokMultiPartyService.js.map +1 -0
  14. package/lib/MultiParty/opentok/OpentokPublisher.d.ts +25 -0
  15. package/lib/MultiParty/opentok/OpentokPublisher.d.ts.map +1 -0
  16. package/lib/MultiParty/opentok/OpentokPublisher.js +409 -0
  17. package/lib/MultiParty/opentok/OpentokPublisher.js.map +1 -0
  18. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts +1 -0
  19. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts.map +1 -0
  20. package/lib/MultiParty/opentok/OpentokSubscriber.js +32 -0
  21. package/lib/MultiParty/opentok/OpentokSubscriber.js.map +1 -0
  22. package/lib/MultiParty/opentok/OpentokUtils.d.ts +2 -0
  23. package/lib/MultiParty/opentok/OpentokUtils.d.ts.map +1 -0
  24. package/lib/MultiParty/opentok/OpentokUtils.js +17 -0
  25. package/lib/MultiParty/opentok/OpentokUtils.js.map +1 -0
  26. package/lib/MultiParty/opentok/trace.d.ts +2 -0
  27. package/lib/MultiParty/opentok/trace.d.ts.map +1 -0
  28. package/lib/MultiParty/opentok/trace.js +31 -0
  29. package/lib/MultiParty/opentok/trace.js.map +1 -0
  30. package/package.json +8 -6
  31. package/lib/MultiParty/OpentokMultiPartyService.d.ts.map +0 -1
  32. package/lib/MultiParty/OpentokMultiPartyService.js.map +0 -1
  33. package/lib/oldCode/constants.js +0 -25
  34. package/lib/oldCode/constants.js.map +0 -1
  35. package/lib/oldCode/event-emitter.js +0 -62
  36. package/lib/oldCode/event-emitter.js.map +0 -1
  37. package/lib/oldCode/index.js +0 -60
  38. package/lib/oldCode/index.js.map +0 -1
  39. package/lib/oldCode/opentok/session.js +0 -335
  40. package/lib/oldCode/opentok/session.js.map +0 -1
  41. package/lib/oldCode/opentok/stream.js +0 -324
  42. package/lib/oldCode/opentok/stream.js.map +0 -1
  43. package/lib/oldCode/publisher.js +0 -168
  44. package/lib/oldCode/publisher.js.map +0 -1
  45. package/lib/oldCode/service.js +0 -417
  46. package/lib/oldCode/service.js.map +0 -1
  47. package/lib/oldCode/session.js +0 -132
  48. package/lib/oldCode/session.js.map +0 -1
  49. package/lib/oldCode/stream.js +0 -223
  50. package/lib/oldCode/stream.js.map +0 -1
  51. package/lib/oldCode/subscriber.js +0 -115
  52. package/lib/oldCode/subscriber.js.map +0 -1
  53. package/lib/oldCode/tracer.d.ts +0 -36
  54. package/lib/oldCode/tracer.d.ts.map +0 -1
  55. package/lib/oldCode/tracer.js +0 -202
  56. package/lib/oldCode/tracer.js.map +0 -1
  57. package/lib/oldCode/utils/ImageFixer.d.ts +0 -1
  58. package/lib/oldCode/utils/ImageFixer.d.ts.map +0 -1
  59. package/lib/oldCode/utils/ImageFixer.js +0 -83
  60. package/lib/oldCode/utils/ImageFixer.js.map +0 -1
  61. package/lib/oldCode/webrtc/constants.js +0 -106
  62. package/lib/oldCode/webrtc/constants.js.map +0 -1
  63. package/lib/oldCode/webrtc/helper.js +0 -225
  64. package/lib/oldCode/webrtc/helper.js.map +0 -1
  65. package/lib/oldCode/webrtc/session-kms.js +0 -573
  66. package/lib/oldCode/webrtc/session-kms.js.map +0 -1
  67. package/lib/oldCode/webrtc/session-loopback.js +0 -354
  68. package/lib/oldCode/webrtc/session-loopback.js.map +0 -1
  69. package/lib/oldCode/webrtc/session-turn.js +0 -927
  70. package/lib/oldCode/webrtc/session-turn.js.map +0 -1
  71. package/lib/oldCode/webrtc/session-turn.v2.js +0 -592
  72. package/lib/oldCode/webrtc/session-turn.v2.js.map +0 -1
  73. package/lib/oldCode/webrtc/session.js +0 -58
  74. package/lib/oldCode/webrtc/session.js.map +0 -1
  75. package/lib/oldCode/webrtc/stream.js +0 -696
  76. package/lib/oldCode/webrtc/stream.js.map +0 -1
  77. package/lib/oldCode/webrtc/temasys/adapter-loader.js +0 -11
  78. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +0 -1
  79. package/lib/oldCode/webrtc/temasys/adapter.js +0 -5933
  80. package/lib/oldCode/webrtc/temasys/adapter.js.map +0 -1
  81. package/lib/oldCode/webrtc/webrtc-ie-shim.js +0 -3437
  82. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +0 -1
@@ -1,354 +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.LoopbackWebRTCSession = void 0;
9
-
10
- var _session = require("../session");
11
-
12
- var _publisher = require("../publisher");
13
-
14
- var _tsEnvironmentDetect = require("@techsee/techsee-common/lib/helpers/ts-environment-detect");
15
-
16
- var _stream = require("./stream");
17
-
18
- var _helper = require("./helper");
19
-
20
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
21
-
22
- 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); } }
23
-
24
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
25
-
26
- 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); }
27
-
28
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
29
-
30
- 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); }; }
31
-
32
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
33
-
34
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
35
-
36
- 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; } }
37
-
38
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
39
-
40
- var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
41
-
42
- /**
43
- * WebRTC-specific implementation of TsMediaSession.
44
- *
45
- * Instance of this class is returned by TsMediaService.initSession call
46
- * with 'LOOPBACK' as desired mediaType.
47
- *
48
- * @class
49
- * @extends TsMediaSession
50
- *
51
- * @see TsMediaSession
52
- */
53
- var LoopbackWebRTCSession = /*#__PURE__*/function (_TsMediaSession) {
54
- _inherits(LoopbackWebRTCSession, _TsMediaSession);
55
-
56
- var _super = _createSuper(LoopbackWebRTCSession);
57
-
58
- function LoopbackWebRTCSession(_ref) {
59
- var _this;
60
-
61
- var credentials = _ref.credentials,
62
- deviceOpts = _ref.deviceOpts;
63
-
64
- _classCallCheck(this, LoopbackWebRTCSession);
65
-
66
- _this = _super.call(this);
67
- _this._credentials = credentials;
68
- _this._deviceOpts = deviceOpts;
69
- _this._constraints = null;
70
- return _this;
71
- }
72
- /**
73
- * Id of the session.
74
- *
75
- * @member { String }
76
- *
77
- * @type { String }
78
- */
79
-
80
-
81
- _createClass(LoopbackWebRTCSession, [{
82
- key: "id",
83
- get: function get() {
84
- return _.get(this._credentials, 'sessionId');
85
- }
86
- }, {
87
- key: "isLoopback",
88
- get: function get() {
89
- return true;
90
- }
91
- }, {
92
- key: "_setTrackStateTo",
93
- value: function _setTrackStateTo(state) {
94
- return function (track) {
95
- if (track.setEnabled) {
96
- track.setEnabled(state);
97
- } else {
98
- track.enabled = state;
99
- }
100
- };
101
- }
102
- /**
103
- * Loopback does not connect, but still need to provide an implementation.
104
- *
105
- * @method
106
- * @returns { Promise }
107
- *
108
- */
109
-
110
- }, {
111
- key: "connect",
112
- value: function connect() {
113
- return Promise.resolve();
114
- }
115
- }, {
116
- key: "_toggleAllStreams",
117
- value: function _toggleAllStreams(state) {
118
- var _this2 = this;
119
-
120
- if (!_.isEmpty(this._streams)) {
121
- this._streams.forEach(function (stream) {
122
- return stream._mediaStream.getTracks().forEach(_this2._setTrackStateTo(state));
123
- });
124
- }
125
- }
126
- }, {
127
- key: "_stopAllStreams",
128
- value: function _stopAllStreams() {
129
- if (!_.isEmpty(this._streams)) {
130
- this._streams.forEach(function (stream) {
131
- return stream._mediaStream.getTracks().forEach(function (track) {
132
- return track.stop();
133
- });
134
- });
135
- }
136
- }
137
- /**
138
- * Cleanup
139
- *
140
- * @method
141
- * @returns { Promise }
142
- *
143
- */
144
-
145
- }, {
146
- key: "disconnect",
147
- value: function disconnect() {
148
- return Promise.resolve();
149
- }
150
- /**
151
- * Create new TsMediaPublisher instance
152
- *
153
- * @method
154
- *
155
- * @param { DOMElement } [target] Video element
156
- * that will be used to render publishing video stream
157
- * @param { Object } params
158
- * @param { String } [params.videoDevice] Video device id
159
- * @param { String } [params.videoParams] Video device id
160
- * @param { String } [params.videoParams.fitMode] Video fit mode
161
- * @param { Number|String } [params.videoParams.width] Video element width
162
- * @param { Number|String } [params.videoParams.height] Video element height
163
- * @param { String } [params.audioDevice] Video device id
164
- *
165
- * @returns { Promise<TsMediaPublisher> } publisher
166
- *
167
- * @see TsMediaPublisher
168
- */
169
-
170
- }, {
171
- key: "createPublisher",
172
- value: function createPublisher(t, p) {
173
- var _this3 = this;
174
-
175
- var target = t,
176
- params = p;
177
-
178
- if (!params) {
179
- params = target;
180
- target = null;
181
- }
182
-
183
- return new Promise(function (resolve, reject) {
184
- (0, _helper.getHighestResolutionStream)(_this3._deviceOpts, _this3._constraints).then(function (result) {
185
- _this3._constraints = result.constraints;
186
- return resolve(result.stream);
187
- })["catch"](function (error) {
188
- return reject(error);
189
- });
190
- }).then(function (mediaStream) {
191
- // Clear previous streams
192
- _this3._streams.clear(); //
193
- // Get tracks that are related to the publisher (audio or video)
194
- //
195
-
196
-
197
- var tracks = mediaStream.getTracks().filter(function (track) {
198
- return track.kind === 'video' && params.videoDevice || track.kind === 'audio' && params.audioDevice;
199
- });
200
- var videoTrackSettings = (0, _helper.getVideoTrackSettings)(mediaStream);
201
- var tsstream = new _stream.TsWebRTCStream(_this3, mediaStream, params.name, false, videoTrackSettings);
202
- var publisher = new _publisher.TsMediaPublisher(_this3, {
203
- stream: tsstream,
204
- tracks: tracks,
205
- videoParams: params.videoParams,
206
- videoHeight: tsstream.videoDimensions.height,
207
- videoWidth: tsstream.videoDimensions.width,
208
- _target: target
209
- });
210
- tsstream.publisher = publisher;
211
- _this3.publisher = publisher;
212
- return publisher;
213
- });
214
- }
215
- /**
216
- * Publish stream from previously create TsMediaPublisher instance.
217
- *
218
- * Used internally by TsMediaPublisher.publish
219
- *
220
- * @method
221
- *
222
- * @param { TsMediaPublisher } publisher
223
- *
224
- * @returns { Promise }
225
- *
226
- * @fires PUBLISHER_EVENTS#STREAM_CREATED
227
- * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED
228
- * @fires STREAM_EVENTS#PROPERTY_CHANGED
229
- *
230
- * @see TsMediaPublisher#publish
231
- */
232
-
233
- }, {
234
- key: "publish",
235
- value: function publish(publisher) {
236
- var _this4 = this;
237
-
238
- return Promise.resolve().then(function () {
239
- publisher.emit(_publisher.EVENTS.STREAM_CREATED, publisher.stream);
240
-
241
- _this4.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
242
- stream: publisher.stream,
243
- property: 'hasVideo',
244
- value: publisher.stream.hasVideo
245
- });
246
-
247
- _this4.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
248
- stream: publisher.stream,
249
- property: 'hasAudio',
250
- value: publisher.stream.hasAudio
251
- });
252
-
253
- if (_this4.publisher._element) {
254
- return;
255
- }
256
-
257
- if (publisher._target) {
258
- //
259
- // New video element where publishing video stream will be rendered
260
- //
261
- var video = document.createElement('video');
262
-
263
- if (!isIE11) {
264
- video.src = URL.createObjectURL(publisher.stream._mediaStream);
265
- }
266
-
267
- video.playsInline = true;
268
- video.autoplay = true;
269
-
270
- if (isIE11) {
271
- publisher._target.appendChild(video);
272
-
273
- publisher._element = attachMediaStream(video, publisher.stream._mediaStream);
274
- }
275
-
276
- var streamDimensions = publisher.stream.videoDimensions;
277
-
278
- var params = _.assign({}, {
279
- fitMode: 'contain',
280
- insertMode: 'append',
281
- mirror: false,
282
- resolution: "".concat(streamDimensions.width, "x").concat(streamDimensions.height),
283
- width: '100%',
284
- height: '100%'
285
- }, publisher.videoParams);
286
-
287
- var elementHeight = typeof params.height === 'string' ? params.height : params.height + 'px';
288
- var elementWidth = typeof params.width === 'string' ? params.width : params.width + 'px';
289
-
290
- _.assign((isIE11 ? publisher._element : video).style, {
291
- height: elementHeight,
292
- width: elementWidth,
293
- position: 'relative',
294
- 'object-fit': params.fitMode
295
- });
296
-
297
- if (!isIE11) {
298
- publisher._target.appendChild(video);
299
-
300
- publisher._element = video;
301
- }
302
-
303
- publisher.stream.setupDimensionsListener(video);
304
- } //
305
- // Enable (unpause) all media tracks related to publisher.
306
- // They are sending data to the server from this moment.
307
- //
308
-
309
-
310
- _this4._toggleAllStreams(true);
311
- });
312
- }
313
- /**
314
- * Unpublish stream and destroy publisher's view.
315
- *
316
- * Used internally by TsMediaPublisher.destroy
317
- *
318
- * @method
319
- *
320
- * @param { TsMediaPublisher } publisher
321
- *
322
- * @returns { Promise }
323
- *
324
- * @fires PUBLISHER_EVENTS#DESTROYED
325
- *
326
- * @see TsMediaPublisher#destroy
327
- */
328
-
329
- }, {
330
- key: "destroyPublisher",
331
- value: function destroyPublisher(publisher) {
332
- var _this5 = this;
333
-
334
- return new Promise(function (resolve) {
335
- _this5._toggleAllStreams(false);
336
-
337
- _this5._stopAllStreams();
338
-
339
- if (publisher._element) {
340
- publisher._element.remove();
341
- }
342
-
343
- _this5.publisher = null;
344
- publisher.emit(_publisher.EVENTS.DESTROYED);
345
- return resolve();
346
- });
347
- }
348
- }]);
349
-
350
- return LoopbackWebRTCSession;
351
- }(_session.TsMediaSession);
352
-
353
- exports.LoopbackWebRTCSession = LoopbackWebRTCSession;
354
- //# sourceMappingURL=session-loopback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["oldCode/webrtc/session-loopback.js"],"names":["isIE11","TsEnvironmentDetect","LoopbackWebRTCSession","credentials","deviceOpts","_credentials","_deviceOpts","_constraints","_","get","state","track","setEnabled","enabled","Promise","resolve","isEmpty","_streams","forEach","stream","_mediaStream","getTracks","_setTrackStateTo","stop","t","p","target","params","reject","then","result","constraints","error","mediaStream","clear","tracks","filter","kind","videoDevice","audioDevice","videoTrackSettings","tsstream","TsWebRTCStream","name","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","emit","PUBLISHER_EVENTS","STREAM_CREATED","EVENTS","STREAM_PROPERTY_CHANGED","property","value","hasVideo","hasAudio","_element","video","document","createElement","src","URL","createObjectURL","playsInline","autoplay","appendChild","attachMediaStream","streamDimensions","assign","fitMode","insertMode","mirror","resolution","elementHeight","elementWidth","style","position","setupDimensionsListener","_toggleAllStreams","_stopAllStreams","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 { TsEnvironmentDetect } from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nimport {\n TsWebRTCStream,\n} from './stream';\n\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nimport {\n getVideoTrackSettings,\n getHighestResolutionStream\n} from './helper';\n\n/**\n * WebRTC-specific implementation of TsMediaSession.\n *\n * Instance of this class is returned by TsMediaService.initSession call\n * with 'LOOPBACK' as desired mediaType.\n *\n * @class\n * @extends TsMediaSession\n *\n * @see TsMediaSession\n */\nexport class LoopbackWebRTCSession extends TsMediaSession {\n constructor({ credentials, deviceOpts }) {\n super();\n\n this._credentials = credentials;\n this._deviceOpts = deviceOpts;\n this._constraints = null;\n }\n\n /**\n * Id of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get id() {\n return _.get(this._credentials, 'sessionId');\n }\n\n get isLoopback() {\n return true;\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 * Loopback does not connect, but still need to provide an implementation.\n *\n * @method\n * @returns { Promise }\n *\n */\n connect() {\n return Promise.resolve();\n }\n\n _toggleAllStreams(state) {\n if (!_.isEmpty(this._streams)) {\n this._streams.forEach((stream) => stream._mediaStream.getTracks().forEach(this._setTrackStateTo(state)));\n }\n }\n\n _stopAllStreams() {\n if (!_.isEmpty(this._streams)) {\n this._streams.forEach((stream) => stream._mediaStream.getTracks().forEach((track) => track.stop()));\n }\n }\n\n /**\n * Cleanup\n *\n * @method\n * @returns { Promise }\n *\n */\n disconnect() {\n return Promise.resolve();\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(t, p) {\n let target = t,\n params = p;\n\n if (!params) {\n params = target;\n target = null;\n }\n\n return new Promise((resolve, reject) => {\n getHighestResolutionStream(this._deviceOpts, this._constraints)\n .then((result) => {\n this._constraints = result.constraints;\n\n return resolve(result.stream);\n })\n .catch((error) => reject(error));\n })\n .then((mediaStream) => {\n // Clear previous streams\n this._streams.clear();\n\n //\n // Get tracks that are related to the publisher (audio or video)\n //\n const tracks = mediaStream.getTracks()\n .filter((track) => (\n (track.kind === 'video' && params.videoDevice) ||\n (track.kind === 'audio' && params.audioDevice)));\n\n const videoTrackSettings = getVideoTrackSettings(mediaStream);\n\n const tsstream = new TsWebRTCStream(this, mediaStream, params.name, false, videoTrackSettings);\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 this.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 (this.publisher._element) {\n return;\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 streamDimensions = publisher.stream.videoDimensions;\n\n const params = _.assign({}, {\n fitMode: 'contain',\n insertMode: 'append',\n mirror: false,\n resolution: `${streamDimensions.width}x${streamDimensions.height}`,\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 this._toggleAllStreams(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 this._toggleAllStreams(false);\n this._stopAllStreams();\n\n if (publisher._element) {\n publisher._element.remove();\n }\n\n this.publisher = null;\n publisher.emit(PUBLISHER_EVENTS.DESTROYED);\n\n return resolve();\n });\n }\n}\n"],"file":"session-loopback.js"}