@techsee/techsee-media-service 18.6.1 → 19.1.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 (141) hide show
  1. package/lib/LocalStreamManager.d.ts +1 -0
  2. package/lib/LocalStreamManager.d.ts.map +1 -1
  3. package/lib/LocalStreamManager.js +320 -441
  4. package/lib/LocalStreamManager.js.map +1 -1
  5. package/lib/MediaConstants.d.ts +1 -0
  6. package/lib/MediaConstants.d.ts.map +1 -1
  7. package/lib/MediaConstants.js +53 -95
  8. package/lib/MediaConstants.js.map +1 -1
  9. package/lib/MediaContracts.d.ts +1 -0
  10. package/lib/MediaContracts.d.ts.map +1 -1
  11. package/lib/MediaContracts.js +2 -5
  12. package/lib/MediaContracts.js.map +1 -1
  13. package/lib/MediaPublisher.d.ts +1 -0
  14. package/lib/MediaPublisher.d.ts.map +1 -1
  15. package/lib/MediaPublisher.js +36 -49
  16. package/lib/MediaPublisher.js.map +1 -1
  17. package/lib/MediaServiceBase.d.ts +1 -0
  18. package/lib/MediaServiceBase.d.ts.map +1 -1
  19. package/lib/MediaServiceBase.js +687 -937
  20. package/lib/MediaServiceBase.js.map +1 -1
  21. package/lib/MediaSession/MediaServer.d.ts +1 -0
  22. package/lib/MediaSession/MediaServer.d.ts.map +1 -1
  23. package/lib/MediaSession/MediaServer.js +372 -517
  24. package/lib/MediaSession/MediaServer.js.map +1 -1
  25. package/lib/MediaSession/MediaSessionBase.d.ts +1 -0
  26. package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
  27. package/lib/MediaSession/MediaSessionBase.js +88 -127
  28. package/lib/MediaSession/MediaSessionBase.js.map +1 -1
  29. package/lib/MediaSession/SessionOpentok.d.ts +1 -0
  30. package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
  31. package/lib/MediaSession/SessionOpentok.js +357 -503
  32. package/lib/MediaSession/SessionOpentok.js.map +1 -1
  33. package/lib/MediaSession/SessionTurn.d.ts +1 -0
  34. package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
  35. package/lib/MediaSession/SessionTurn.js +431 -613
  36. package/lib/MediaSession/SessionTurn.js.map +1 -1
  37. package/lib/MediaSession/TurnConstants.d.ts +1 -0
  38. package/lib/MediaSession/TurnConstants.d.ts.map +1 -1
  39. package/lib/MediaSession/TurnConstants.js +17 -32
  40. package/lib/MediaSession/TurnConstants.js.map +1 -1
  41. package/lib/MediaSubscriber.d.ts +1 -0
  42. package/lib/MediaSubscriber.d.ts.map +1 -1
  43. package/lib/MediaSubscriber.js +189 -245
  44. package/lib/MediaSubscriber.js.map +1 -1
  45. package/lib/MediaUtils/Compatibility.d.ts +1 -0
  46. package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
  47. package/lib/MediaUtils/Compatibility.js +129 -283
  48. package/lib/MediaUtils/Compatibility.js.map +1 -1
  49. package/lib/MediaUtils/MediaDomUtils.d.ts +1 -0
  50. package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
  51. package/lib/MediaUtils/MediaDomUtils.js +184 -252
  52. package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
  53. package/lib/MediaUtils/MediaTracer.d.ts +1 -0
  54. package/lib/MediaUtils/MediaTracer.d.ts.map +1 -1
  55. package/lib/MediaUtils/MediaTracer.js +3 -10
  56. package/lib/MediaUtils/MediaTracer.js.map +1 -1
  57. package/lib/MediaUtils/index.d.ts +1 -0
  58. package/lib/MediaUtils/index.d.ts.map +1 -1
  59. package/lib/MediaUtils/index.js +3 -13
  60. package/lib/MediaUtils/index.js.map +1 -1
  61. package/lib/MultiParty/DetectWebRtcService.d.ts +1 -0
  62. package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -1
  63. package/lib/MultiParty/DetectWebRtcService.js +92 -241
  64. package/lib/MultiParty/DetectWebRtcService.js.map +1 -1
  65. package/lib/MultiParty/MediaCapabilitiesService.d.ts +1 -0
  66. package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -1
  67. package/lib/MultiParty/MediaCapabilitiesService.js +143 -312
  68. package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -1
  69. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts +1 -0
  70. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -1
  71. package/lib/MultiParty/MediaCapabilitiesUtils.js +95 -277
  72. package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -1
  73. package/lib/MultiParty/MediaTracer.d.ts +1 -0
  74. package/lib/MultiParty/MediaTracer.d.ts.map +1 -1
  75. package/lib/MultiParty/MediaTracer.js +3 -10
  76. package/lib/MultiParty/MediaTracer.js.map +1 -1
  77. package/lib/MultiParty/MultiPartyService.d.ts +1 -0
  78. package/lib/MultiParty/MultiPartyService.d.ts.map +1 -1
  79. package/lib/MultiParty/MultiPartyService.js +24 -47
  80. package/lib/MultiParty/MultiPartyService.js.map +1 -1
  81. package/lib/MultiParty/MultiPartyServiceFactory.d.ts +2 -1
  82. package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -1
  83. package/lib/MultiParty/MultiPartyServiceFactory.js +7 -15
  84. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -1
  85. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts +1 -0
  86. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts.map +1 -1
  87. package/lib/MultiParty/MultipartyServiceEventTypes.js +11 -15
  88. package/lib/MultiParty/MultipartyServiceEventTypes.js.map +1 -1
  89. package/lib/MultiParty/index.d.ts +1 -0
  90. package/lib/MultiParty/index.d.ts.map +1 -1
  91. package/lib/MultiParty/index.js +15 -35
  92. package/lib/MultiParty/index.js.map +1 -1
  93. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts +2 -1
  94. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts.map +1 -1
  95. package/lib/MultiParty/opentok/OpentokMultiPartyService.js +457 -839
  96. package/lib/MultiParty/opentok/OpentokMultiPartyService.js.map +1 -1
  97. package/lib/MultiParty/opentok/OpentokPublisher.d.ts +1 -0
  98. package/lib/MultiParty/opentok/OpentokPublisher.d.ts.map +1 -1
  99. package/lib/MultiParty/opentok/OpentokPublisher.js +107 -269
  100. package/lib/MultiParty/opentok/OpentokPublisher.js.map +1 -1
  101. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts +1 -0
  102. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts.map +1 -1
  103. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js +34 -54
  104. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js.map +1 -1
  105. package/lib/MultiParty/opentok/OpentokScreenPublisher.d.ts +1 -0
  106. package/lib/MultiParty/opentok/OpentokScreenPublisher.d.ts.map +1 -1
  107. package/lib/MultiParty/opentok/OpentokScreenPublisher.js +40 -77
  108. package/lib/MultiParty/opentok/OpentokScreenPublisher.js.map +1 -1
  109. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts +1 -0
  110. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts.map +1 -1
  111. package/lib/MultiParty/opentok/OpentokSubscriber.js +20 -28
  112. package/lib/MultiParty/opentok/OpentokSubscriber.js.map +1 -1
  113. package/lib/MultiParty/opentok/OpentokVideoPublisher.d.ts +1 -0
  114. package/lib/MultiParty/opentok/OpentokVideoPublisher.d.ts.map +1 -1
  115. package/lib/MultiParty/opentok/OpentokVideoPublisher.js +150 -355
  116. package/lib/MultiParty/opentok/OpentokVideoPublisher.js.map +1 -1
  117. package/lib/MultiParty/opentok/trace.d.ts +1 -0
  118. package/lib/MultiParty/opentok/trace.d.ts.map +1 -1
  119. package/lib/MultiParty/opentok/trace.js +11 -24
  120. package/lib/MultiParty/opentok/trace.js.map +1 -1
  121. package/lib/MultiParty/types.d.ts +1 -0
  122. package/lib/MultiParty/types.d.ts.map +1 -1
  123. package/lib/MultiParty/types.js +2 -5
  124. package/lib/MultiParty/types.js.map +1 -1
  125. package/lib/MultiParty/utils.d.ts +1 -0
  126. package/lib/MultiParty/utils.d.ts.map +1 -1
  127. package/lib/MultiParty/utils.js +5 -15
  128. package/lib/MultiParty/utils.js.map +1 -1
  129. package/lib/TechseeMediaStream.d.ts +1 -0
  130. package/lib/TechseeMediaStream.d.ts.map +1 -1
  131. package/lib/TechseeMediaStream.js +53 -61
  132. package/lib/TechseeMediaStream.js.map +1 -1
  133. package/lib/qos/raw-qos.d.ts +29 -0
  134. package/lib/qos/raw-qos.d.ts.map +1 -0
  135. package/lib/qos/raw-qos.js +247 -382
  136. package/lib/qos/raw-qos.js.map +1 -1
  137. package/lib/webrtc-ie-shim.d.ts +4 -0
  138. package/lib/webrtc-ie-shim.d.ts.map +1 -0
  139. package/lib/webrtc-ie-shim.js +1999 -3454
  140. package/lib/webrtc-ie-shim.js.map +1 -1
  141. package/package.json +42 -46
@@ -1,263 +1,207 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.TechseeMediaSubscriber = void 0;
7
-
8
4
  var events_1 = require("events");
9
-
10
5
  var MediaDomUtils_1 = require("./MediaUtils/MediaDomUtils");
11
-
12
6
  var MediaConstants_1 = require("./MediaConstants");
13
-
14
7
  var MediaTracer_1 = require("./MediaUtils/MediaTracer");
15
-
16
8
  var Compatibility_1 = require("./MediaUtils/Compatibility");
17
-
18
- var trace = MediaTracer_1.getMediaTracer('MediaSubscriber');
9
+ var trace = (0, MediaTracer_1.getMediaTracer)('MediaSubscriber');
19
10
  var privateEvents;
20
-
21
11
  (function (privateEvents) {
22
- privateEvents["STREAM_STATE_CHANGE"] = "STREAM_STATE_CHANGE";
23
- privateEvents["SUBSCRIBER_DISPOSE"] = "SUBSCRIBER_DISPOSE";
12
+ privateEvents["STREAM_STATE_CHANGE"] = "STREAM_STATE_CHANGE";
13
+ privateEvents["SUBSCRIBER_DISPOSE"] = "SUBSCRIBER_DISPOSE";
24
14
  })(privateEvents || (privateEvents = {}));
25
-
26
- var TechseeMediaSubscriber =
27
- /** @class */
28
- function () {
29
- function TechseeMediaSubscriber(subscriberParams) {
30
- this._isDisposed = false;
31
- this._isPlaying = false;
32
- this._hasVideo = false;
33
- this._hasAudio = false;
34
- this._mediaElement = null;
35
- trace.info('Subscriber created');
36
- this.videoResizeHandler = this.videoResizeHandler.bind(this);
37
- this._emitter = new events_1.EventEmitter();
38
- this._subscriberParams = subscriberParams;
39
- }
40
-
41
- Object.defineProperty(TechseeMediaSubscriber.prototype, "streamType", {
42
- //#region IMediaSubscriber
43
- get: function get() {
44
- return this._subscriberParams.streamType;
45
- },
46
- enumerable: false,
47
- configurable: true
48
- });
49
- Object.defineProperty(TechseeMediaSubscriber.prototype, "container", {
50
- get: function get() {
51
- return this._subscriberParams.container;
52
- },
53
- enumerable: false,
54
- configurable: true
55
- });
56
- Object.defineProperty(TechseeMediaSubscriber.prototype, "isPlaying", {
57
- get: function get() {
58
- return this._isPlaying;
59
- },
60
- enumerable: false,
61
- configurable: true
62
- });
63
- Object.defineProperty(TechseeMediaSubscriber.prototype, "isSoundMuted", {
64
- get: function get() {
65
- if (!this._mediaElement) {
66
- return true;
67
- }
68
-
69
- return this._mediaElement.muted;
70
- },
71
- enumerable: false,
72
- configurable: true
73
- });
74
- Object.defineProperty(TechseeMediaSubscriber.prototype, "hasAudio", {
75
- get: function get() {
76
- return this._hasAudio;
77
- },
78
- enumerable: false,
79
- configurable: true
80
- });
81
- Object.defineProperty(TechseeMediaSubscriber.prototype, "hasVideo", {
82
- get: function get() {
83
- return this._hasVideo;
84
- },
85
- enumerable: false,
86
- configurable: true
87
- });
88
- Object.defineProperty(TechseeMediaSubscriber.prototype, "mediaElement", {
89
- get: function get() {
90
- return this._mediaElement;
91
- },
92
- enumerable: false,
93
- configurable: true
94
- });
95
- Object.defineProperty(TechseeMediaSubscriber.prototype, "videoWidth", {
96
- get: function get() {
97
- return this.mediaElement ? this.mediaElement.videoWidth : 0;
98
- },
99
- enumerable: false,
100
- configurable: true
101
- });
102
- Object.defineProperty(TechseeMediaSubscriber.prototype, "videoHeight", {
103
- get: function get() {
104
- return this.mediaElement ? this.mediaElement.videoHeight : 0;
105
- },
106
- enumerable: false,
107
- configurable: true
108
- });
109
- Object.defineProperty(TechseeMediaSubscriber.prototype, "renderWidth", {
110
- get: function get() {
111
- return this.container.offsetWidth;
112
- },
113
- enumerable: false,
114
- configurable: true
115
- });
116
- Object.defineProperty(TechseeMediaSubscriber.prototype, "renderHeight", {
117
- get: function get() {
118
- return this.container.offsetHeight;
119
- },
120
- enumerable: false,
121
- configurable: true
122
- });
123
-
124
- TechseeMediaSubscriber.prototype.muteSound = function (isMuted) {
125
- this.throwIfDisposed();
126
- trace.info('Subscriber mute change - isMuted =', isMuted);
127
-
128
- if (this._mediaElement && this._mediaElement.muted !== isMuted) {
129
- this._mediaElement.muted = isMuted;
130
- this.emitEvent(privateEvents.STREAM_STATE_CHANGE);
15
+ var TechseeMediaSubscriber = (function () {
16
+ function TechseeMediaSubscriber(subscriberParams) {
17
+ this._isDisposed = false;
18
+ this._isPlaying = false;
19
+ this._hasVideo = false;
20
+ this._hasAudio = false;
21
+ this._mediaElement = null;
22
+ trace.info('Subscriber created');
23
+ this.videoResizeHandler = this.videoResizeHandler.bind(this);
24
+ this._emitter = new events_1.EventEmitter();
25
+ this._subscriberParams = subscriberParams;
131
26
  }
132
- };
133
-
134
- TechseeMediaSubscriber.prototype.onStateChanged = function (callback) {
135
- this.throwIfDisposed();
136
-
137
- this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);
138
- };
139
-
140
- TechseeMediaSubscriber.prototype.onDispose = function (callback) {
141
- this.throwIfDisposed();
142
-
143
- this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);
144
- }; //#endregion
145
- //#region Non Interface Methods
146
-
147
-
148
- TechseeMediaSubscriber.prototype.renderStream = function (stream) {
149
- var _this = this;
150
-
151
- this.throwIfDisposed();
152
- this.stopRenderInternal().then(function () {
153
- return MediaDomUtils_1.renderMediaStreamToVideoEl(_this.container, stream.mediaStream, stream.streamType);
154
- }).then(function (videoEl) {
155
- _this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;
156
- _this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;
157
-
158
- _this.setPlayingState(videoEl, stream.streamKind);
159
-
160
- if (_this._hasAudio) {
161
- _this.muteSound(false);
162
- }
163
- })["catch"](function (error) {
164
- trace.warn('Error while rendering stream on video element', error);
27
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "streamType", {
28
+ get: function () {
29
+ return this._subscriberParams.streamType;
30
+ },
31
+ enumerable: false,
32
+ configurable: true
165
33
  });
166
- };
167
-
168
- TechseeMediaSubscriber.prototype.stopRendering = function () {
169
- var _this = this;
170
-
171
- return this.stopRenderInternal().then(function () {
172
- return _this.setPlayingState();
34
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "container", {
35
+ get: function () {
36
+ return this._subscriberParams.container;
37
+ },
38
+ enumerable: false,
39
+ configurable: true
173
40
  });
174
- };
175
-
176
- TechseeMediaSubscriber.prototype.dispose = function () {
177
- if (this._isDisposed) {
178
- return;
179
- }
180
-
181
- this.stopRendering()["catch"](function () {
182
- return undefined;
41
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "isPlaying", {
42
+ get: function () {
43
+ return this._isPlaying;
44
+ },
45
+ enumerable: false,
46
+ configurable: true
47
+ });
48
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "isSoundMuted", {
49
+ get: function () {
50
+ if (!this._mediaElement) {
51
+ return true;
52
+ }
53
+ return this._mediaElement.muted;
54
+ },
55
+ enumerable: false,
56
+ configurable: true
57
+ });
58
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "hasAudio", {
59
+ get: function () {
60
+ return this._hasAudio;
61
+ },
62
+ enumerable: false,
63
+ configurable: true
64
+ });
65
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "hasVideo", {
66
+ get: function () {
67
+ return this._hasVideo;
68
+ },
69
+ enumerable: false,
70
+ configurable: true
71
+ });
72
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "mediaElement", {
73
+ get: function () {
74
+ return this._mediaElement;
75
+ },
76
+ enumerable: false,
77
+ configurable: true
78
+ });
79
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "videoWidth", {
80
+ get: function () {
81
+ return this.mediaElement ? this.mediaElement.videoWidth : 0;
82
+ },
83
+ enumerable: false,
84
+ configurable: true
183
85
  });
184
- this._isDisposed = true;
185
-
186
- this._emitter.removeAllListeners();
187
-
188
- trace.info('Subscriber disposed');
189
- this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);
190
- }; //#endregion
191
-
192
-
193
- TechseeMediaSubscriber.prototype.setPlayingState = function (mediaElement, streamKind) {
194
- var _this = this;
195
-
196
- this._isPlaying = !!mediaElement;
197
- this._mediaElement = mediaElement || null;
198
-
199
- var finalize = function finalize() {
200
- _this.emitEvent(privateEvents.STREAM_STATE_CHANGE);
201
-
202
- trace.info("Video element " + (streamKind || '') + " " + (_this.isPlaying ? 'play' : 'stop') + " success");
86
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "videoHeight", {
87
+ get: function () {
88
+ return this.mediaElement ? this.mediaElement.videoHeight : 0;
89
+ },
90
+ enumerable: false,
91
+ configurable: true
92
+ });
93
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "renderWidth", {
94
+ get: function () {
95
+ return this.container.offsetWidth;
96
+ },
97
+ enumerable: false,
98
+ configurable: true
99
+ });
100
+ Object.defineProperty(TechseeMediaSubscriber.prototype, "renderHeight", {
101
+ get: function () {
102
+ return this.container.offsetHeight;
103
+ },
104
+ enumerable: false,
105
+ configurable: true
106
+ });
107
+ TechseeMediaSubscriber.prototype.muteSound = function (isMuted) {
108
+ this.throwIfDisposed();
109
+ trace.info('Subscriber mute change - isMuted =', isMuted);
110
+ if (this._mediaElement && this._mediaElement.muted !== isMuted) {
111
+ this._mediaElement.muted = isMuted;
112
+ this.emitEvent(privateEvents.STREAM_STATE_CHANGE);
113
+ }
114
+ };
115
+ TechseeMediaSubscriber.prototype.onStateChanged = function (callback) {
116
+ this.throwIfDisposed();
117
+ this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);
118
+ };
119
+ TechseeMediaSubscriber.prototype.onDispose = function (callback) {
120
+ this.throwIfDisposed();
121
+ this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);
122
+ };
123
+ TechseeMediaSubscriber.prototype.renderStream = function (stream) {
124
+ var _this = this;
125
+ this.throwIfDisposed();
126
+ this.stopRenderInternal()
127
+ .then(function () { return (0, MediaDomUtils_1.renderMediaStreamToVideoEl)(_this.container, stream.mediaStream, stream.streamType); })
128
+ .then(function (videoEl) {
129
+ _this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;
130
+ _this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;
131
+ _this.setPlayingState(videoEl, stream.streamKind);
132
+ if (_this._hasAudio) {
133
+ _this.muteSound(false);
134
+ }
135
+ })
136
+ .catch(function (error) {
137
+ trace.warn('Error while rendering stream on video element', error);
138
+ });
203
139
  };
204
-
205
- if (this._mediaElement && streamKind === MediaConstants_1.KnownMediaStreamKind.Video) {
206
- if (this._mediaElement.videoHeight === 0) {
207
- var disposeResizeHandler_1 = null;
208
-
209
- var resizeHandler = function resizeHandler() {
210
- disposeResizeHandler_1 && disposeResizeHandler_1();
211
- Compatibility_1.onMediaElementResize(_this._mediaElement, _this.videoResizeHandler);
212
- finalize();
140
+ TechseeMediaSubscriber.prototype.stopRendering = function () {
141
+ var _this = this;
142
+ return this.stopRenderInternal().then(function () { return _this.setPlayingState(); });
143
+ };
144
+ TechseeMediaSubscriber.prototype.dispose = function () {
145
+ if (this._isDisposed) {
146
+ return;
147
+ }
148
+ this.stopRendering().catch(function () { return undefined; });
149
+ this._isDisposed = true;
150
+ this._emitter.removeAllListeners();
151
+ trace.info('Subscriber disposed');
152
+ this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);
153
+ };
154
+ TechseeMediaSubscriber.prototype.setPlayingState = function (mediaElement, streamKind) {
155
+ var _this = this;
156
+ this._isPlaying = !!mediaElement;
157
+ this._mediaElement = mediaElement || null;
158
+ var finalize = function () {
159
+ _this.emitEvent(privateEvents.STREAM_STATE_CHANGE);
160
+ trace.info("Video element ".concat(streamKind || '', " ").concat(_this.isPlaying ? 'play' : 'stop', " success"));
213
161
  };
214
-
215
- disposeResizeHandler_1 = Compatibility_1.onMediaElementResize(this._mediaElement, resizeHandler);
216
- } else {
217
- Compatibility_1.onMediaElementResize(this._mediaElement, this.videoResizeHandler);
218
- finalize();
219
- }
220
- } else {
221
- finalize();
222
- }
223
- };
224
-
225
- TechseeMediaSubscriber.prototype.videoResizeHandler = function () {
226
- trace.info("Video resize, new size = w: " + this.videoWidth + " h:" + this.videoHeight);
227
- var resolution = {
228
- videoWidth: this.videoWidth,
229
- videoHeight: this.videoHeight
162
+ if (this._mediaElement && streamKind === MediaConstants_1.KnownMediaStreamKind.Video) {
163
+ if (this._mediaElement.videoHeight === 0) {
164
+ var disposeResizeHandler_1 = null;
165
+ var resizeHandler = function () {
166
+ disposeResizeHandler_1 && disposeResizeHandler_1();
167
+ (0, Compatibility_1.onMediaElementResize)(_this._mediaElement, _this.videoResizeHandler);
168
+ finalize();
169
+ };
170
+ disposeResizeHandler_1 = (0, Compatibility_1.onMediaElementResize)(this._mediaElement, resizeHandler);
171
+ }
172
+ else {
173
+ (0, Compatibility_1.onMediaElementResize)(this._mediaElement, this.videoResizeHandler);
174
+ finalize();
175
+ }
176
+ }
177
+ else {
178
+ finalize();
179
+ }
230
180
  };
231
- var resolutionFormat = MediaDomUtils_1.calculateResolution(resolution);
232
- this.emitEvent(privateEvents.STREAM_STATE_CHANGE, {
233
- resolutionFormat: resolutionFormat
234
- });
235
- };
236
-
237
- TechseeMediaSubscriber.prototype.stopRenderInternal = function () {
238
- if (this._mediaElement && document.body.contains(this._mediaElement)) {
239
- return MediaDomUtils_1.removeVideoElementFromDom(this._mediaElement);
240
- }
241
-
242
- return Promise.resolve();
243
- };
244
-
245
- TechseeMediaSubscriber.prototype.emitEvent = function (event, eventArgs) {
246
- var _this = this;
247
-
248
- setTimeout(function () {
249
- _this._emitter.emit(event, eventArgs);
250
- });
251
- };
252
-
253
- TechseeMediaSubscriber.prototype.throwIfDisposed = function () {
254
- if (this._isDisposed) {
255
- throw new Error('Subscriber is already disposed');
256
- }
257
- };
258
-
259
- return TechseeMediaSubscriber;
260
- }();
261
-
181
+ TechseeMediaSubscriber.prototype.videoResizeHandler = function () {
182
+ trace.info("Video resize, new size = w: ".concat(this.videoWidth, " h:").concat(this.videoHeight));
183
+ var resolution = { videoWidth: this.videoWidth, videoHeight: this.videoHeight };
184
+ var resolutionFormat = (0, MediaDomUtils_1.calculateResolution)(resolution);
185
+ this.emitEvent(privateEvents.STREAM_STATE_CHANGE, { resolutionFormat: resolutionFormat });
186
+ };
187
+ TechseeMediaSubscriber.prototype.stopRenderInternal = function () {
188
+ if (this._mediaElement && document.body.contains(this._mediaElement)) {
189
+ return (0, MediaDomUtils_1.removeVideoElementFromDom)(this._mediaElement);
190
+ }
191
+ return Promise.resolve();
192
+ };
193
+ TechseeMediaSubscriber.prototype.emitEvent = function (event, eventArgs) {
194
+ var _this = this;
195
+ setTimeout(function () {
196
+ _this._emitter.emit(event, eventArgs);
197
+ });
198
+ };
199
+ TechseeMediaSubscriber.prototype.throwIfDisposed = function () {
200
+ if (this._isDisposed) {
201
+ throw new Error('Subscriber is already disposed');
202
+ }
203
+ };
204
+ return TechseeMediaSubscriber;
205
+ }());
262
206
  exports.TechseeMediaSubscriber = TechseeMediaSubscriber;
263
- //# sourceMappingURL=MediaSubscriber.js.map
207
+ //# sourceMappingURL=MediaSubscriber.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSubscriber.js","../src/MediaSubscriber.ts"],"names":["Object","defineProperty","exports","value","TechseeMediaSubscriber","events_1","require","MediaDomUtils_1","MediaConstants_1","MediaTracer_1","Compatibility_1","trace","getMediaTracer","privateEvents","subscriberParams","_isDisposed","_isPlaying","_hasVideo","_hasAudio","_mediaElement","info","videoResizeHandler","bind","_emitter","EventEmitter","_subscriberParams","prototype","get","streamType","enumerable","configurable","container","muted","mediaElement","videoWidth","videoHeight","offsetWidth","offsetHeight","muteSound","isMuted","throwIfDisposed","emitEvent","STREAM_STATE_CHANGE","onStateChanged","callback","on","onDispose","SUBSCRIBER_DISPOSE","renderStream","stream","_this","stopRenderInternal","then","renderMediaStreamToVideoEl","mediaStream","videoEl","getAudioTracks","length","getVideoTracks","setPlayingState","streamKind","error","warn","stopRendering","dispose","undefined","removeAllListeners","finalize","isPlaying","KnownMediaStreamKind","Video","disposeResizeHandler_1","resizeHandler","onMediaElementResize","resolution","resolutionFormat","calculateResolution","document","body","contains","removeVideoElementFromDom","Promise","resolve","event","eventArgs","setTimeout","emit","Error"],"mappings":"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","file":"MediaSubscriber.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TechseeMediaSubscriber = void 0;\nvar events_1 = require(\"events\");\nvar MediaDomUtils_1 = require(\"./MediaUtils/MediaDomUtils\");\nvar MediaConstants_1 = require(\"./MediaConstants\");\nvar MediaTracer_1 = require(\"./MediaUtils/MediaTracer\");\nvar Compatibility_1 = require(\"./MediaUtils/Compatibility\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSubscriber');\nvar privateEvents;\n(function (privateEvents) {\n privateEvents[\"STREAM_STATE_CHANGE\"] = \"STREAM_STATE_CHANGE\";\n privateEvents[\"SUBSCRIBER_DISPOSE\"] = \"SUBSCRIBER_DISPOSE\";\n})(privateEvents || (privateEvents = {}));\nvar TechseeMediaSubscriber = /** @class */ (function () {\n function TechseeMediaSubscriber(subscriberParams) {\n this._isDisposed = false;\n this._isPlaying = false;\n this._hasVideo = false;\n this._hasAudio = false;\n this._mediaElement = null;\n trace.info('Subscriber created');\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n this._emitter = new events_1.EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"streamType\", {\n //#region IMediaSubscriber\n get: function () {\n return this._subscriberParams.streamType;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"container\", {\n get: function () {\n return this._subscriberParams.container;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isPlaying\", {\n get: function () {\n return this._isPlaying;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isSoundMuted\", {\n get: function () {\n if (!this._mediaElement) {\n return true;\n }\n return this._mediaElement.muted;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasAudio\", {\n get: function () {\n return this._hasAudio;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasVideo\", {\n get: function () {\n return this._hasVideo;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"mediaElement\", {\n get: function () {\n return this._mediaElement;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoWidth\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoHeight\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderWidth\", {\n get: function () {\n return this.container.offsetWidth;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderHeight\", {\n get: function () {\n return this.container.offsetHeight;\n },\n enumerable: false,\n configurable: true\n });\n TechseeMediaSubscriber.prototype.muteSound = function (isMuted) {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n };\n TechseeMediaSubscriber.prototype.onStateChanged = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n };\n TechseeMediaSubscriber.prototype.onDispose = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n };\n //#endregion\n //#region Non Interface Methods\n TechseeMediaSubscriber.prototype.renderStream = function (stream) {\n var _this = this;\n this.throwIfDisposed();\n this.stopRenderInternal()\n .then(function () { return MediaDomUtils_1.renderMediaStreamToVideoEl(_this.container, stream.mediaStream, stream.streamType); })\n .then(function (videoEl) {\n _this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n _this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n _this.setPlayingState(videoEl, stream.streamKind);\n if (_this._hasAudio) {\n _this.muteSound(false);\n }\n })\n .catch(function (error) {\n trace.warn('Error while rendering stream on video element', error);\n });\n };\n TechseeMediaSubscriber.prototype.stopRendering = function () {\n var _this = this;\n return this.stopRenderInternal().then(function () { return _this.setPlayingState(); });\n };\n TechseeMediaSubscriber.prototype.dispose = function () {\n if (this._isDisposed) {\n return;\n }\n this.stopRendering().catch(function () { return undefined; });\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n };\n //#endregion\n TechseeMediaSubscriber.prototype.setPlayingState = function (mediaElement, streamKind) {\n var _this = this;\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n var finalize = function () {\n _this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(\"Video element \" + (streamKind || '') + \" \" + (_this.isPlaying ? 'play' : 'stop') + \" success\");\n };\n if (this._mediaElement && streamKind === MediaConstants_1.KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n var disposeResizeHandler_1 = null;\n var resizeHandler = function () {\n disposeResizeHandler_1 && disposeResizeHandler_1();\n Compatibility_1.onMediaElementResize(_this._mediaElement, _this.videoResizeHandler);\n finalize();\n };\n disposeResizeHandler_1 = Compatibility_1.onMediaElementResize(this._mediaElement, resizeHandler);\n }\n else {\n Compatibility_1.onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n }\n }\n else {\n finalize();\n }\n };\n TechseeMediaSubscriber.prototype.videoResizeHandler = function () {\n trace.info(\"Video resize, new size = w: \" + this.videoWidth + \" h:\" + this.videoHeight);\n var resolution = { videoWidth: this.videoWidth, videoHeight: this.videoHeight };\n var resolutionFormat = MediaDomUtils_1.calculateResolution(resolution);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE, { resolutionFormat: resolutionFormat });\n };\n TechseeMediaSubscriber.prototype.stopRenderInternal = function () {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return MediaDomUtils_1.removeVideoElementFromDom(this._mediaElement);\n }\n return Promise.resolve();\n };\n TechseeMediaSubscriber.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n TechseeMediaSubscriber.prototype.throwIfDisposed = function () {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n };\n return TechseeMediaSubscriber;\n}());\nexports.TechseeMediaSubscriber = TechseeMediaSubscriber;\n\n//# sourceMappingURL=MediaSubscriber.js.map\n","import {EventEmitter} from 'events';\nimport {Nullable} from '@techsee/techsee-common';\nimport {IMediaSubscriber, MediaSubscriberParams} from './MediaContracts';\nimport {TechseeMediaStream} from './TechseeMediaStream';\nimport {calculateResolution, removeVideoElementFromDom, renderMediaStreamToVideoEl} from './MediaUtils/MediaDomUtils';\nimport {KnownMediaStream, KnownMediaStreamKind} from './MediaConstants';\n\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\nimport {onMediaElementResize} from './MediaUtils/Compatibility';\n\nconst trace = getMediaTracer('MediaSubscriber');\n\nenum privateEvents {\n STREAM_STATE_CHANGE = 'STREAM_STATE_CHANGE',\n SUBSCRIBER_DISPOSE = 'SUBSCRIBER_DISPOSE'\n}\n\nexport class TechseeMediaSubscriber implements IMediaSubscriber {\n private _emitter: EventEmitter;\n private _isDisposed = false;\n private _isPlaying = false;\n private _hasVideo = false;\n private _hasAudio = false;\n private _mediaElement: Nullable<HTMLVideoElement> = null;\n private readonly _subscriberParams: MediaSubscriberParams;\n\n constructor(subscriberParams: MediaSubscriberParams) {\n trace.info('Subscriber created');\n\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n\n this._emitter = new EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n\n //#region IMediaSubscriber\n\n get streamType(): KnownMediaStream {\n return this._subscriberParams.streamType;\n }\n\n get container(): HTMLDivElement {\n return this._subscriberParams.container;\n }\n\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n get isSoundMuted(): boolean {\n if (!this._mediaElement) {\n return true;\n }\n\n return this._mediaElement.muted;\n }\n\n get hasAudio(): boolean {\n return this._hasAudio;\n }\n\n get hasVideo(): boolean {\n return this._hasVideo;\n }\n\n get mediaElement(): Nullable<HTMLVideoElement> {\n return this._mediaElement;\n }\n\n get videoWidth(): number {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n }\n\n get videoHeight(): number {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n }\n\n get renderWidth(): number {\n return this.container.offsetWidth;\n }\n\n get renderHeight(): number {\n return this.container.offsetHeight;\n }\n\n muteSound(isMuted: boolean): void {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n }\n\n onStateChanged(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n }\n\n onDispose(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n }\n\n //#endregion\n\n //#region Non Interface Methods\n\n renderStream(stream: TechseeMediaStream): void {\n this.throwIfDisposed();\n this.stopRenderInternal()\n .then(() => renderMediaStreamToVideoEl(this.container, stream.mediaStream, stream.streamType))\n .then((videoEl) => {\n this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n\n this.setPlayingState(videoEl, stream.streamKind);\n\n if (this._hasAudio) {\n this.muteSound(false);\n }\n })\n .catch((error) => {\n trace.warn('Error while rendering stream on video element', error);\n });\n }\n\n stopRendering(): Promise<void> {\n return this.stopRenderInternal().then(() => this.setPlayingState());\n }\n\n dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this.stopRendering().catch(() => undefined);\n\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n }\n\n //#endregion\n\n private setPlayingState(mediaElement?: HTMLVideoElement, streamKind?: KnownMediaStreamKind): void {\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n\n const finalize = (): void => {\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(`Video element ${streamKind || ''} ${this.isPlaying ? 'play' : 'stop'} success`);\n };\n\n if (this._mediaElement && streamKind === KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n let disposeResizeHandler: any = null;\n const resizeHandler = (): void => {\n disposeResizeHandler && disposeResizeHandler();\n onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n };\n\n disposeResizeHandler = onMediaElementResize(this._mediaElement, resizeHandler);\n } else {\n onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n }\n } else {\n finalize();\n }\n }\n\n private videoResizeHandler(): void {\n trace.info(`Video resize, new size = w: ${this.videoWidth} h:${this.videoHeight}`);\n const resolution = {videoWidth: this.videoWidth, videoHeight: this.videoHeight};\n const resolutionFormat = calculateResolution(resolution);\n\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE, {resolutionFormat});\n }\n\n private stopRenderInternal() {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return removeVideoElementFromDom(this._mediaElement);\n }\n\n return Promise.resolve();\n }\n\n private emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n private throwIfDisposed(): void {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n }\n}\n"]}
1
+ {"version":3,"file":"MediaSubscriber.js","sourceRoot":"","sources":["../src/MediaSubscriber.ts"],"names":[],"mappings":"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"}
@@ -14,3 +14,4 @@ export declare function isVideoPlaySupportedOnDevice(mediaServiceType: MediaServ
14
14
  export declare function onMediaElementResize(mediaElement: any, onResizeHandler: any): () => void;
15
15
  export declare function registerWebRTCAdapters(): void;
16
16
  export declare function waitAfterClearingFilter(): Promise<void>;
17
+ //# sourceMappingURL=Compatibility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaUtils/Compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAInD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;QACR,QAAQ,EAAE,GAAG,CAAC;KACjB;CACJ;AAgBD,eAAO,MAAM,4CAA4C,KAAK,CAAC;AAC/D,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAI5D,eAAO,MAAM,+CAA+C,IAAI,CAAC;AAUjE,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBtD;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAUlE;AAED,wBAAgB,4BAA4B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBjG;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,GAAG,MAAM,IAAI,CA0CxF;AAED,wBAAgB,sBAAsB,SAQrC;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7D","file":"Compatibility.d.ts","sourcesContent":["import {MediaServiceType} from '../MediaConstants';\n\ndeclare const require: any;\n\ndeclare global {\n interface Window {\n OT: any;\n OTPlugin: any;\n }\n}\nimport isEqual from 'lodash/isEqual';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nimport {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\nimport {getMediaTracer} from './MediaTracer';\n\nconst trace = getMediaTracer('Compatibility');\n\nconst environmentDetect = new TsEnvironmentDetect();\nconst isIE11 = environmentDetect.isIE11();\nconst monitoredIeElements = new Map();\n\n// Grace period to wait in the unlikely case that Opentok has not finished initializing,\n// and a session initialization was requested\nexport const WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = 10;\nexport const WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = 500;\n\n// switching camera while blur effect may cause video freeze for some devices (beta version)\n// this tiemout prevents event loop to stuck\nexport const WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT = 0;\n\nfunction _isOTDefined(): boolean {\n try {\n return !!window.OT;\n } catch (e) {\n return false;\n }\n}\n\nexport function waitForOpenTokIsLoaded(): Promise<void> {\n if (_isOTDefined()) {\n return Promise.resolve();\n }\n\n let isDefined = false;\n\n return (Promise as any)\n .reduce(\n new Array(WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS),\n () => {\n if (isDefined || _isOTDefined()) {\n isDefined = true;\n\n return Promise.resolve();\n }\n\n return (Promise as any).delay(WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL);\n },\n 0\n )\n .then(() => isDefined || Promise.reject(new Error('OT is undefined')));\n}\n\nexport function enumerateMediaDevices(): Promise<MediaDeviceInfo[]> {\n return new Promise((resolve, reject) => {\n if (typeof window.OT !== 'undefined' && window.OT && window.OT.getDevices) {\n window.OT.getDevices((error: any, devices: any) => (error ? reject(error) : resolve(devices)));\n } else if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n } else {\n reject(new Error('Enumerating media devices is not supported'));\n }\n });\n}\n\nexport function isVideoPlaySupportedOnDevice(mediaServiceType: MediaServiceType): Promise<boolean> {\n const isOpenTokService = mediaServiceType === MediaServiceType.OPENTOK;\n const isMediaServer = mediaServiceType === MediaServiceType.MEDIASERVER;\n\n if (!isIE11) {\n return Promise.resolve(true);\n }\n\n if (isOpenTokService) {\n return waitForOpenTokIsLoaded().then(\n () => window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled()\n );\n }\n\n if (isMediaServer) {\n return Promise.resolve(false);\n }\n\n if ((window as any).WebRTCAdapter) {\n return Promise.resolve(true);\n }\n\n return Promise.resolve(false);\n}\n\nexport function onMediaElementResize(mediaElement: any, onResizeHandler: any): () => void {\n let checkTimeoutPtr: any = null;\n const unsubscribeIE = () => {\n clearTimeout(checkTimeoutPtr);\n monitoredIeElements.delete(mediaElement);\n };\n\n if (!isIE11) {\n mediaElement.addEventListener('resize', onResizeHandler, false);\n } else {\n monitoredIeElements.set(mediaElement, {\n videoWidth: mediaElement.videoWidth,\n videoHeight: mediaElement.videoHeight\n });\n\n const checkElementSize = () => {\n const lastElementSize = monitoredIeElements.get(mediaElement);\n\n if (!lastElementSize) {\n unsubscribeIE();\n } else {\n const currentSize = {videoWidth: mediaElement.videoWidth, videoHeight: mediaElement.videoHeight};\n\n checkTimeoutPtr = setTimeout(checkElementSize, 500);\n if (!isEqual(currentSize, lastElementSize)) {\n monitoredIeElements.set(mediaElement, lastElementSize);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n setTimeout(onResizeHandler);\n }\n }\n };\n\n checkElementSize();\n }\n\n return function () {\n if (!isIE11) {\n mediaElement && mediaElement.removeEventListener('resize', onResizeHandler);\n } else {\n unsubscribeIE();\n }\n };\n}\n\nexport function registerWebRTCAdapters() {\n if (isIE11) {\n require('../webrtc-ie-shim.js');\n } else if (!(environmentDetect.isChrome() && environmentDetect.majorVersion() < 49)) {\n require('webrtc-adapter/dist/adapter_core'); // eslint-disable-line global-require\n } else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\n\nexport async function waitAfterClearingFilter(): Promise<void> {\n return (Promise as any).delay(WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT);\n}\n"]}
1
+ {"version":3,"file":"Compatibility.d.ts","sourceRoot":"","sources":["../../src/MediaUtils/Compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAInD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;QACR,QAAQ,EAAE,GAAG,CAAC;KACjB;CACJ;AAgBD,eAAO,MAAM,4CAA4C,KAAK,CAAC;AAC/D,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAI5D,eAAO,MAAM,+CAA+C,IAAI,CAAC;AAUjE,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBtD;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAUlE;AAED,wBAAgB,4BAA4B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBjG;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,GAAG,MAAM,IAAI,CA0CxF;AAED,wBAAgB,sBAAsB,SAQrC;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7D"}