@techsee/techsee-media-service 999.20.0-nodejs.lite.2 → 999.20.1-alpha

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