@techsee/techsee-media-service 999.0.2-switch → 999.0.3-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/LocalStreamManager.d.ts +12 -0
- package/lib/LocalStreamManager.d.ts.map +1 -1
- package/lib/LocalStreamManager.js +440 -283
- package/lib/LocalStreamManager.js.map +1 -1
- package/lib/MediaConstants.d.ts +14 -4
- package/lib/MediaConstants.d.ts.map +1 -1
- package/lib/MediaConstants.js +83 -38
- package/lib/MediaConstants.js.map +1 -1
- package/lib/MediaContracts.d.ts +17 -14
- package/lib/MediaContracts.d.ts.map +1 -1
- package/lib/MediaContracts.js +3 -3
- package/lib/MediaContracts.js.map +1 -1
- package/lib/MediaPublisher.d.ts +3 -3
- package/lib/MediaPublisher.d.ts.map +1 -1
- package/lib/MediaPublisher.js +46 -35
- package/lib/MediaPublisher.js.map +1 -1
- package/lib/MediaServiceBase.d.ts +21 -7
- package/lib/MediaServiceBase.d.ts.map +1 -1
- package/lib/MediaServiceBase.js +924 -586
- package/lib/MediaServiceBase.js.map +1 -1
- package/lib/MediaSession/MediaServer.d.ts +45 -0
- package/lib/MediaSession/MediaServer.d.ts.map +1 -0
- package/lib/MediaSession/MediaServer.js +538 -0
- package/lib/MediaSession/MediaServer.js.map +1 -0
- package/lib/MediaSession/MediaSessionBase.d.ts +10 -1
- package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
- package/lib/MediaSession/MediaSessionBase.js +128 -66
- package/lib/MediaSession/MediaSessionBase.js.map +1 -1
- package/lib/MediaSession/SessionOpentok.d.ts +11 -9
- package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
- package/lib/MediaSession/SessionOpentok.js +500 -352
- package/lib/MediaSession/SessionOpentok.js.map +1 -1
- package/lib/MediaSession/SessionTurn.d.ts +4 -1
- package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
- package/lib/MediaSession/SessionTurn.js +611 -422
- package/lib/MediaSession/SessionTurn.js.map +1 -1
- package/lib/MediaSession/TurnConstants.js +31 -30
- package/lib/MediaSession/TurnConstants.js.map +1 -1
- package/lib/MediaSubscriber.d.ts +11 -11
- package/lib/MediaSubscriber.d.ts.map +1 -1
- package/lib/MediaSubscriber.js +236 -192
- package/lib/MediaSubscriber.js.map +1 -1
- package/lib/MediaUtils/Compatibility.d.ts +2 -1
- package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
- package/lib/MediaUtils/Compatibility.js +130 -85
- package/lib/MediaUtils/Compatibility.js.map +1 -1
- package/lib/MediaUtils/MediaDomUtils.d.ts +3 -2
- package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
- package/lib/MediaUtils/MediaDomUtils.js +235 -174
- package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
- package/lib/MediaUtils/MediaTracer.js +9 -4
- package/lib/MediaUtils/MediaTracer.js.map +1 -1
- package/lib/MediaUtils/index.d.ts +1 -0
- package/lib/MediaUtils/index.d.ts.map +1 -0
- package/lib/MediaUtils/index.js +16 -0
- package/lib/MediaUtils/index.js.map +1 -0
- package/lib/MultiParty/Contracts.d.ts +16 -0
- package/lib/MultiParty/Contracts.d.ts.map +1 -0
- package/lib/MultiParty/Contracts.js +6 -0
- package/lib/MultiParty/Contracts.js.map +1 -0
- package/lib/MultiParty/DetectWebRtcService.d.ts +16 -0
- package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -0
- package/lib/MultiParty/DetectWebRtcService.js +79 -0
- package/lib/MultiParty/DetectWebRtcService.js.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesService.d.ts +23 -0
- package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesService.js +369 -0
- package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesUtils.d.ts +5 -0
- package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesUtils.js +305 -0
- package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -0
- package/lib/MultiParty/MultiPartyService.d.ts +41 -0
- package/lib/MultiParty/MultiPartyService.d.ts.map +1 -0
- package/lib/MultiParty/MultiPartyService.js +72 -0
- package/lib/MultiParty/MultiPartyService.js.map +1 -0
- package/lib/MultiParty/MultiPartyServiceFactory.d.ts +3 -0
- package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -0
- package/lib/MultiParty/MultiPartyServiceFactory.js +21 -0
- package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -0
- package/lib/MultiParty/OpentokMultiPartyService.d.ts +29 -0
- package/lib/MultiParty/OpentokMultiPartyService.d.ts.map +1 -0
- package/lib/MultiParty/OpentokMultiPartyService.js +888 -0
- package/lib/MultiParty/OpentokMultiPartyService.js.map +1 -0
- package/lib/MultiParty/VideoLayoutType.d.ts +4 -0
- package/lib/MultiParty/VideoLayoutType.d.ts.map +1 -0
- package/lib/MultiParty/VideoLayoutType.js +13 -0
- package/lib/MultiParty/VideoLayoutType.js.map +1 -0
- package/lib/MultiParty/index.d.ts +4 -0
- package/lib/MultiParty/index.d.ts.map +1 -0
- package/lib/MultiParty/index.js +61 -0
- package/lib/MultiParty/index.js.map +1 -0
- package/lib/MultiParty/opentok.d.ts +503 -0
- package/lib/TechseeMediaStream.d.ts +6 -6
- package/lib/TechseeMediaStream.d.ts.map +1 -1
- package/lib/TechseeMediaStream.js +59 -53
- package/lib/TechseeMediaStream.js.map +1 -1
- package/lib/oldCode/constants.js +20 -15
- package/lib/oldCode/constants.js.map +1 -1
- package/lib/oldCode/event-emitter.js +45 -22
- package/lib/oldCode/event-emitter.js.map +1 -1
- package/lib/oldCode/index.js +48 -52
- package/lib/oldCode/index.js.map +1 -1
- package/lib/oldCode/opentok/session.js +261 -236
- package/lib/oldCode/opentok/session.js.map +1 -1
- package/lib/oldCode/opentok/stream.js +283 -269
- package/lib/oldCode/opentok/stream.js.map +1 -1
- package/lib/oldCode/publisher.js +96 -71
- package/lib/oldCode/publisher.js.map +1 -1
- package/lib/oldCode/service.js +294 -272
- package/lib/oldCode/service.js.map +1 -1
- package/lib/oldCode/session.js +82 -60
- package/lib/oldCode/session.js.map +1 -1
- package/lib/oldCode/stream.js +153 -125
- package/lib/oldCode/stream.js.map +1 -1
- package/lib/oldCode/subscriber.js +60 -35
- package/lib/oldCode/subscriber.js.map +1 -1
- package/lib/oldCode/tracer.d.ts +3 -2
- package/lib/oldCode/tracer.d.ts.map +1 -1
- package/lib/oldCode/tracer.js +181 -130
- package/lib/oldCode/tracer.js.map +1 -1
- package/lib/oldCode/utils/ImageFixer.js +67 -44
- package/lib/oldCode/utils/ImageFixer.js.map +1 -1
- package/lib/oldCode/webrtc/constants.js +102 -110
- package/lib/oldCode/webrtc/constants.js.map +1 -1
- package/lib/oldCode/webrtc/helper.js +176 -124
- package/lib/oldCode/webrtc/helper.js.map +1 -1
- package/lib/oldCode/webrtc/session-kms.js +408 -393
- package/lib/oldCode/webrtc/session-kms.js.map +1 -1
- package/lib/oldCode/webrtc/session-loopback.js +245 -227
- package/lib/oldCode/webrtc/session-loopback.js.map +1 -1
- package/lib/oldCode/webrtc/session-turn.js +705 -658
- package/lib/oldCode/webrtc/session-turn.js.map +1 -1
- package/lib/oldCode/webrtc/session-turn.v2.js +480 -471
- package/lib/oldCode/webrtc/session-turn.v2.js.map +1 -1
- package/lib/oldCode/webrtc/session.js +12 -6
- package/lib/oldCode/webrtc/session.js.map +1 -1
- package/lib/oldCode/webrtc/stream.js +526 -504
- package/lib/oldCode/webrtc/stream.js.map +1 -1
- package/lib/oldCode/webrtc/temasys/adapter-loader.js +5 -6
- package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +1 -1
- package/lib/oldCode/webrtc/temasys/adapter.js +5264 -5192
- package/lib/oldCode/webrtc/temasys/adapter.js.map +1 -1
- package/lib/oldCode/webrtc/webrtc-ie-shim.js +3357 -2927
- package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +1 -1
- package/lib/qos/raw-qos.js +348 -273
- package/lib/qos/raw-qos.js.map +1 -1
- package/lib/webrtc-ie-shim.js +3386 -2985
- package/lib/webrtc-ie-shim.js.map +1 -1
- package/package.json +54 -42
package/lib/MediaSubscriber.js
CHANGED
|
@@ -1,212 +1,256 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TechseeMediaSubscriber = void 0;
|
|
7
|
+
|
|
4
8
|
var events_1 = require("events");
|
|
9
|
+
|
|
5
10
|
var MediaDomUtils_1 = require("./MediaUtils/MediaDomUtils");
|
|
11
|
+
|
|
6
12
|
var MediaConstants_1 = require("./MediaConstants");
|
|
13
|
+
|
|
7
14
|
var MediaTracer_1 = require("./MediaUtils/MediaTracer");
|
|
15
|
+
|
|
8
16
|
var Compatibility_1 = require("./MediaUtils/Compatibility");
|
|
17
|
+
|
|
9
18
|
var trace = MediaTracer_1.getMediaTracer('MediaSubscriber');
|
|
10
19
|
var privateEvents;
|
|
20
|
+
|
|
11
21
|
(function (privateEvents) {
|
|
12
|
-
|
|
13
|
-
|
|
22
|
+
privateEvents["STREAM_STATE_CHANGE"] = "STREAM_STATE_CHANGE";
|
|
23
|
+
privateEvents["SUBSCRIBER_DISPOSE"] = "SUBSCRIBER_DISPOSE";
|
|
14
24
|
})(privateEvents || (privateEvents = {}));
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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);
|
|
26
131
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
get: function get() {
|
|
61
|
-
return this._hasAudio;
|
|
62
|
-
},
|
|
63
|
-
enumerable: true,
|
|
64
|
-
configurable: true
|
|
65
|
-
});
|
|
66
|
-
Object.defineProperty(TechseeMediaSubscriber.prototype, "hasVideo", {
|
|
67
|
-
get: function get() {
|
|
68
|
-
return this._hasVideo;
|
|
69
|
-
},
|
|
70
|
-
enumerable: true,
|
|
71
|
-
configurable: true
|
|
72
|
-
});
|
|
73
|
-
Object.defineProperty(TechseeMediaSubscriber.prototype, "mediaElement", {
|
|
74
|
-
get: function get() {
|
|
75
|
-
return this._mediaElement;
|
|
76
|
-
},
|
|
77
|
-
enumerable: true,
|
|
78
|
-
configurable: true
|
|
79
|
-
});
|
|
80
|
-
Object.defineProperty(TechseeMediaSubscriber.prototype, "videoWidth", {
|
|
81
|
-
get: function get() {
|
|
82
|
-
return this.mediaElement ? this.mediaElement.videoWidth : 0;
|
|
83
|
-
},
|
|
84
|
-
enumerable: true,
|
|
85
|
-
configurable: true
|
|
86
|
-
});
|
|
87
|
-
Object.defineProperty(TechseeMediaSubscriber.prototype, "videoHeight", {
|
|
88
|
-
get: function get() {
|
|
89
|
-
return this.mediaElement ? this.mediaElement.videoHeight : 0;
|
|
90
|
-
},
|
|
91
|
-
enumerable: true,
|
|
92
|
-
configurable: true
|
|
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);
|
|
93
165
|
});
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
TechseeMediaSubscriber.prototype.stopRendering = function () {
|
|
169
|
+
var _this = this;
|
|
170
|
+
|
|
171
|
+
return this.stopRenderInternal().then(function () {
|
|
172
|
+
return _this.setPlayingState();
|
|
100
173
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
TechseeMediaSubscriber.prototype.dispose = function () {
|
|
177
|
+
if (this._isDisposed) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
this.stopRendering()["catch"](function () {
|
|
182
|
+
return undefined;
|
|
107
183
|
});
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
var _this = this;
|
|
128
|
-
this.throwIfDisposed();
|
|
129
|
-
this.stopRenderInternal().then(function () {
|
|
130
|
-
return MediaDomUtils_1.renderMediaStreamToVideoEl(_this.container, stream.mediaStream);
|
|
131
|
-
}).then(function (videoEl) {
|
|
132
|
-
_this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;
|
|
133
|
-
_this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;
|
|
134
|
-
_this.setPlayingState(videoEl, stream.streamKind);
|
|
135
|
-
if (_this._hasAudio) {
|
|
136
|
-
_this.muteSound(false);
|
|
137
|
-
}
|
|
138
|
-
}).catch(function (error) {
|
|
139
|
-
trace.warn('Error while rendering stream on video element', error);
|
|
140
|
-
});
|
|
141
|
-
};
|
|
142
|
-
TechseeMediaSubscriber.prototype.stopRendering = function () {
|
|
143
|
-
var _this = this;
|
|
144
|
-
return this.stopRenderInternal().then(function () {
|
|
145
|
-
return _this.setPlayingState();
|
|
146
|
-
});
|
|
147
|
-
};
|
|
148
|
-
TechseeMediaSubscriber.prototype.dispose = function () {
|
|
149
|
-
if (this._isDisposed) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
this.stopRendering().catch(function () {
|
|
153
|
-
return undefined;
|
|
154
|
-
});
|
|
155
|
-
this._isDisposed = true;
|
|
156
|
-
this._emitter.removeAllListeners();
|
|
157
|
-
trace.info('Subscriber disposed');
|
|
158
|
-
this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);
|
|
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");
|
|
159
203
|
};
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
var
|
|
166
|
-
|
|
167
|
-
|
|
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();
|
|
168
213
|
};
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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
|
+
this.emitEvent(privateEvents.STREAM_STATE_CHANGE);
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
TechseeMediaSubscriber.prototype.stopRenderInternal = function () {
|
|
231
|
+
if (this._mediaElement && document.body.contains(this._mediaElement)) {
|
|
232
|
+
return MediaDomUtils_1.removeVideoElementFromDom(this._mediaElement);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return Promise.resolve();
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
TechseeMediaSubscriber.prototype.emitEvent = function (event, eventArgs) {
|
|
239
|
+
var _this = this;
|
|
240
|
+
|
|
241
|
+
setTimeout(function () {
|
|
242
|
+
_this._emitter.emit(event, eventArgs);
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
TechseeMediaSubscriber.prototype.throwIfDisposed = function () {
|
|
247
|
+
if (this._isDisposed) {
|
|
248
|
+
throw new Error('Subscriber is already disposed');
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
return TechseeMediaSubscriber;
|
|
208
253
|
}();
|
|
209
|
-
exports.TechseeMediaSubscriber = TechseeMediaSubscriber;
|
|
210
254
|
|
|
211
|
-
|
|
255
|
+
exports.TechseeMediaSubscriber = TechseeMediaSubscriber;
|
|
212
256
|
//# sourceMappingURL=MediaSubscriber.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MediaSubscriber.js","../src/MediaSubscriber.ts"],"names":["Object","defineProperty","exports","value","events_1","require","MediaDomUtils_1","MediaConstants_1","MediaTracer_1","Compatibility_1","trace","getMediaTracer","privateEvents","TechseeMediaSubscriber","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","catch","error","warn","stopRendering","dispose","undefined","removeAllListeners","finalize","isPlaying","KnownMediaStreamKind","Video","disposeResizeHandler_1","resizeHandler","onMediaElementResize","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 });\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: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"container\", {\n get: function () {\n return this._subscriberParams.container;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isPlaying\", {\n get: function () {\n return this._isPlaying;\n },\n enumerable: true,\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: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasAudio\", {\n get: function () {\n return this._hasAudio;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasVideo\", {\n get: function () {\n return this._hasVideo;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"mediaElement\", {\n get: function () {\n return this._mediaElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoWidth\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoHeight\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderWidth\", {\n get: function () {\n return this.container.offsetWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderHeight\", {\n get: function () {\n return this.container.offsetHeight;\n },\n enumerable: true,\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().then(function () { return MediaDomUtils_1.renderMediaStreamToVideoEl(_this.container, stream.mediaStream); })\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 this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\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 {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: boolean = false;\n private _isPlaying: boolean = false;\n private _hasVideo: boolean = false;\n private _hasAudio: boolean = false;\n private _mediaElement: Nullable<HTMLVideoElement> = null;\n\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().then(() => renderMediaStreamToVideoEl(this.container, stream.mediaStream))\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\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 this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\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,"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","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().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 this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\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 {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\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().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\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 this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\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,3 +1,4 @@
|
|
|
1
|
+
import { MediaServiceType } from '../MediaConstants';
|
|
1
2
|
declare global {
|
|
2
3
|
interface Window {
|
|
3
4
|
OT: any;
|
|
@@ -8,6 +9,6 @@ export declare const WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = 10;
|
|
|
8
9
|
export declare const WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = 500;
|
|
9
10
|
export declare function waitForOpenTokIsLoaded(): Promise<void>;
|
|
10
11
|
export declare function enumerateMediaDevices(): Promise<MediaDeviceInfo[]>;
|
|
11
|
-
export declare function isVideoPlaySupportedOnDevice(
|
|
12
|
+
export declare function isVideoPlaySupportedOnDevice(mediaServiceType: MediaServiceType): Promise<boolean>;
|
|
12
13
|
export declare function onMediaElementResize(mediaElement: any, onResizeHandler: any): () => void;
|
|
13
14
|
export declare function registerWebRTCAdapters(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MediaUtils/Compatibility.ts"],"names":[],"mappings":"
|
|
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;AAU5D,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBtD;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAUlE;AAED,wBAAgB,4BAA4B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBjG;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,GAAG,MAAM,IAAI,CAyCxF;AAED,wBAAgB,sBAAsB,SAQrC","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\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).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 }, 0)\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(() => window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled());\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 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"]}
|