@techsee/techsee-media-service 999.0.2-switch → 999.0.3-alpha2

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 (150) hide show
  1. package/lib/LocalStreamManager.d.ts +12 -0
  2. package/lib/LocalStreamManager.d.ts.map +1 -1
  3. package/lib/LocalStreamManager.js +440 -283
  4. package/lib/LocalStreamManager.js.map +1 -1
  5. package/lib/MediaConstants.d.ts +14 -4
  6. package/lib/MediaConstants.d.ts.map +1 -1
  7. package/lib/MediaConstants.js +83 -38
  8. package/lib/MediaConstants.js.map +1 -1
  9. package/lib/MediaContracts.d.ts +17 -14
  10. package/lib/MediaContracts.d.ts.map +1 -1
  11. package/lib/MediaContracts.js +3 -3
  12. package/lib/MediaContracts.js.map +1 -1
  13. package/lib/MediaPublisher.d.ts +3 -3
  14. package/lib/MediaPublisher.d.ts.map +1 -1
  15. package/lib/MediaPublisher.js +46 -35
  16. package/lib/MediaPublisher.js.map +1 -1
  17. package/lib/MediaServiceBase.d.ts +21 -7
  18. package/lib/MediaServiceBase.d.ts.map +1 -1
  19. package/lib/MediaServiceBase.js +924 -586
  20. package/lib/MediaServiceBase.js.map +1 -1
  21. package/lib/MediaSession/MediaServer.d.ts +45 -0
  22. package/lib/MediaSession/MediaServer.d.ts.map +1 -0
  23. package/lib/MediaSession/MediaServer.js +538 -0
  24. package/lib/MediaSession/MediaServer.js.map +1 -0
  25. package/lib/MediaSession/MediaSessionBase.d.ts +10 -1
  26. package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
  27. package/lib/MediaSession/MediaSessionBase.js +128 -66
  28. package/lib/MediaSession/MediaSessionBase.js.map +1 -1
  29. package/lib/MediaSession/SessionOpentok.d.ts +11 -9
  30. package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
  31. package/lib/MediaSession/SessionOpentok.js +500 -352
  32. package/lib/MediaSession/SessionOpentok.js.map +1 -1
  33. package/lib/MediaSession/SessionTurn.d.ts +4 -1
  34. package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
  35. package/lib/MediaSession/SessionTurn.js +611 -422
  36. package/lib/MediaSession/SessionTurn.js.map +1 -1
  37. package/lib/MediaSession/TurnConstants.js +31 -30
  38. package/lib/MediaSession/TurnConstants.js.map +1 -1
  39. package/lib/MediaSubscriber.d.ts +11 -11
  40. package/lib/MediaSubscriber.d.ts.map +1 -1
  41. package/lib/MediaSubscriber.js +236 -192
  42. package/lib/MediaSubscriber.js.map +1 -1
  43. package/lib/MediaUtils/Compatibility.d.ts +2 -1
  44. package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
  45. package/lib/MediaUtils/Compatibility.js +130 -85
  46. package/lib/MediaUtils/Compatibility.js.map +1 -1
  47. package/lib/MediaUtils/MediaDomUtils.d.ts +3 -2
  48. package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
  49. package/lib/MediaUtils/MediaDomUtils.js +235 -174
  50. package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
  51. package/lib/MediaUtils/MediaTracer.js +9 -4
  52. package/lib/MediaUtils/MediaTracer.js.map +1 -1
  53. package/lib/MediaUtils/index.d.ts +1 -0
  54. package/lib/MediaUtils/index.d.ts.map +1 -0
  55. package/lib/MediaUtils/index.js +16 -0
  56. package/lib/MediaUtils/index.js.map +1 -0
  57. package/lib/MultiParty/Contracts.d.ts +16 -0
  58. package/lib/MultiParty/Contracts.d.ts.map +1 -0
  59. package/lib/MultiParty/Contracts.js +6 -0
  60. package/lib/MultiParty/Contracts.js.map +1 -0
  61. package/lib/MultiParty/DetectWebRtcService.d.ts +16 -0
  62. package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -0
  63. package/lib/MultiParty/DetectWebRtcService.js +79 -0
  64. package/lib/MultiParty/DetectWebRtcService.js.map +1 -0
  65. package/lib/MultiParty/MediaCapabilitiesService.d.ts +23 -0
  66. package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -0
  67. package/lib/MultiParty/MediaCapabilitiesService.js +369 -0
  68. package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -0
  69. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts +5 -0
  70. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -0
  71. package/lib/MultiParty/MediaCapabilitiesUtils.js +305 -0
  72. package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -0
  73. package/lib/MultiParty/MultiPartyService.d.ts +40 -0
  74. package/lib/MultiParty/MultiPartyService.d.ts.map +1 -0
  75. package/lib/MultiParty/MultiPartyService.js +70 -0
  76. package/lib/MultiParty/MultiPartyService.js.map +1 -0
  77. package/lib/MultiParty/MultiPartyServiceFactory.d.ts +3 -0
  78. package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -0
  79. package/lib/MultiParty/MultiPartyServiceFactory.js +21 -0
  80. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -0
  81. package/lib/MultiParty/OpentokMultiPartyService.d.ts +29 -0
  82. package/lib/MultiParty/OpentokMultiPartyService.d.ts.map +1 -0
  83. package/lib/MultiParty/OpentokMultiPartyService.js +888 -0
  84. package/lib/MultiParty/OpentokMultiPartyService.js.map +1 -0
  85. package/lib/MultiParty/VideoLayoutType.d.ts +4 -0
  86. package/lib/MultiParty/VideoLayoutType.d.ts.map +1 -0
  87. package/lib/MultiParty/VideoLayoutType.js +13 -0
  88. package/lib/MultiParty/VideoLayoutType.js.map +1 -0
  89. package/lib/MultiParty/index.d.ts +4 -0
  90. package/lib/MultiParty/index.d.ts.map +1 -0
  91. package/lib/MultiParty/index.js +61 -0
  92. package/lib/MultiParty/index.js.map +1 -0
  93. package/lib/MultiParty/opentok.d.ts +503 -0
  94. package/lib/TechseeMediaStream.d.ts +6 -6
  95. package/lib/TechseeMediaStream.d.ts.map +1 -1
  96. package/lib/TechseeMediaStream.js +59 -53
  97. package/lib/TechseeMediaStream.js.map +1 -1
  98. package/lib/oldCode/constants.js +20 -15
  99. package/lib/oldCode/constants.js.map +1 -1
  100. package/lib/oldCode/event-emitter.js +45 -22
  101. package/lib/oldCode/event-emitter.js.map +1 -1
  102. package/lib/oldCode/index.js +48 -52
  103. package/lib/oldCode/index.js.map +1 -1
  104. package/lib/oldCode/opentok/session.js +261 -236
  105. package/lib/oldCode/opentok/session.js.map +1 -1
  106. package/lib/oldCode/opentok/stream.js +283 -269
  107. package/lib/oldCode/opentok/stream.js.map +1 -1
  108. package/lib/oldCode/publisher.js +96 -71
  109. package/lib/oldCode/publisher.js.map +1 -1
  110. package/lib/oldCode/service.js +294 -272
  111. package/lib/oldCode/service.js.map +1 -1
  112. package/lib/oldCode/session.js +82 -60
  113. package/lib/oldCode/session.js.map +1 -1
  114. package/lib/oldCode/stream.js +153 -125
  115. package/lib/oldCode/stream.js.map +1 -1
  116. package/lib/oldCode/subscriber.js +60 -35
  117. package/lib/oldCode/subscriber.js.map +1 -1
  118. package/lib/oldCode/tracer.d.ts +3 -2
  119. package/lib/oldCode/tracer.d.ts.map +1 -1
  120. package/lib/oldCode/tracer.js +181 -130
  121. package/lib/oldCode/tracer.js.map +1 -1
  122. package/lib/oldCode/utils/ImageFixer.js +67 -44
  123. package/lib/oldCode/utils/ImageFixer.js.map +1 -1
  124. package/lib/oldCode/webrtc/constants.js +102 -110
  125. package/lib/oldCode/webrtc/constants.js.map +1 -1
  126. package/lib/oldCode/webrtc/helper.js +176 -124
  127. package/lib/oldCode/webrtc/helper.js.map +1 -1
  128. package/lib/oldCode/webrtc/session-kms.js +408 -393
  129. package/lib/oldCode/webrtc/session-kms.js.map +1 -1
  130. package/lib/oldCode/webrtc/session-loopback.js +245 -227
  131. package/lib/oldCode/webrtc/session-loopback.js.map +1 -1
  132. package/lib/oldCode/webrtc/session-turn.js +705 -658
  133. package/lib/oldCode/webrtc/session-turn.js.map +1 -1
  134. package/lib/oldCode/webrtc/session-turn.v2.js +480 -471
  135. package/lib/oldCode/webrtc/session-turn.v2.js.map +1 -1
  136. package/lib/oldCode/webrtc/session.js +12 -6
  137. package/lib/oldCode/webrtc/session.js.map +1 -1
  138. package/lib/oldCode/webrtc/stream.js +526 -504
  139. package/lib/oldCode/webrtc/stream.js.map +1 -1
  140. package/lib/oldCode/webrtc/temasys/adapter-loader.js +5 -6
  141. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +1 -1
  142. package/lib/oldCode/webrtc/temasys/adapter.js +5264 -5192
  143. package/lib/oldCode/webrtc/temasys/adapter.js.map +1 -1
  144. package/lib/oldCode/webrtc/webrtc-ie-shim.js +3357 -2927
  145. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +1 -1
  146. package/lib/qos/raw-qos.js +348 -273
  147. package/lib/qos/raw-qos.js.map +1 -1
  148. package/lib/webrtc-ie-shim.js +3386 -2985
  149. package/lib/webrtc-ie-shim.js.map +1 -1
  150. package/package.json +54 -42
@@ -1,200 +1,261 @@
1
1
  "use strict";
2
2
 
3
- var __importDefault = undefined && undefined.__importDefault || function (mod) {
4
- return mod && mod.__esModule ? mod : { "default": mod };
3
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
4
+ return mod && mod.__esModule ? mod : {
5
+ "default": mod
6
+ };
5
7
  };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- var isUndefined_1 = __importDefault(require("lodash/isUndefined"));
8
+
9
+ Object.defineProperty(exports, "__esModule", {
10
+ value: true
11
+ });
12
+ exports.getSnapshotFromMediaStream = exports.removeVideoElementFromDom = exports.renderMediaStreamToVideoEl = void 0;
13
+
14
+ var isUndefined_1 = __importDefault(require("lodash/isUndefined")); // eslint-disable-next-line @typescript-eslint/ban-ts-comment
8
15
  //@ts-ignore
16
+
17
+
9
18
  var ts_environment_detect_1 = require("@techsee/techsee-common/lib/helpers/ts-environment-detect");
19
+
10
20
  var retry_with_timeout_1 = require("@techsee/techsee-common/lib/core/retry-with-timeout");
21
+
11
22
  var MediaTracer_1 = require("./MediaTracer");
23
+
24
+ var MediaConstants_1 = require("../MediaConstants");
25
+
12
26
  var trace = MediaTracer_1.getMediaTracer('DomUtils');
13
27
  var isIE11 = new ts_environment_detect_1.TsEnvironmentDetect().isIE11();
14
- function renderMediaStreamToVideoEl(container, mediaStream) {
15
- return new Promise(function (resolve, reject) {
16
- if (!document.body.contains(container)) {
17
- reject(new Error('Cannot render to container that is not attached to dom'));
18
- return;
19
- }
20
- var doResolve = function doResolve(videoEl) {
21
- trace.info('Video element created successfully', { videoEl: videoEl });
22
- resolve(videoEl);
23
- };
24
- var videoEl = document.createElement('video');
25
- videoEl.muted = true;
26
- videoEl.playsInline = true;
27
- if (isIE11 && window.WebRTCAdapter) {
28
- container.appendChild(videoEl);
29
- window.WebRTCAdapter.bindVideoElement(videoEl);
30
- }
31
- videoEl.srcObject = mediaStream;
32
- if (!isIE11) {
33
- // Hack to override behavior introduced by Chrome/FF that unmuted video elements can't auto play
34
- videoEl.setAttribute('muted', '');
35
- }
36
- try {
37
- var playRes = videoEl.play();
38
- if (playRes && playRes.then) {
39
- playRes.then(function () {
40
- trace.info('Video element play success');
41
- if (!isIE11) {
42
- doResolve(videoEl);
43
- }
44
- });
45
- } else if (!isIE11) {
46
- doResolve(videoEl);
47
- }
48
- if (playRes && playRes.catch) {
49
- playRes.catch(function (error) {
50
- trace.error('Reject while executing play method on video element', error);
51
- reject(error);
52
- });
53
- }
54
- } catch (error) {
55
- reject(error);
56
- trace.error('Error while executing play method on video element', error);
57
- return;
58
- }
59
- if (isIE11) {
60
- var handleComplete = function handleComplete() {
61
- return videoEl.parentElement.tagName !== 'OBJECT';
62
- };
63
- var waitForObjectSettings = { intervalInMs: 30, timeoutInMs: 200 };
64
- retry_with_timeout_1.repeatWithTimeout(handleComplete, waitForObjectSettings).then(function () {
65
- //We will wait, until video is played, then we resolve
66
- var isVideoPlaying = function isVideoPlaying() {
67
- return videoEl.videoHeight <= 0 || videoEl.videoWidth <= 0;
68
- };
69
- var waitForVideoSettings = { intervalInMs: 50, timeoutInMs: 10000 };
70
- retry_with_timeout_1.repeatWithTimeout(isVideoPlaying, waitForVideoSettings).then(function () {
71
- return doResolve(videoEl.parentElement);
72
- }).catch(function () {
73
- return reject(new Error('Timeout while waiting for video to play'));
74
- });
75
- });
76
- } else {
77
- container.appendChild(videoEl);
78
- //doResolve(videoEl);
79
- }
28
+
29
+ function renderMediaStreamToVideoEl(container, mediaStream, streamType) {
30
+ return new Promise(function (resolve, reject) {
31
+ if (!document.body.contains(container)) {
32
+ reject(new Error('Cannot render to container that is not attached to dom'));
33
+ return;
34
+ }
35
+
36
+ var doResolve = function doResolve(videoEl) {
37
+ trace.info('Video element created successfully', {
38
+ videoEl: videoEl
39
+ });
40
+ resolve(videoEl);
41
+ };
42
+
43
+ var videoEl = document.createElement('video');
44
+ videoEl.muted = true;
45
+ videoEl.playsInline = true;
46
+
47
+ if (isIE11 && window.WebRTCAdapter) {
48
+ container.appendChild(videoEl);
49
+ window.WebRTCAdapter.bindVideoElement(videoEl);
50
+ }
51
+
52
+ videoEl.srcObject = mediaStream; // When unplugged the headphones in ios the video element got paused.
53
+
54
+ videoEl.addEventListener('pause', function () {
55
+ if ([MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM, MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM, MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM].indexOf(streamType) > -1) {
56
+ trace.info('Video element got paused. IOS headphones disconnected');
57
+ videoEl.play();
58
+ }
80
59
  });
60
+
61
+ if (!isIE11) {
62
+ // Hack to override behavior introduced by Chrome/FF that unmuted video elements can't auto play
63
+ videoEl.setAttribute('muted', '');
64
+ }
65
+
66
+ try {
67
+ var playRes = videoEl.play();
68
+
69
+ if (playRes && playRes.then) {
70
+ playRes.then(function () {
71
+ trace.info('Video element play success');
72
+
73
+ if (!isIE11) {
74
+ doResolve(videoEl);
75
+ }
76
+ });
77
+ } else if (!isIE11) {
78
+ doResolve(videoEl);
79
+ }
80
+
81
+ if (playRes && playRes["catch"]) {
82
+ playRes["catch"](function (error) {
83
+ trace.error('Reject while executing play method on video element', error);
84
+ reject(error);
85
+ });
86
+ }
87
+ } catch (error) {
88
+ reject(error);
89
+ trace.error('Error while executing play method on video element', error);
90
+ return;
91
+ }
92
+
93
+ if (isIE11) {
94
+ var handleComplete = function handleComplete() {
95
+ return videoEl.parentElement.tagName !== 'OBJECT';
96
+ };
97
+
98
+ var waitForObjectSettings = {
99
+ intervalInMs: 30,
100
+ timeoutInMs: 200
101
+ };
102
+ retry_with_timeout_1.repeatWithTimeout(handleComplete, waitForObjectSettings).then(function () {
103
+ //We will wait, until video is played, then we resolve
104
+ var isVideoPlaying = function isVideoPlaying() {
105
+ return videoEl.videoHeight <= 0 || videoEl.videoWidth <= 0;
106
+ };
107
+
108
+ var waitForVideoSettings = {
109
+ intervalInMs: 50,
110
+ timeoutInMs: 10000
111
+ };
112
+ retry_with_timeout_1.repeatWithTimeout(isVideoPlaying, waitForVideoSettings).then(function () {
113
+ return doResolve(videoEl.parentElement);
114
+ })["catch"](function () {
115
+ return reject(new Error('Timeout while waiting for video to play'));
116
+ });
117
+ });
118
+ } else {
119
+ container.appendChild(videoEl); //doResolve(videoEl);
120
+ }
121
+ });
81
122
  }
123
+
82
124
  exports.renderMediaStreamToVideoEl = renderMediaStreamToVideoEl;
125
+
83
126
  function removeVideoElementFromDom(videoEl) {
84
- return new Promise(function (resolve) {
85
- if (isIE11 && window.WebRTCAdapter) {
86
- window.WebRTCAdapter.unBindVideoElement(videoEl);
87
- if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {
88
- videoEl.parentNode.removeChild(videoEl);
89
- trace.info('Video element removed successfully');
90
- } else {
91
- trace.warn('Video element not removed', videoEl, videoEl.parentNode);
92
- }
93
- } else {
94
- videoEl.remove();
95
- }
96
- resolve();
97
- });
127
+ return new Promise(function (resolve) {
128
+ if (isIE11 && window.WebRTCAdapter) {
129
+ window.WebRTCAdapter.unBindVideoElement(videoEl);
130
+
131
+ if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {
132
+ videoEl.parentNode.removeChild(videoEl);
133
+ trace.info('Video element removed successfully');
134
+ } else {
135
+ trace.warn('Video element not removed', videoEl, videoEl.parentNode);
136
+ }
137
+ } else {
138
+ videoEl.remove();
139
+ }
140
+
141
+ resolve();
142
+ });
98
143
  }
144
+
99
145
  exports.removeVideoElementFromDom = removeVideoElementFromDom;
100
146
  var defaultSnapshot = {
101
- format: 'image/png',
102
- quality: 0.92
147
+ format: 'image/png',
148
+ quality: 0.92
103
149
  };
104
- function getSnapshotFromMediaStream(mediaStream, snapshotOptions) {
105
- if (snapshotOptions === void 0) {
106
- snapshotOptions = defaultSnapshot;
107
- }
108
- var format = snapshotOptions.format,
109
- quality = snapshotOptions.quality,
110
- x = snapshotOptions.x,
111
- y = snapshotOptions.y,
112
- w = snapshotOptions.w,
113
- h = snapshotOptions.h;
114
- var crop = !isUndefined_1.default(x) && !isUndefined_1.default(y) && !isUndefined_1.default(w) && !isUndefined_1.default(h);
115
- var resize = !crop && (!isUndefined_1.default(w) || !isUndefined_1.default(h));
116
- return new Promise(function (resolve, reject) {
117
- var tempContainer = document.createElement('div');
118
- tempContainer.style.cssText = 'position:absolute;left: -10000px;';
119
- document.body.appendChild(tempContainer);
120
- var doneFn = function doneFn(err, image) {
121
- if (err) {
122
- reject(err);
123
- return;
124
- }
125
- setTimeout(function () {
126
- document.body.removeChild(tempContainer);
127
- if (!err) {
128
- resolve(image);
129
- }
130
- }, 50);
131
- };
132
- renderMediaStreamToVideoEl(tempContainer, mediaStream).then(function (videoElement) {
133
- return Promise.resolve(isIE11 ? getImgDataIE11(videoElement) : getImgData(videoElement)).then(function (imgData) {
134
- if (!imgData || imgData.length < 10) {
135
- throw new Error('Failed to create a snapshot - imgData is null or empty');
136
- }
137
- doneFn(null, imgData);
138
- });
139
- }).catch(function (error) {
140
- doneFn(error || new Error('Failed to create a snapshot - can\'t render MediaStream To VideoEl '));
141
- });
150
+
151
+ function getSnapshotFromMediaStream(mediaStream, sourceStream, snapshotOptions) {
152
+ if (snapshotOptions === void 0) {
153
+ snapshotOptions = defaultSnapshot;
154
+ }
155
+
156
+ var format = snapshotOptions.format,
157
+ quality = snapshotOptions.quality,
158
+ x = snapshotOptions.x,
159
+ y = snapshotOptions.y,
160
+ w = snapshotOptions.w,
161
+ h = snapshotOptions.h;
162
+ var crop = !isUndefined_1["default"](x) && !isUndefined_1["default"](y) && !isUndefined_1["default"](w) && !isUndefined_1["default"](h);
163
+ var resize = !crop && (!isUndefined_1["default"](w) || !isUndefined_1["default"](h));
164
+ return new Promise(function (resolve, reject) {
165
+ var tempContainer = document.createElement('div');
166
+ tempContainer.style.cssText = 'position:absolute;left: -10000px;';
167
+ document.body.appendChild(tempContainer);
168
+
169
+ var doneFn = function doneFn(err, image) {
170
+ if (err) {
171
+ reject(err);
172
+ return;
173
+ }
174
+
175
+ setTimeout(function () {
176
+ document.body.removeChild(tempContainer);
177
+
178
+ if (!err) {
179
+ resolve(image);
180
+ }
181
+ }, 50);
182
+ };
183
+
184
+ renderMediaStreamToVideoEl(tempContainer, mediaStream, sourceStream).then(function (videoElement) {
185
+ return Promise.resolve(isIE11 ? getImgDataIE11(videoElement) : getImgData(videoElement)).then(function (imgData) {
186
+ if (!imgData || imgData.length < 10) {
187
+ throw new Error('Failed to create a snapshot - imgData is null or empty');
188
+ }
189
+
190
+ doneFn(null, imgData);
191
+ });
192
+ })["catch"](function (error) {
193
+ doneFn(error || new Error('Failed to create a snapshot - can\'t render MediaStream To VideoEl '));
142
194
  });
143
- //Gets image in all browsers except of IE
144
- function getImgData(videoElement) {
145
- var videoWidth = videoElement.videoWidth,
146
- videoHeight = videoElement.videoHeight;
147
- var canvas = document.createElement('canvas');
148
- var ctx = canvas.getContext('2d');
195
+ }); //Gets image in all browsers except of IE
196
+
197
+ function getImgData(videoElement) {
198
+ var videoWidth = videoElement.videoWidth,
199
+ videoHeight = videoElement.videoHeight;
200
+ var canvas = document.createElement('canvas');
201
+ var ctx = canvas.getContext('2d');
202
+
203
+ if (crop) {
204
+ canvas.width = w;
205
+ canvas.height = h;
206
+ ctx.drawImage(videoElement, x, y, w, h, 0, 0, w, h);
207
+ } else if (resize) {
208
+ canvas.width = w;
209
+ canvas.height = h;
210
+ ctx.drawImage(videoElement, 0, 0, w, h);
211
+ } else {
212
+ canvas.height = videoHeight;
213
+ canvas.width = videoWidth;
214
+ ctx.drawImage(videoElement, 0, 0);
215
+ }
216
+
217
+ return canvas.toDataURL(format, quality);
218
+ } //Gets image in IE browser. There should be TechSee IE11 plugin or OpenTok plugin installed.
219
+
220
+
221
+ function getImgDataIE11(videoElement) {
222
+ return new Promise(function (resolve) {
223
+ var videoWidth = videoElement.videoWidth,
224
+ videoHeight = videoElement.videoHeight;
225
+ var canvas = document.createElement('canvas');
226
+ var ctx = canvas.getContext('2d');
227
+
228
+ if (crop || resize) {
229
+ canvas.width = w;
230
+ canvas.height = h;
231
+ } else {
232
+ canvas.height = videoHeight;
233
+ canvas.width = videoWidth;
234
+ }
235
+
236
+ function _drawAndRemove(image) {
149
237
  if (crop) {
150
- canvas.width = w;
151
- canvas.height = h;
152
- ctx.drawImage(videoElement, x, y, w, h, 0, 0, w, h);
238
+ ctx.drawImage(image, x, y, w, h, 0, 0, w, h);
153
239
  } else if (resize) {
154
- canvas.width = w;
155
- canvas.height = h;
156
- ctx.drawImage(videoElement, 0, 0, w, h);
240
+ ctx.drawImage(image, 0, 0, w, h);
157
241
  } else {
158
- canvas.height = videoHeight;
159
- canvas.width = videoWidth;
160
- ctx.drawImage(videoElement, 0, 0);
242
+ ctx.drawImage(image, 0, 0, videoWidth, videoHeight);
161
243
  }
244
+
162
245
  return canvas.toDataURL(format, quality);
163
- }
164
- //Gets image in IE browser. There should be TechSee IE11 plugin or OpenTok plugin installed.
165
- function getImgDataIE11(videoElement) {
166
- return new Promise(function (resolve) {
167
- var videoWidth = videoElement.videoWidth,
168
- videoHeight = videoElement.videoHeight;
169
- var canvas = document.createElement('canvas');
170
- var ctx = canvas.getContext('2d');
171
- if (crop || resize) {
172
- canvas.width = w;
173
- canvas.height = h;
174
- } else {
175
- canvas.height = videoHeight;
176
- canvas.width = videoWidth;
177
- }
178
- function _drawAndRemove(image) {
179
- if (crop) {
180
- ctx.drawImage(image, x, y, w, h, 0, 0, w, h);
181
- } else if (resize) {
182
- ctx.drawImage(image, 0, 0, w, h);
183
- } else {
184
- ctx.drawImage(image, 0, 0, videoWidth, videoHeight);
185
- }
186
- return canvas.toDataURL(format, quality);
187
- }
188
- var base64 = videoElement.getFrame();
189
- var image = new Image();
190
- image.onload = function () {
191
- return resolve(_drawAndRemove(image));
192
- };
193
- image.setAttribute('src', 'data:image/bmp;base64,' + base64);
194
- });
195
- }
246
+ }
247
+
248
+ var base64 = videoElement.getFrame();
249
+ var image = new Image();
250
+
251
+ image.onload = function () {
252
+ return resolve(_drawAndRemove(image));
253
+ };
254
+
255
+ image.setAttribute('src', 'data:image/bmp;base64,' + base64);
256
+ });
257
+ }
196
258
  }
197
- exports.getSnapshotFromMediaStream = getSnapshotFromMediaStream;
198
259
 
199
- //# sourceMappingURL=MediaDomUtils.js.map
260
+ exports.getSnapshotFromMediaStream = getSnapshotFromMediaStream;
200
261
  //# sourceMappingURL=MediaDomUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaUtils/MediaDomUtils.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","isUndefined_1","require","ts_environment_detect_1","retry_with_timeout_1","MediaTracer_1","trace","getMediaTracer","isIE11","TsEnvironmentDetect","renderMediaStreamToVideoEl","container","mediaStream","Promise","resolve","reject","document","body","contains","Error","doResolve","videoEl","info","createElement","muted","playsInline","window","WebRTCAdapter","appendChild","bindVideoElement","srcObject","setAttribute","playRes","play","then","catch","error","handleComplete","parentElement","tagName","waitForObjectSettings","intervalInMs","timeoutInMs","repeatWithTimeout","isVideoPlaying","videoHeight","videoWidth","waitForVideoSettings","removeVideoElementFromDom","unBindVideoElement","parentNode","removeChild","warn","remove","defaultSnapshot","format","quality","getSnapshotFromMediaStream","snapshotOptions","x","y","w","h","crop","default","resize","tempContainer","style","cssText","doneFn","err","image","setTimeout","videoElement","getImgDataIE11","getImgData","imgData","length","canvas","ctx","getContext","width","height","drawImage","toDataURL","_drawAndRemove","base64","getFrame","Image","onload"],"mappings":"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","file":"MediaDomUtils.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isUndefined_1 = __importDefault(require(\"lodash/isUndefined\"));\n//@ts-ignore\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar retry_with_timeout_1 = require(\"@techsee/techsee-common/lib/core/retry-with-timeout\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('DomUtils');\nvar isIE11 = (new ts_environment_detect_1.TsEnvironmentDetect()).isIE11();\nfunction renderMediaStreamToVideoEl(container, mediaStream) {\n return new Promise(function (resolve, reject) {\n if (!document.body.contains(container)) {\n reject(new Error('Cannot render to container that is not attached to dom'));\n return;\n }\n var doResolve = function (videoEl) {\n trace.info('Video element created successfully', { videoEl: videoEl });\n resolve(videoEl);\n };\n var videoEl = document.createElement('video');\n videoEl.muted = true;\n videoEl.playsInline = true;\n if (isIE11 && window.WebRTCAdapter) {\n container.appendChild(videoEl);\n window.WebRTCAdapter.bindVideoElement(videoEl);\n }\n videoEl.srcObject = mediaStream;\n if (!isIE11) {\n // Hack to override behavior introduced by Chrome/FF that unmuted video elements can't auto play\n videoEl.setAttribute('muted', '');\n }\n try {\n var playRes = videoEl.play();\n if (playRes && playRes.then) {\n playRes.then(function () {\n trace.info('Video element play success');\n if (!isIE11) {\n doResolve(videoEl);\n }\n });\n }\n else if (!isIE11) {\n doResolve(videoEl);\n }\n if (playRes && playRes.catch) {\n playRes.catch(function (error) {\n trace.error('Reject while executing play method on video element', error);\n reject(error);\n });\n }\n }\n catch (error) {\n reject(error);\n trace.error('Error while executing play method on video element', error);\n return;\n }\n if (isIE11) {\n var handleComplete = function () { return videoEl.parentElement.tagName !== 'OBJECT'; };\n var waitForObjectSettings = { intervalInMs: 30, timeoutInMs: 200 };\n retry_with_timeout_1.repeatWithTimeout(handleComplete, waitForObjectSettings)\n .then(function () {\n //We will wait, until video is played, then we resolve\n var isVideoPlaying = function () { return videoEl.videoHeight <= 0 || videoEl.videoWidth <= 0; };\n var waitForVideoSettings = { intervalInMs: 50, timeoutInMs: 10000 };\n retry_with_timeout_1.repeatWithTimeout(isVideoPlaying, waitForVideoSettings)\n .then(function () { return doResolve(videoEl.parentElement); })\n .catch(function () { return reject(new Error('Timeout while waiting for video to play')); });\n });\n }\n else {\n container.appendChild(videoEl);\n //doResolve(videoEl);\n }\n });\n}\nexports.renderMediaStreamToVideoEl = renderMediaStreamToVideoEl;\nfunction removeVideoElementFromDom(videoEl) {\n return new Promise(function (resolve) {\n if (isIE11 && window.WebRTCAdapter) {\n window.WebRTCAdapter.unBindVideoElement(videoEl);\n if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {\n videoEl.parentNode.removeChild(videoEl);\n trace.info('Video element removed successfully');\n }\n else {\n trace.warn('Video element not removed', videoEl, videoEl.parentNode);\n }\n }\n else {\n videoEl.remove();\n }\n resolve();\n });\n}\nexports.removeVideoElementFromDom = removeVideoElementFromDom;\nvar defaultSnapshot = {\n format: 'image/png',\n quality: 0.92\n};\nfunction getSnapshotFromMediaStream(mediaStream, snapshotOptions) {\n if (snapshotOptions === void 0) { snapshotOptions = defaultSnapshot; }\n var format = snapshotOptions.format, quality = snapshotOptions.quality, x = snapshotOptions.x, y = snapshotOptions.y, w = snapshotOptions.w, h = snapshotOptions.h;\n var crop = !isUndefined_1.default(x) && !isUndefined_1.default(y) && !isUndefined_1.default(w) && !isUndefined_1.default(h);\n var resize = !crop && (!isUndefined_1.default(w) || !isUndefined_1.default(h));\n return new Promise(function (resolve, reject) {\n var tempContainer = document.createElement('div');\n tempContainer.style.cssText = 'position:absolute;left: -10000px;';\n document.body.appendChild(tempContainer);\n var doneFn = function (err, image) {\n if (err) {\n reject(err);\n return;\n }\n setTimeout(function () {\n document.body.removeChild(tempContainer);\n if (!err) {\n resolve(image);\n }\n }, 50);\n };\n renderMediaStreamToVideoEl(tempContainer, mediaStream)\n .then(function (videoElement) { return Promise.resolve(isIE11 ? getImgDataIE11(videoElement) : getImgData(videoElement))\n .then(function (imgData) {\n if (!imgData || imgData.length < 10) {\n throw new Error('Failed to create a snapshot - imgData is null or empty');\n }\n doneFn(null, imgData);\n }); })\n .catch(function (error) {\n doneFn(error || new Error('Failed to create a snapshot - can\\'t render MediaStream To VideoEl '));\n });\n });\n //Gets image in all browsers except of IE\n function getImgData(videoElement) {\n var videoWidth = videoElement.videoWidth, videoHeight = videoElement.videoHeight;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (crop) {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(videoElement, x, y, w, h, 0, 0, w, h);\n }\n else if (resize) {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(videoElement, 0, 0, w, h);\n }\n else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n ctx.drawImage(videoElement, 0, 0);\n }\n return canvas.toDataURL(format, quality);\n }\n //Gets image in IE browser. There should be TechSee IE11 plugin or OpenTok plugin installed.\n function getImgDataIE11(videoElement) {\n return new Promise(function (resolve) {\n var videoWidth = videoElement.videoWidth, videoHeight = videoElement.videoHeight;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (crop || resize) {\n canvas.width = w;\n canvas.height = h;\n }\n else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n }\n function _drawAndRemove(image) {\n if (crop) {\n ctx.drawImage(image, x, y, w, h, 0, 0, w, h);\n }\n else if (resize) {\n ctx.drawImage(image, 0, 0, w, h);\n }\n else {\n ctx.drawImage(image, 0, 0, videoWidth, videoHeight);\n }\n return canvas.toDataURL(format, quality);\n }\n var base64 = videoElement.getFrame();\n var image = new Image();\n image.onload = function () { return resolve(_drawAndRemove(image)); };\n image.setAttribute('src', 'data:image/bmp;base64,' + base64);\n });\n }\n}\nexports.getSnapshotFromMediaStream = getSnapshotFromMediaStream;\n\n//# sourceMappingURL=MediaDomUtils.js.map\n"]}
1
+ {"version":3,"sources":["MediaUtils/MediaDomUtils.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","getSnapshotFromMediaStream","removeVideoElementFromDom","renderMediaStreamToVideoEl","isUndefined_1","require","ts_environment_detect_1","retry_with_timeout_1","MediaTracer_1","MediaConstants_1","trace","getMediaTracer","isIE11","TsEnvironmentDetect","container","mediaStream","streamType","Promise","resolve","reject","document","body","contains","Error","doResolve","videoEl","info","createElement","muted","playsInline","window","WebRTCAdapter","appendChild","bindVideoElement","srcObject","addEventListener","KnownMediaStream","USER_AUDIO_STREAM","AGENT_AUDIO_STREAM","OBSERVER_AUDIO_STREAM","indexOf","play","setAttribute","playRes","then","error","handleComplete","parentElement","tagName","waitForObjectSettings","intervalInMs","timeoutInMs","repeatWithTimeout","isVideoPlaying","videoHeight","videoWidth","waitForVideoSettings","unBindVideoElement","parentNode","removeChild","warn","remove","defaultSnapshot","format","quality","sourceStream","snapshotOptions","x","y","w","h","crop","resize","tempContainer","style","cssText","doneFn","err","image","setTimeout","videoElement","getImgDataIE11","getImgData","imgData","length","canvas","ctx","getContext","width","height","drawImage","toDataURL","_drawAndRemove","base64","getFrame","Image","onload"],"mappings":"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","file":"MediaDomUtils.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSnapshotFromMediaStream = exports.removeVideoElementFromDom = exports.renderMediaStreamToVideoEl = void 0;\nvar isUndefined_1 = __importDefault(require(\"lodash/isUndefined\"));\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar retry_with_timeout_1 = require(\"@techsee/techsee-common/lib/core/retry-with-timeout\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar trace = MediaTracer_1.getMediaTracer('DomUtils');\nvar isIE11 = (new ts_environment_detect_1.TsEnvironmentDetect()).isIE11();\nfunction renderMediaStreamToVideoEl(container, mediaStream, streamType) {\n return new Promise(function (resolve, reject) {\n if (!document.body.contains(container)) {\n reject(new Error('Cannot render to container that is not attached to dom'));\n return;\n }\n var doResolve = function (videoEl) {\n trace.info('Video element created successfully', { videoEl: videoEl });\n resolve(videoEl);\n };\n var videoEl = document.createElement('video');\n videoEl.muted = true;\n videoEl.playsInline = true;\n if (isIE11 && window.WebRTCAdapter) {\n container.appendChild(videoEl);\n window.WebRTCAdapter.bindVideoElement(videoEl);\n }\n videoEl.srcObject = mediaStream;\n // When unplugged the headphones in ios the video element got paused.\n videoEl.addEventListener('pause', function () {\n if ([MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM, MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM, MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM]\n .indexOf(streamType) > -1) {\n trace.info('Video element got paused. IOS headphones disconnected');\n videoEl.play();\n }\n });\n if (!isIE11) {\n // Hack to override behavior introduced by Chrome/FF that unmuted video elements can't auto play\n videoEl.setAttribute('muted', '');\n }\n try {\n var playRes = videoEl.play();\n if (playRes && playRes.then) {\n playRes.then(function () {\n trace.info('Video element play success');\n if (!isIE11) {\n doResolve(videoEl);\n }\n });\n }\n else if (!isIE11) {\n doResolve(videoEl);\n }\n if (playRes && playRes.catch) {\n playRes.catch(function (error) {\n trace.error('Reject while executing play method on video element', error);\n reject(error);\n });\n }\n }\n catch (error) {\n reject(error);\n trace.error('Error while executing play method on video element', error);\n return;\n }\n if (isIE11) {\n var handleComplete = function () { return videoEl.parentElement.tagName !== 'OBJECT'; };\n var waitForObjectSettings = { intervalInMs: 30, timeoutInMs: 200 };\n retry_with_timeout_1.repeatWithTimeout(handleComplete, waitForObjectSettings)\n .then(function () {\n //We will wait, until video is played, then we resolve\n var isVideoPlaying = function () { return videoEl.videoHeight <= 0 || videoEl.videoWidth <= 0; };\n var waitForVideoSettings = { intervalInMs: 50, timeoutInMs: 10000 };\n retry_with_timeout_1.repeatWithTimeout(isVideoPlaying, waitForVideoSettings)\n .then(function () { return doResolve(videoEl.parentElement); })\n .catch(function () { return reject(new Error('Timeout while waiting for video to play')); });\n });\n }\n else {\n container.appendChild(videoEl);\n //doResolve(videoEl);\n }\n });\n}\nexports.renderMediaStreamToVideoEl = renderMediaStreamToVideoEl;\nfunction removeVideoElementFromDom(videoEl) {\n return new Promise(function (resolve) {\n if (isIE11 && window.WebRTCAdapter) {\n window.WebRTCAdapter.unBindVideoElement(videoEl);\n if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {\n videoEl.parentNode.removeChild(videoEl);\n trace.info('Video element removed successfully');\n }\n else {\n trace.warn('Video element not removed', videoEl, videoEl.parentNode);\n }\n }\n else {\n videoEl.remove();\n }\n resolve();\n });\n}\nexports.removeVideoElementFromDom = removeVideoElementFromDom;\nvar defaultSnapshot = {\n format: 'image/png',\n quality: 0.92\n};\nfunction getSnapshotFromMediaStream(mediaStream, sourceStream, snapshotOptions) {\n if (snapshotOptions === void 0) { snapshotOptions = defaultSnapshot; }\n var format = snapshotOptions.format, quality = snapshotOptions.quality, x = snapshotOptions.x, y = snapshotOptions.y, w = snapshotOptions.w, h = snapshotOptions.h;\n var crop = !isUndefined_1.default(x) && !isUndefined_1.default(y) && !isUndefined_1.default(w) && !isUndefined_1.default(h);\n var resize = !crop && (!isUndefined_1.default(w) || !isUndefined_1.default(h));\n return new Promise(function (resolve, reject) {\n var tempContainer = document.createElement('div');\n tempContainer.style.cssText = 'position:absolute;left: -10000px;';\n document.body.appendChild(tempContainer);\n var doneFn = function (err, image) {\n if (err) {\n reject(err);\n return;\n }\n setTimeout(function () {\n document.body.removeChild(tempContainer);\n if (!err) {\n resolve(image);\n }\n }, 50);\n };\n renderMediaStreamToVideoEl(tempContainer, mediaStream, sourceStream)\n .then(function (videoElement) { return Promise.resolve(isIE11 ? getImgDataIE11(videoElement) : getImgData(videoElement))\n .then(function (imgData) {\n if (!imgData || imgData.length < 10) {\n throw new Error('Failed to create a snapshot - imgData is null or empty');\n }\n doneFn(null, imgData);\n }); })\n .catch(function (error) {\n doneFn(error || new Error('Failed to create a snapshot - can\\'t render MediaStream To VideoEl '));\n });\n });\n //Gets image in all browsers except of IE\n function getImgData(videoElement) {\n var videoWidth = videoElement.videoWidth, videoHeight = videoElement.videoHeight;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (crop) {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(videoElement, x, y, w, h, 0, 0, w, h);\n }\n else if (resize) {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(videoElement, 0, 0, w, h);\n }\n else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n ctx.drawImage(videoElement, 0, 0);\n }\n return canvas.toDataURL(format, quality);\n }\n //Gets image in IE browser. There should be TechSee IE11 plugin or OpenTok plugin installed.\n function getImgDataIE11(videoElement) {\n return new Promise(function (resolve) {\n var videoWidth = videoElement.videoWidth, videoHeight = videoElement.videoHeight;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (crop || resize) {\n canvas.width = w;\n canvas.height = h;\n }\n else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n }\n function _drawAndRemove(image) {\n if (crop) {\n ctx.drawImage(image, x, y, w, h, 0, 0, w, h);\n }\n else if (resize) {\n ctx.drawImage(image, 0, 0, w, h);\n }\n else {\n ctx.drawImage(image, 0, 0, videoWidth, videoHeight);\n }\n return canvas.toDataURL(format, quality);\n }\n var base64 = videoElement.getFrame();\n var image = new Image();\n image.onload = function () { return resolve(_drawAndRemove(image)); };\n image.setAttribute('src', 'data:image/bmp;base64,' + base64);\n });\n }\n}\nexports.getSnapshotFromMediaStream = getSnapshotFromMediaStream;\n\n//# sourceMappingURL=MediaDomUtils.js.map\n"]}
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
2
 
3
- Object.defineProperty(exports, "__esModule", { value: true });
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getMediaTracer = exports.TECHSEE_MEDIA_TRACER = void 0;
7
+
4
8
  var Tracer_1 = require("@techsee/techsee-common/lib/core/Tracer");
9
+
5
10
  exports.TECHSEE_MEDIA_TRACER = 'MediaTracer';
11
+
6
12
  function getMediaTracer(postfixName) {
7
- return Tracer_1.getTracer(exports.TECHSEE_MEDIA_TRACER, postfixName);
13
+ return Tracer_1.getTracer(exports.TECHSEE_MEDIA_TRACER, postfixName);
8
14
  }
9
- exports.getMediaTracer = getMediaTracer;
10
15
 
11
- //# sourceMappingURL=MediaTracer.js.map
16
+ exports.getMediaTracer = getMediaTracer;
12
17
  //# sourceMappingURL=MediaTracer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaUtils/MediaTracer.js"],"names":["Object","defineProperty","exports","value","Tracer_1","require","TECHSEE_MEDIA_TRACER","getMediaTracer","postfixName","getTracer"],"mappings":"AAAA;;AACAA,OAAOC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C,EAAEC,OAAO,IAAT,EAA7C;AACA,IAAIC,WAAWC,QAAQ,yCAAR,CAAf;AACAH,QAAQI,oBAAR,GAA+B,aAA/B;AACA,SAASC,cAAT,CAAwBC,WAAxB,EAAqC;AACjC,WAAOJ,SAASK,SAAT,CAAmBP,QAAQI,oBAA3B,EAAiDE,WAAjD,CAAP;AACH;AACDN,QAAQK,cAAR,GAAyBA,cAAzB;;AAEA","file":"MediaTracer.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Tracer_1 = require(\"@techsee/techsee-common/lib/core/Tracer\");\nexports.TECHSEE_MEDIA_TRACER = 'MediaTracer';\nfunction getMediaTracer(postfixName) {\n return Tracer_1.getTracer(exports.TECHSEE_MEDIA_TRACER, postfixName);\n}\nexports.getMediaTracer = getMediaTracer;\n\n//# sourceMappingURL=MediaTracer.js.map\n"]}
1
+ {"version":3,"sources":["MediaUtils/MediaTracer.js"],"names":["Object","defineProperty","exports","value","getMediaTracer","TECHSEE_MEDIA_TRACER","Tracer_1","require","postfixName","getTracer"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,cAAR,GAAyBF,OAAO,CAACG,oBAAR,GAA+B,KAAK,CAA7D;;AACA,IAAIC,QAAQ,GAAGC,OAAO,CAAC,yCAAD,CAAtB;;AACAL,OAAO,CAACG,oBAAR,GAA+B,aAA/B;;AACA,SAASD,cAAT,CAAwBI,WAAxB,EAAqC;AACjC,SAAOF,QAAQ,CAACG,SAAT,CAAmBP,OAAO,CAACG,oBAA3B,EAAiDG,WAAjD,CAAP;AACH;;AACDN,OAAO,CAACE,cAAR,GAAyBA,cAAzB","file":"MediaTracer.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMediaTracer = exports.TECHSEE_MEDIA_TRACER = void 0;\nvar Tracer_1 = require(\"@techsee/techsee-common/lib/core/Tracer\");\nexports.TECHSEE_MEDIA_TRACER = 'MediaTracer';\nfunction getMediaTracer(postfixName) {\n return Tracer_1.getTracer(exports.TECHSEE_MEDIA_TRACER, postfixName);\n}\nexports.getMediaTracer = getMediaTracer;\n\n//# sourceMappingURL=MediaTracer.js.map\n"]}
@@ -0,0 +1 @@
1
+ export { getMediaTracer } from './MediaTracer';
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/MediaUtils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC","file":"index.d.ts","sourcesContent":["export {getMediaTracer} from './MediaTracer';\n"]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getMediaTracer = void 0;
7
+
8
+ var MediaTracer_1 = require("./MediaTracer");
9
+
10
+ Object.defineProperty(exports, "getMediaTracer", {
11
+ enumerable: true,
12
+ get: function get() {
13
+ return MediaTracer_1.getMediaTracer;
14
+ }
15
+ });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["MediaUtils/index.js"],"names":["Object","defineProperty","exports","value","getMediaTracer","MediaTracer_1","require","enumerable","get"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,cAAR,GAAyB,KAAK,CAA9B;;AACA,IAAIC,aAAa,GAAGC,OAAO,CAAC,eAAD,CAA3B;;AACAN,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,gBAA/B,EAAiD;AAAEK,EAAAA,UAAU,EAAE,IAAd;AAAoBC,EAAAA,GAAG,EAAE,eAAY;AAAE,WAAOH,aAAa,CAACD,cAArB;AAAsC;AAA7E,CAAjD","file":"index.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMediaTracer = void 0;\nvar MediaTracer_1 = require(\"./MediaTracer\");\nObject.defineProperty(exports, \"getMediaTracer\", { enumerable: true, get: function () { return MediaTracer_1.getMediaTracer; } });\n\n//# sourceMappingURL=index.js.map\n"]}
@@ -0,0 +1,16 @@
1
+ import { MultiPartyCameraTypes, MediaServiceType } from '../MediaConstants';
2
+ export declare type Credentials = {
3
+ apiKey: string;
4
+ sessionId: string;
5
+ token: string;
6
+ };
7
+ export declare type BrandingSettings = {
8
+ backgroundImageURI?: string;
9
+ };
10
+ export declare type SessionSettings = {
11
+ selectedCamera: MultiPartyCameraTypes;
12
+ cameraEnabled: boolean;
13
+ startWithAudioMuted: boolean;
14
+ mediaServiceType: MediaServiceType;
15
+ branding?: BrandingSettings;
16
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/MultiParty/Contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAE1E,oBAAY,WAAW,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,oBAAY,gBAAgB,GAAG;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,oBAAY,eAAe,GAAG;IAC1B,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,EAAE,OAAO,CAAA;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC9B,CAAA","file":"Contracts.d.ts","sourcesContent":["import {MultiPartyCameraTypes, MediaServiceType} from '../MediaConstants';\n\nexport type Credentials = {\n apiKey: string,\n sessionId: string,\n token: string\n}\n\nexport type BrandingSettings = {\n backgroundImageURI?: string;\n};\n\nexport type SessionSettings = {\n selectedCamera: MultiPartyCameraTypes,\n cameraEnabled: boolean\n startWithAudioMuted: boolean,\n mediaServiceType: MediaServiceType,\n branding?: BrandingSettings\n}\n"]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=Contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["MultiParty/Contracts.js"],"names":["Object","defineProperty","exports","value"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\n//# sourceMappingURL=Contracts.js.map\n"],"file":"Contracts.js"}
@@ -0,0 +1,16 @@
1
+ import { ClientWebRtcInfo } from '@techsee/techsee-common/lib/data-contracts/ClientInfo';
2
+ export declare const DETECT_RTC_ADVISED_TIMEOUT = 20;
3
+ export interface WebRtcNativeService extends ClientWebRtcInfo {
4
+ load(doneCb: Function): void;
5
+ }
6
+ export interface IWebRtcDetector {
7
+ getWebRtcInfo(): Promise<ClientWebRtcInfo>;
8
+ }
9
+ export declare class DetectWebRtcService implements IWebRtcDetector {
10
+ private _cachedResult;
11
+ private readonly _nativeService;
12
+ private readonly _detectionTimeoutSec;
13
+ constructor(detectionTimeoutSec: number);
14
+ getWebRtcInfo(): Promise<ClientWebRtcInfo>;
15
+ private static getDefaultResult;
16
+ }