@techsee/techsee-media-service 0.13.0 → 0.14.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.
- package/lib/MediaServiceBase.d.ts.map +1 -1
- package/lib/MediaServiceBase.js +4 -3
- package/lib/MediaServiceBase.js.map +1 -1
- package/lib/MediaSession/MediaServer.d.ts +0 -5
- package/lib/MediaSession/MediaServer.d.ts.map +1 -1
- package/lib/MediaSession/MediaServer.js +3 -9
- package/lib/MediaSession/MediaServer.js.map +1 -1
- package/lib/MediaSession/MediaSessionBase.d.ts +5 -0
- package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
- package/lib/MediaSession/MediaSessionBase.js +6 -0
- package/lib/MediaSession/MediaSessionBase.js.map +1 -1
- package/lib/MediaSession/SessionOpentok.d.ts +2 -2
- package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
- package/lib/MediaSession/SessionOpentok.js +56 -45
- package/lib/MediaSession/SessionOpentok.js.map +1 -1
- package/package.json +1 -1
|
@@ -30,6 +30,7 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
30
30
|
__extends(OpentokSession, _super);
|
|
31
31
|
function OpentokSession(sessionParams, streamFactory) {
|
|
32
32
|
var _this = _super.call(this, sessionParams, streamFactory) || this;
|
|
33
|
+
_this._lastStreamEvents = [];
|
|
33
34
|
_this._session = null;
|
|
34
35
|
_this._credentials = sessionParams.credentials;
|
|
35
36
|
_this.connect = _this.connect.bind(_this);
|
|
@@ -81,10 +82,19 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
81
82
|
apiKey = _a.apiKey,
|
|
82
83
|
sessionId = _a.sessionId;
|
|
83
84
|
_this._session = window.OTSESSION = window.OT.initSession(apiKey, sessionId);
|
|
85
|
+
_this._lastStreamEvents = [];
|
|
84
86
|
_this._session.on('connectionCreated', _this.connectionCreatedHandler);
|
|
85
87
|
_this._session.on('connectionDestroyed', _this.connectionDestroyedHandler);
|
|
86
88
|
_this._session.on('streamCreated', _this.streamCreatedHandler);
|
|
87
89
|
_this._session.on('streamDestroyed', _this.streamDestroyedHandler);
|
|
90
|
+
_this._session.on('archiveStarted', function (event) {
|
|
91
|
+
trace.info('archiveStarted event', event);
|
|
92
|
+
_this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STARTED, event);
|
|
93
|
+
});
|
|
94
|
+
_this._session.on('archiveStopped', function (event) {
|
|
95
|
+
trace.info('archiveStopped event', event);
|
|
96
|
+
_this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STOPPED, event);
|
|
97
|
+
});
|
|
88
98
|
var connectHandler = function connectHandler(error) {
|
|
89
99
|
if (error) {
|
|
90
100
|
handleError(error);
|
|
@@ -111,6 +121,7 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
111
121
|
}
|
|
112
122
|
currentSession.off();
|
|
113
123
|
currentSession.disconnect();
|
|
124
|
+
_this._lastStreamEvents = [];
|
|
114
125
|
resolve();
|
|
115
126
|
});
|
|
116
127
|
};
|
|
@@ -159,11 +170,7 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
159
170
|
if (!this.sessionExistsGuard(false) || !connection) {
|
|
160
171
|
return;
|
|
161
172
|
}
|
|
162
|
-
|
|
163
|
-
if (connection.connectionId === this.ownPeerId) {
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
var destinationRole = this.calculateDestinationRole();
|
|
173
|
+
var destinationRole = JSON.parse(connection.data).clientRole;
|
|
167
174
|
this.createStreamForPublishing(destinationRole).then(function (streams) {
|
|
168
175
|
var peerConnection = {
|
|
169
176
|
peerId: connection.connectionId,
|
|
@@ -176,32 +183,44 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
176
183
|
localStream: streams,
|
|
177
184
|
connectionTimoutPrt: null
|
|
178
185
|
};
|
|
179
|
-
if (!streams.videoSource && !streams.audioSource) {
|
|
186
|
+
if (connection.connectionId !== _this.ownPeerId || !streams.videoSource && !streams.audioSource) {
|
|
180
187
|
trace.info('Peer connection without publisher was created', peerConnection);
|
|
181
188
|
return peerConnection;
|
|
182
189
|
}
|
|
183
|
-
|
|
184
|
-
return _this.createMediaPublisher(streams, streamName).then(function (publisher) {
|
|
190
|
+
return _this.createMediaPublisher(streams).then(function (publisher) {
|
|
185
191
|
peerConnection.publisher = publisher;
|
|
186
192
|
trace.info('Peer connection with publisher was created', peerConnection);
|
|
187
193
|
return peerConnection;
|
|
188
194
|
});
|
|
189
195
|
}).then(function (peerConnection) {
|
|
190
196
|
_this._peerConnections.set(peerConnection.peerId, peerConnection);
|
|
191
|
-
if (
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
return resolve();
|
|
197
|
+
if (connection.connectionId === _this.ownPeerId) {
|
|
198
|
+
trace.info('Before subscribe the event streams');
|
|
199
|
+
/*
|
|
200
|
+
When publisher connect after others participants,
|
|
201
|
+
make sure the publisher will not loose their stream to subscribe
|
|
202
|
+
*/
|
|
203
|
+
return _this._lastStreamEvents.reduce(function (promiseChain, streamEvent) {
|
|
204
|
+
return promiseChain.then(function () {
|
|
205
|
+
return _this.streamCreatedHandler(streamEvent);
|
|
201
206
|
});
|
|
207
|
+
}, Promise.resolve()).then(function () {
|
|
208
|
+
if (peerConnection.publisher) {
|
|
209
|
+
return new Promise(function (resolve, reject) {
|
|
210
|
+
trace.info('Starting publish to peerConnection.publisher');
|
|
211
|
+
_this._session.publish(peerConnection.publisher, function (error) {
|
|
212
|
+
if (error) {
|
|
213
|
+
trace.error('Publish to peerConnection error', error);
|
|
214
|
+
return reject(error);
|
|
215
|
+
}
|
|
216
|
+
trace.info('Publish to peerConnection success');
|
|
217
|
+
return resolve();
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return Promise.resolve();
|
|
202
222
|
});
|
|
203
223
|
}
|
|
204
|
-
return Promise.resolve();
|
|
205
224
|
}).catch(function (error) {
|
|
206
225
|
//Need to handle fail cases during reliability
|
|
207
226
|
trace.error('Error handling new peer connection', error);
|
|
@@ -218,34 +237,21 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
218
237
|
}
|
|
219
238
|
};
|
|
220
239
|
OpentokSession.prototype.streamCreatedHandler = function (event) {
|
|
221
|
-
var _this = this;
|
|
222
240
|
trace.info('streamCreatedHandler', event.stream);
|
|
223
241
|
var stream = event.stream;
|
|
224
242
|
var connection = (stream || { connection: null }).connection;
|
|
225
|
-
if (!this.sessionExistsGuard(false) || !stream) {
|
|
243
|
+
if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {
|
|
226
244
|
return;
|
|
227
245
|
}
|
|
228
246
|
if (!this._peerConnections.has(connection.connectionId)) {
|
|
229
247
|
trace.warn('Unexpected case, connection should exist on this stage');
|
|
248
|
+
this._lastStreamEvents.push(event);
|
|
230
249
|
return;
|
|
231
250
|
}
|
|
232
251
|
var peerConnection = this._peerConnections.get(connection.connectionId);
|
|
233
252
|
trace.info('Subscribing the stream');
|
|
234
253
|
this.createMediaSubscriber(stream).then(function (subscriber) {
|
|
235
254
|
peerConnection.subscriber = subscriber;
|
|
236
|
-
peerConnection.subscriber.on('videoElementCreated', function (args) {
|
|
237
|
-
var element = args.element;
|
|
238
|
-
var otMediaStream = element.srcObject;
|
|
239
|
-
if (!otMediaStream) {
|
|
240
|
-
trace.warn('MediaStream not found in OT video element');
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);
|
|
244
|
-
otMediaStream.getTracks().forEach(function (mediaTrack) {
|
|
245
|
-
_this.addRemoteTrackToPeer(peerConnection, mediaTrack);
|
|
246
|
-
});
|
|
247
|
-
_this.registerPeersRemoteTracks(peerConnection);
|
|
248
|
-
});
|
|
249
255
|
});
|
|
250
256
|
};
|
|
251
257
|
OpentokSession.prototype.streamDestroyedHandler = function (event) {
|
|
@@ -296,14 +302,13 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
296
302
|
return stream;
|
|
297
303
|
});
|
|
298
304
|
};
|
|
299
|
-
OpentokSession.prototype.createMediaPublisher = function (stream
|
|
305
|
+
OpentokSession.prototype.createMediaPublisher = function (stream) {
|
|
300
306
|
var otParams = {
|
|
301
307
|
videoSource: stream.videoSource ? stream.videoSource : false,
|
|
302
308
|
audioSource: stream.audioSource ? stream.audioSource : false,
|
|
303
309
|
publishAudio: !!stream.audioSource,
|
|
304
310
|
publishVideo: !!stream.videoSource,
|
|
305
|
-
showControls: false
|
|
306
|
-
name: streamName
|
|
311
|
+
showControls: false
|
|
307
312
|
};
|
|
308
313
|
return new Promise(function (resolve, reject) {
|
|
309
314
|
var otPublisher = window.OT.initPublisher(undefined, otParams, function (error) {
|
|
@@ -350,7 +355,20 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
350
355
|
}
|
|
351
356
|
subscriber.on('videoElementCreated', function (event) {
|
|
352
357
|
document.getElementById(subscriber.id).style.display = 'none';
|
|
353
|
-
|
|
358
|
+
var element = event.element;
|
|
359
|
+
element.muted = true;
|
|
360
|
+
var peerConnection = _this._peerConnections.get(remoteStream.connection.connectionId);
|
|
361
|
+
var otMediaStream = element.srcObject;
|
|
362
|
+
peerConnection.subscriber = subscriber;
|
|
363
|
+
if (!otMediaStream) {
|
|
364
|
+
trace.warn('MediaStream not found in OT video element');
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);
|
|
368
|
+
otMediaStream.getTracks().forEach(function (mediaTrack) {
|
|
369
|
+
_this.addRemoteTrackToPeer(peerConnection, mediaTrack);
|
|
370
|
+
});
|
|
371
|
+
_this.registerPeersRemoteTracks(peerConnection);
|
|
354
372
|
});
|
|
355
373
|
resolve(subscriber);
|
|
356
374
|
});
|
|
@@ -367,13 +385,6 @@ var OpentokSession = /** @class */function (_super) {
|
|
|
367
385
|
});
|
|
368
386
|
};
|
|
369
387
|
//#endregion
|
|
370
|
-
OpentokSession.prototype.calculateDestinationRole = function () {
|
|
371
|
-
if (this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {
|
|
372
|
-
var isAgentConnected = false;
|
|
373
|
-
return !isAgentConnected ? MediaConstants_1.SessionClientRole.AGENT : MediaConstants_1.SessionClientRole.OBSERVER;
|
|
374
|
-
}
|
|
375
|
-
return MediaConstants_1.SessionClientRole.USER;
|
|
376
|
-
};
|
|
377
388
|
OpentokSession.prototype.sessionExistsGuard = function (shouldThrow) {
|
|
378
389
|
if (shouldThrow === void 0) {
|
|
379
390
|
shouldThrow = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MediaSession/SessionOpentok.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","defineProperty","exports","value","MediaConstants_1","require","guards_1","MediaSessionBase_1","MediaTracer_1","trace","getMediaTracer","OpentokSession","_super","sessionParams","streamFactory","_this","call","_session","_credentials","credentials","connect","bind","disconnect","onMediaStreamDestroyed","onMediaStreamRenewed","createStreamForPublishing","createMediaPublisher","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","get","sessionId","enumerable","configurable","connection","connectionId","sessionDisconnect","info","error","Promise","reject","resolve","handleError","off","_a","_sessionParams","apiKey","window","OTSESSION","OT","initSession","on","connectHandler","token","currentSession","_peerConnections","forEach","peerConnection","destroyPeerConnection","clientRole","promises","peerRole","push","destroyPublisherOnPeerConnection","all","then","undefined","mediaStream","replaceStreamTracks","Error","getRemoteTrackStats","mediaTrack","peerConnectionOfTrack","getPeerConnectionByMediaTrack","subscriber","getStats","stats","warn","trackId","id","trackStats","event","sessionExistsGuard","ownPeerId","destinationRole","calculateDestinationRole","streams","peerId","peerType","clientType","SessionClientType","INITIATOR","GUEST","publisher","remoteMediaTracks","localStream","connectionTimoutPrt","videoSource","audioSource","streamName","SessionClientRole","USER","KnownMediaStream","AGENT_AUDIO_STREAM","USER_VIDEO_STREAM","set","publish","catch","has","stream","createMediaSubscriber","args","element","otMediaStream","srcObject","getTracks","addRemoteTrackToPeer","registerPeersRemoteTracks","destroySubscriberOnPeerConnection","delete","_sessionStreamsManager","getMediaStreamForRole","track","kind","otParams","publishAudio","publishVideo","showControls","name","otPublisher","initPublisher","preventDefault","document","getElementById","style","display","muted","unpublish","remoteStream","subscribe","err","unsubscribe","unregisterPeersRemoteMediaTracks","isAgentConnected","AGENT","OBSERVER","shouldThrow","connected","throwableGuard","MediaSessionBase"],"mappings":"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","file":"SessionOpentok.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar guards_1 = require(\"@techsee/techsee-common/lib/core/guards\");\nvar MediaSessionBase_1 = require(\"./MediaSessionBase\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('OpentokSession');\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nvar OpentokSession = /** @class */ (function (_super) {\n __extends(OpentokSession, _super);\n function OpentokSession(sessionParams, streamFactory) {\n var _this = _super.call(this, sessionParams, streamFactory) || this;\n _this._session = null;\n _this._credentials = sessionParams.credentials;\n _this.connect = _this.connect.bind(_this);\n _this.disconnect = _this.disconnect.bind(_this);\n _this.onMediaStreamDestroyed = _this.onMediaStreamDestroyed.bind(_this);\n _this.onMediaStreamRenewed = _this.onMediaStreamRenewed.bind(_this);\n _this.createStreamForPublishing = _this.createStreamForPublishing.bind(_this);\n _this.createMediaPublisher = _this.createMediaPublisher.bind(_this);\n _this.connectionCreatedHandler = _this.connectionCreatedHandler.bind(_this);\n _this.connectionDestroyedHandler = _this.connectionDestroyedHandler.bind(_this);\n _this.streamCreatedHandler = _this.streamCreatedHandler.bind(_this);\n _this.streamDestroyedHandler = _this.streamDestroyedHandler.bind(_this);\n return _this;\n }\n Object.defineProperty(OpentokSession.prototype, \"id\", {\n get: function () {\n return this._session && this._session.sessionId ? this._session.sessionId : '';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OpentokSession.prototype, \"ownPeerId\", {\n get: function () {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n },\n enumerable: true,\n configurable: true\n });\n OpentokSession.prototype.sessionDisconnect = function () {\n if (this._session) {\n return this._session.disconnect();\n }\n };\n OpentokSession.prototype.connect = function () {\n var _this = this;\n trace.info('Connect to session', this._credentials);\n if (this._session) {\n trace.error('Session already exists');\n return Promise.reject('Cannot connect to session while another session is active');\n }\n return new Promise(function (resolve, reject) {\n var handleError = function (error) {\n _this._session && _this._session.off();\n _this._session = null;\n trace.error('handleConnect error:', error);\n reject(error);\n };\n var _a = _this._sessionParams.credentials, apiKey = _a.apiKey, sessionId = _a.sessionId;\n _this._session = window.OTSESSION = window.OT.initSession(apiKey, sessionId);\n _this._session.on('connectionCreated', _this.connectionCreatedHandler);\n _this._session.on('connectionDestroyed', _this.connectionDestroyedHandler);\n _this._session.on('streamCreated', _this.streamCreatedHandler);\n _this._session.on('streamDestroyed', _this.streamDestroyedHandler);\n var connectHandler = function (error) {\n if (error) {\n handleError(error);\n return;\n }\n resolve();\n };\n _this._session.connect(_this._credentials.token, connectHandler);\n });\n };\n OpentokSession.prototype.disconnect = function () {\n var _this = this;\n return new Promise(function (resolve) {\n trace.info('Disconnecting from session');\n var currentSession = _this._session;\n _this._session = null;\n _this._peerConnections.forEach(function (peerConnection) {\n _this.destroyPeerConnection(peerConnection);\n });\n if (!currentSession) {\n trace.info('No active session - resolving');\n resolve();\n return;\n }\n currentSession.off();\n currentSession.disconnect();\n resolve();\n });\n };\n OpentokSession.prototype.onMediaStreamDestroyed = function (clientRole) {\n var _this = this;\n var promises = [];\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnection.peerRole === clientRole) {\n promises.push(_this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n return Promise.all(promises).then(function () { return undefined; });\n };\n OpentokSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)\n return Promise.resolve();\n };\n OpentokSession.prototype.replaceStreamTracks = function (mediaStream) {\n return Promise.reject(new Error('Not implemented'));\n };\n OpentokSession.prototype.getRemoteTrackStats = function (mediaTrack) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var peerConnectionOfTrack = _this.getPeerConnectionByMediaTrack(mediaTrack);\n if (!peerConnectionOfTrack || !peerConnectionOfTrack.subscriber) {\n reject(new Error('Cannot find peer or subscriber for getting stats'));\n }\n //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats\n peerConnectionOfTrack.subscriber.getStats(function (error, stats) {\n if (error) {\n trace.warn('Error getting stats', error);\n resolve({ trackId: mediaTrack.id, trackStats: {} });\n return;\n }\n resolve({ trackId: mediaTrack.id, trackStats: stats });\n });\n });\n };\n //#region OpenTok Events Handlers\n OpentokSession.prototype.connectionCreatedHandler = function (event) {\n var _this = this;\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n //In case we got our own connection, we have nothing to do with it\n if (connection.connectionId === this.ownPeerId) {\n return;\n }\n var destinationRole = this.calculateDestinationRole();\n this.createStreamForPublishing(destinationRole)\n .then(function (streams) {\n var peerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR\n ? MediaConstants_1.SessionClientType.GUEST : MediaConstants_1.SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n if (!streams.videoSource && !streams.audioSource) {\n trace.info('Peer connection without publisher was created', peerConnection);\n return peerConnection;\n }\n var streamName = destinationRole === MediaConstants_1.SessionClientRole.USER\n ? MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM : MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;\n return _this.createMediaPublisher(streams, streamName)\n .then(function (publisher) {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n return peerConnection;\n });\n })\n .then(function (peerConnection) {\n _this._peerConnections.set(peerConnection.peerId, peerConnection);\n if (peerConnection.publisher) {\n return new Promise(function (resolve, reject) {\n trace.info('Starting publish to peerConnection.publisher');\n _this._session.publish(peerConnection.publisher, function (error) {\n if (error) {\n trace.error('Publish to peerConnection error', error);\n return reject(error);\n }\n trace.info('Publish to peerConnection success');\n return resolve();\n });\n });\n }\n return Promise.resolve();\n })\n .catch(function (error) {\n //Need to handle fail cases during reliability\n trace.error('Error handling new peer connection', error);\n });\n };\n OpentokSession.prototype.connectionDestroyedHandler = function (event) {\n trace.info('connectionDestroyedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n if (this._peerConnections.has(connection.connectionId)) {\n this.destroyPeerConnection(this._peerConnections.get(connection.connectionId));\n }\n };\n OpentokSession.prototype.streamCreatedHandler = function (event) {\n var _this = this;\n trace.info('streamCreatedHandler', event.stream);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist on this stage');\n return;\n }\n var peerConnection = this._peerConnections.get(connection.connectionId);\n trace.info('Subscribing the stream');\n this.createMediaSubscriber(stream).then(function (subscriber) {\n peerConnection.subscriber = subscriber;\n peerConnection.subscriber.on('videoElementCreated', function (args) {\n var element = args.element;\n var otMediaStream = element.srcObject;\n if (!otMediaStream) {\n trace.warn('MediaStream not found in OT video element');\n return;\n }\n trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);\n otMediaStream.getTracks().forEach(function (mediaTrack) {\n _this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n _this.registerPeersRemoteTracks(peerConnection);\n });\n });\n };\n OpentokSession.prototype.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n var peerConnection = this._peerConnections.get(stream.connection.connectionId);\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n return;\n }\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n };\n //#endregion\n //#region PeerConnection\n OpentokSession.prototype.destroyPeerConnection = function (peerConnection) {\n this._peerConnections.delete(peerConnection.peerId);\n this.destroyPublisherOnPeerConnection(peerConnection).catch(function () { return undefined; });\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n };\n //#endregion\n //#region Publisher\n OpentokSession.prototype.createStreamForPublishing = function (destinationRole) {\n var _this = this;\n trace.info('createStreamForPublishing');\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then(function (mediaStream) {\n var stream = { videoSource: null, audioSource: null };\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach(function (track) {\n if (track.kind === 'video') {\n stream.videoSource = track;\n }\n else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n }\n else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n return stream;\n });\n };\n OpentokSession.prototype.createMediaPublisher = function (stream, streamName) {\n var otParams = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource,\n showControls: false,\n name: streamName\n };\n return new Promise(function (resolve, reject) {\n var otPublisher = window.OT.initPublisher(undefined, otParams, function (error) {\n if (error) {\n reject(error);\n return;\n }\n otPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n //We preventing the default, in order to prevent stop the stream by OT.\n //We managing streams by ourselves and if we allow OT to close the stream, it cannot be reused.\n event.preventDefault();\n });\n otPublisher.on('videoElementCreated', function (event) {\n document.getElementById(otPublisher.id).style.display = 'none';\n event.element.muted = true;\n });\n resolve(otPublisher);\n });\n });\n };\n OpentokSession.prototype.destroyPublisherOnPeerConnection = function (peerConnection) {\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n this._session.unpublish(peerConnection.publisher);\n }\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n return Promise.resolve();\n };\n //#endregion\n //#region Subscriber\n OpentokSession.prototype.createMediaSubscriber = function (remoteStream) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n if (!_this.sessionExistsGuard(false)) {\n reject('Session not exists');\n return;\n }\n var subscriber = _this._session.subscribe(remoteStream, null, null, function (err) {\n if (err) {\n trace.warn('Error creating subscriber', err);\n reject(err);\n return;\n }\n subscriber.on('videoElementCreated', function (event) {\n document.getElementById(subscriber.id).style.display = 'none';\n event.element.muted = true;\n });\n resolve(subscriber);\n });\n });\n };\n OpentokSession.prototype.destroySubscriberOnPeerConnection = function (peerConnection) {\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session.unsubscribe(peerConnection.subscriber);\n }\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(function () { return trace.warn('Error removing remote streams from peerConnection'); })\n .then(function () {\n peerConnection.subscriber = null;\n });\n };\n //#endregion\n OpentokSession.prototype.calculateDestinationRole = function () {\n if (this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {\n var isAgentConnected = false;\n return !isAgentConnected ? MediaConstants_1.SessionClientRole.AGENT : MediaConstants_1.SessionClientRole.OBSERVER;\n }\n return MediaConstants_1.SessionClientRole.USER;\n };\n OpentokSession.prototype.sessionExistsGuard = function (shouldThrow) {\n if (shouldThrow === void 0) { shouldThrow = true; }\n var connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n return guards_1.throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n };\n return OpentokSession;\n}(MediaSessionBase_1.MediaSessionBase));\nexports.OpentokSession = OpentokSession;\n\n//# sourceMappingURL=SessionOpentok.js.map\n"]}
|
|
1
|
+
{"version":3,"sources":["MediaSession/SessionOpentok.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","defineProperty","exports","value","MediaConstants_1","require","guards_1","MediaSessionBase_1","MediaTracer_1","trace","getMediaTracer","OpentokSession","_super","sessionParams","streamFactory","_this","call","_lastStreamEvents","_session","_credentials","credentials","connect","bind","disconnect","onMediaStreamDestroyed","onMediaStreamRenewed","createStreamForPublishing","createMediaPublisher","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","get","sessionId","enumerable","configurable","connection","connectionId","sessionDisconnect","info","error","Promise","reject","resolve","handleError","off","_a","_sessionParams","apiKey","window","OTSESSION","OT","initSession","on","event","emitEvent","recordingEvents","RECORD_STARTED","RECORD_STOPPED","connectHandler","token","currentSession","_peerConnections","forEach","peerConnection","destroyPeerConnection","clientRole","promises","peerRole","push","destroyPublisherOnPeerConnection","all","then","undefined","mediaStream","replaceStreamTracks","Error","getRemoteTrackStats","mediaTrack","peerConnectionOfTrack","getPeerConnectionByMediaTrack","subscriber","getStats","stats","warn","trackId","id","trackStats","sessionExistsGuard","destinationRole","JSON","parse","data","streams","peerId","peerType","clientType","SessionClientType","INITIATOR","GUEST","publisher","remoteMediaTracks","localStream","connectionTimoutPrt","ownPeerId","videoSource","audioSource","set","reduce","promiseChain","streamEvent","publish","catch","has","stream","createMediaSubscriber","destroySubscriberOnPeerConnection","delete","_sessionStreamsManager","getMediaStreamForRole","getTracks","track","kind","SessionClientRole","USER","otParams","publishAudio","publishVideo","showControls","otPublisher","initPublisher","preventDefault","document","getElementById","style","display","element","muted","unpublish","remoteStream","subscribe","err","otMediaStream","srcObject","addRemoteTrackToPeer","registerPeersRemoteTracks","unsubscribe","unregisterPeersRemoteMediaTracks","shouldThrow","connected","throwableGuard","MediaSessionBase"],"mappings":"AAAA;;AACA,IAAIA,YAAa,aAAQ,UAAKA,SAAd,IAA6B,YAAY;AACrD,QAAIC,iBAAgB,uBAAUC,CAAV,EAAaC,CAAb,EAAgB;AAChCF,yBAAgBG,OAAOC,cAAP,IACX,EAAEC,WAAW,EAAb,cAA6BC,KAA7B,IAAsC,UAAUL,CAAV,EAAaC,CAAb,EAAgB;AAAED,cAAEI,SAAF,GAAcH,CAAd;AAAkB,SAD/D,IAEZ,UAAUD,CAAV,EAAaC,CAAb,EAAgB;AAAE,iBAAK,IAAIK,CAAT,IAAcL,CAAd;AAAiB,oBAAIA,EAAEM,cAAF,CAAiBD,CAAjB,CAAJ,EAAyBN,EAAEM,CAAF,IAAOL,EAAEK,CAAF,CAAP;AAA1C;AAAwD,SAF9E;AAGA,eAAOP,eAAcC,CAAd,EAAiBC,CAAjB,CAAP;AACH,KALD;AAMA,WAAO,UAAUD,CAAV,EAAaC,CAAb,EAAgB;AACnBF,uBAAcC,CAAd,EAAiBC,CAAjB;AACA,iBAASO,EAAT,GAAc;AAAE,iBAAKC,WAAL,GAAmBT,CAAnB;AAAuB;AACvCA,UAAEU,SAAF,GAAcT,MAAM,IAAN,GAAaC,OAAOS,MAAP,CAAcV,CAAd,CAAb,IAAiCO,GAAGE,SAAH,GAAeT,EAAES,SAAjB,EAA4B,IAAIF,EAAJ,EAA7D,CAAd;AACH,KAJD;AAKH,CAZ2C,EAA5C;AAaAN,OAAOU,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C,EAAEC,OAAO,IAAT,EAA7C;AACA,IAAIC,mBAAmBC,QAAQ,mBAAR,CAAvB;AACA,IAAIC,WAAWD,QAAQ,yCAAR,CAAf;AACA,IAAIE,qBAAqBF,QAAQ,oBAAR,CAAzB;AACA,IAAIG,gBAAgBH,QAAQ,2BAAR,CAApB;AACA,IAAII,QAAQD,cAAcE,cAAd,CAA6B,gBAA7B,CAAZ;AACA;AACA,IAAIC,iBAAiB,aAAe,UAAUC,MAAV,EAAkB;AAClDzB,cAAUwB,cAAV,EAA0BC,MAA1B;AACA,aAASD,cAAT,CAAwBE,aAAxB,EAAuCC,aAAvC,EAAsD;AAClD,YAAIC,QAAQH,OAAOI,IAAP,CAAY,IAAZ,EAAkBH,aAAlB,EAAiCC,aAAjC,KAAmD,IAA/D;AACAC,cAAME,iBAAN,GAA0B,EAA1B;AACAF,cAAMG,QAAN,GAAiB,IAAjB;AACAH,cAAMI,YAAN,GAAqBN,cAAcO,WAAnC;AACAL,cAAMM,OAAN,GAAgBN,MAAMM,OAAN,CAAcC,IAAd,CAAmBP,KAAnB,CAAhB;AACAA,cAAMQ,UAAN,GAAmBR,MAAMQ,UAAN,CAAiBD,IAAjB,CAAsBP,KAAtB,CAAnB;AACAA,cAAMS,sBAAN,GAA+BT,MAAMS,sBAAN,CAA6BF,IAA7B,CAAkCP,KAAlC,CAA/B;AACAA,cAAMU,oBAAN,GAA6BV,MAAMU,oBAAN,CAA2BH,IAA3B,CAAgCP,KAAhC,CAA7B;AACAA,cAAMW,yBAAN,GAAkCX,MAAMW,yBAAN,CAAgCJ,IAAhC,CAAqCP,KAArC,CAAlC;AACAA,cAAMY,oBAAN,GAA6BZ,MAAMY,oBAAN,CAA2BL,IAA3B,CAAgCP,KAAhC,CAA7B;AACAA,cAAMa,wBAAN,GAAiCb,MAAMa,wBAAN,CAA+BN,IAA/B,CAAoCP,KAApC,CAAjC;AACAA,cAAMc,0BAAN,GAAmCd,MAAMc,0BAAN,CAAiCP,IAAjC,CAAsCP,KAAtC,CAAnC;AACAA,cAAMe,oBAAN,GAA6Bf,MAAMe,oBAAN,CAA2BR,IAA3B,CAAgCP,KAAhC,CAA7B;AACAA,cAAMgB,sBAAN,GAA+BhB,MAAMgB,sBAAN,CAA6BT,IAA7B,CAAkCP,KAAlC,CAA/B;AACA,eAAOA,KAAP;AACH;AACDxB,WAAOU,cAAP,CAAsBU,eAAeZ,SAArC,EAAgD,IAAhD,EAAsD;AAClDiC,aAAK,eAAY;AACb,mBAAO,KAAKd,QAAL,IAAiB,KAAKA,QAAL,CAAce,SAA/B,GAA2C,KAAKf,QAAL,CAAce,SAAzD,GAAqE,EAA5E;AACH,SAHiD;AAIlDC,oBAAY,IAJsC;AAKlDC,sBAAc;AALoC,KAAtD;AAOA5C,WAAOU,cAAP,CAAsBU,eAAeZ,SAArC,EAAgD,WAAhD,EAA6D;AACzDiC,aAAK,eAAY;AACb,mBAAO,KAAKd,QAAL,IAAiB,KAAKA,QAAL,CAAckB,UAA/B,GAA4C,KAAKlB,QAAL,CAAckB,UAAd,CAAyBC,YAArE,GAAoF,EAA3F;AACH,SAHwD;AAIzDH,oBAAY,IAJ6C;AAKzDC,sBAAc;AAL2C,KAA7D;AAOAxB,mBAAeZ,SAAf,CAAyBuC,iBAAzB,GAA6C,YAAY;AACrD,YAAI,KAAKpB,QAAT,EAAmB;AACf,mBAAO,KAAKA,QAAL,CAAcK,UAAd,EAAP;AACH;AACJ,KAJD;AAKAZ,mBAAeZ,SAAf,CAAyBsB,OAAzB,GAAmC,YAAY;AAC3C,YAAIN,QAAQ,IAAZ;AACAN,cAAM8B,IAAN,CAAW,oBAAX,EAAiC,KAAKpB,YAAtC;AACA,YAAI,KAAKD,QAAT,EAAmB;AACfT,kBAAM+B,KAAN,CAAY,wBAAZ;AACA,mBAAOC,QAAQC,MAAR,CAAe,2DAAf,CAAP;AACH;AACD,eAAO,IAAID,OAAJ,CAAY,UAAUE,OAAV,EAAmBD,MAAnB,EAA2B;AAC1C,gBAAIE,cAAc,SAAdA,WAAc,CAAUJ,KAAV,EAAiB;AAC/BzB,sBAAMG,QAAN,IAAkBH,MAAMG,QAAN,CAAe2B,GAAf,EAAlB;AACA9B,sBAAMG,QAAN,GAAiB,IAAjB;AACAT,sBAAM+B,KAAN,CAAY,sBAAZ,EAAoCA,KAApC;AACAE,uBAAOF,KAAP;AACH,aALD;AAMA,gBAAIM,KAAK/B,MAAMgC,cAAN,CAAqB3B,WAA9B;AAAA,gBAA2C4B,SAASF,GAAGE,MAAvD;AAAA,gBAA+Df,YAAYa,GAAGb,SAA9E;AACAlB,kBAAMG,QAAN,GAAiB+B,OAAOC,SAAP,GAAmBD,OAAOE,EAAP,CAAUC,WAAV,CAAsBJ,MAAtB,EAA8Bf,SAA9B,CAApC;AACAlB,kBAAME,iBAAN,GAA0B,EAA1B;AACAF,kBAAMG,QAAN,CAAemC,EAAf,CAAkB,mBAAlB,EAAuCtC,MAAMa,wBAA7C;AACAb,kBAAMG,QAAN,CAAemC,EAAf,CAAkB,qBAAlB,EAAyCtC,MAAMc,0BAA/C;AACAd,kBAAMG,QAAN,CAAemC,EAAf,CAAkB,eAAlB,EAAmCtC,MAAMe,oBAAzC;AACAf,kBAAMG,QAAN,CAAemC,EAAf,CAAkB,iBAAlB,EAAqCtC,MAAMgB,sBAA3C;AACAhB,kBAAMG,QAAN,CAAemC,EAAf,CAAkB,gBAAlB,EAAoC,UAAUC,KAAV,EAAiB;AACjD7C,sBAAM8B,IAAN,CAAW,sBAAX,EAAmCe,KAAnC;AACAvC,sBAAMwC,SAAN,CAAgBhD,mBAAmBiD,eAAnB,CAAmCC,cAAnD,EAAmEH,KAAnE;AACH,aAHD;AAIAvC,kBAAMG,QAAN,CAAemC,EAAf,CAAkB,gBAAlB,EAAoC,UAAUC,KAAV,EAAiB;AACjD7C,sBAAM8B,IAAN,CAAW,sBAAX,EAAmCe,KAAnC;AACAvC,sBAAMwC,SAAN,CAAgBhD,mBAAmBiD,eAAnB,CAAmCE,cAAnD,EAAmEJ,KAAnE;AACH,aAHD;AAIA,gBAAIK,iBAAiB,SAAjBA,cAAiB,CAAUnB,KAAV,EAAiB;AAClC,oBAAIA,KAAJ,EAAW;AACPI,gCAAYJ,KAAZ;AACA;AACH;AACDG;AACH,aAND;AAOA5B,kBAAMG,QAAN,CAAeG,OAAf,CAAuBN,MAAMI,YAAN,CAAmByC,KAA1C,EAAiDD,cAAjD;AACH,SA9BM,CAAP;AA+BH,KAtCD;AAuCAhD,mBAAeZ,SAAf,CAAyBwB,UAAzB,GAAsC,YAAY;AAC9C,YAAIR,QAAQ,IAAZ;AACA,eAAO,IAAI0B,OAAJ,CAAY,UAAUE,OAAV,EAAmB;AAClClC,kBAAM8B,IAAN,CAAW,4BAAX;AACA,gBAAIsB,iBAAiB9C,MAAMG,QAA3B;AACAH,kBAAMG,QAAN,GAAiB,IAAjB;AACAH,kBAAM+C,gBAAN,CAAuBC,OAAvB,CAA+B,UAAUC,cAAV,EAA0B;AACrDjD,sBAAMkD,qBAAN,CAA4BD,cAA5B;AACH,aAFD;AAGA,gBAAI,CAACH,cAAL,EAAqB;AACjBpD,sBAAM8B,IAAN,CAAW,+BAAX;AACAI;AACA;AACH;AACDkB,2BAAehB,GAAf;AACAgB,2BAAetC,UAAf;AACAR,kBAAME,iBAAN,GAA0B,EAA1B;AACA0B;AACH,SAhBM,CAAP;AAiBH,KAnBD;AAoBAhC,mBAAeZ,SAAf,CAAyByB,sBAAzB,GAAkD,UAAU0C,UAAV,EAAsB;AACpE,YAAInD,QAAQ,IAAZ;AACA,YAAIoD,WAAW,EAAf;AACA,aAAKL,gBAAL,CAAsBC,OAAtB,CAA8B,UAAUC,cAAV,EAA0B;AACpD,gBAAIA,eAAeI,QAAf,KAA4BF,UAAhC,EAA4C;AACxCC,yBAASE,IAAT,CAActD,MAAMuD,gCAAN,CAAuCN,cAAvC,CAAd;AACH;AACJ,SAJD;AAKA,eAAOvB,QAAQ8B,GAAR,CAAYJ,QAAZ,EAAsBK,IAAtB,CAA2B,YAAY;AAAE,mBAAOC,SAAP;AAAmB,SAA5D,CAAP;AACH,KATD;AAUA9D,mBAAeZ,SAAf,CAAyB0B,oBAAzB,GAAgD,UAAUyC,UAAV,EAAsBQ,WAAtB,EAAmC;AAC/E;AACA,eAAOjC,QAAQE,OAAR,EAAP;AACH,KAHD;AAIAhC,mBAAeZ,SAAf,CAAyB4E,mBAAzB,GAA+C,UAAUD,WAAV,EAAuB;AAClE,eAAOjC,QAAQC,MAAR,CAAe,IAAIkC,KAAJ,CAAU,iBAAV,CAAf,CAAP;AACH,KAFD;AAGAjE,mBAAeZ,SAAf,CAAyB8E,mBAAzB,GAA+C,UAAUC,UAAV,EAAsB;AACjE,YAAI/D,QAAQ,IAAZ;AACA,eAAO,IAAI0B,OAAJ,CAAY,UAAUE,OAAV,EAAmBD,MAAnB,EAA2B;AAC1C,gBAAIqC,wBAAwBhE,MAAMiE,6BAAN,CAAoCF,UAApC,CAA5B;AACA,gBAAI,CAACC,qBAAD,IAA0B,CAACA,sBAAsBE,UAArD,EAAiE;AAC7DvC,uBAAO,IAAIkC,KAAJ,CAAU,kDAAV,CAAP;AACH;AACD;AACAG,kCAAsBE,UAAtB,CAAiCC,QAAjC,CAA0C,UAAU1C,KAAV,EAAiB2C,KAAjB,EAAwB;AAC9D,oBAAI3C,KAAJ,EAAW;AACP/B,0BAAM2E,IAAN,CAAW,qBAAX,EAAkC5C,KAAlC;AACAG,4BAAQ,EAAE0C,SAASP,WAAWQ,EAAtB,EAA0BC,YAAY,EAAtC,EAAR;AACA;AACH;AACD5C,wBAAQ,EAAE0C,SAASP,WAAWQ,EAAtB,EAA0BC,YAAYJ,KAAtC,EAAR;AACH,aAPD;AAQH,SAdM,CAAP;AAeH,KAjBD;AAkBA;AACAxE,mBAAeZ,SAAf,CAAyB6B,wBAAzB,GAAoD,UAAU0B,KAAV,EAAiB;AACjE,YAAIvC,QAAQ,IAAZ;AACAN,cAAM8B,IAAN,CAAW,0BAAX,EAAuCe,KAAvC;AACA,YAAIlB,aAAakB,MAAMlB,UAAvB;AACA,YAAI,CAAC,KAAKoD,kBAAL,CAAwB,KAAxB,CAAD,IAAmC,CAACpD,UAAxC,EAAoD;AAChD;AACH;AACD,YAAIqD,kBAAkBC,KAAKC,KAAL,CAAWvD,WAAWwD,IAAtB,EAA4B1B,UAAlD;AACA,aAAKxC,yBAAL,CAA+B+D,eAA/B,EACKjB,IADL,CACU,UAAUqB,OAAV,EAAmB;AACzB,gBAAI7B,iBAAiB;AACjB8B,wBAAQ1D,WAAWC,YADF;AAEjB+B,0BAAUqB,eAFO;AAGjBM,0BAAUhF,MAAMgC,cAAN,CAAqBiD,UAArB,KAAoC5F,iBAAiB6F,iBAAjB,CAAmCC,SAAvE,GACJ9F,iBAAiB6F,iBAAjB,CAAmCE,KAD/B,GACuC/F,iBAAiB6F,iBAAjB,CAAmCC,SAJnE;AAKjB9D,4BAAYA,UALK;AAMjBgE,2BAAW,IANM;AAOjBnB,4BAAY,IAPK;AAQjBoB,mCAAmB,EARF;AASjBC,6BAAaT,OATI;AAUjBU,qCAAqB;AAVJ,aAArB;AAYA,gBAAInE,WAAWC,YAAX,KAA4BtB,MAAMyF,SAAlC,IAAgD,CAACX,QAAQY,WAAT,IAAwB,CAACZ,QAAQa,WAArF,EAAmG;AAC/FjG,sBAAM8B,IAAN,CAAW,+CAAX,EAA4DyB,cAA5D;AACA,uBAAOA,cAAP;AACH;AACD,mBAAOjD,MAAMY,oBAAN,CAA2BkE,OAA3B,EACFrB,IADE,CACG,UAAU4B,SAAV,EAAqB;AAC3BpC,+BAAeoC,SAAf,GAA2BA,SAA3B;AACA3F,sBAAM8B,IAAN,CAAW,4CAAX,EAAyDyB,cAAzD;AACA,uBAAOA,cAAP;AACH,aALM,CAAP;AAMH,SAxBD,EAyBKQ,IAzBL,CAyBU,UAAUR,cAAV,EAA0B;AAChCjD,kBAAM+C,gBAAN,CAAuB6C,GAAvB,CAA2B3C,eAAe8B,MAA1C,EAAkD9B,cAAlD;AACA,gBAAI5B,WAAWC,YAAX,KAA4BtB,MAAMyF,SAAtC,EAAiD;AAC7C/F,sBAAM8B,IAAN,CAAW,oCAAX;AACA;;;;AAIA,uBAAOxB,MAAME,iBAAN,CAAwB2F,MAAxB,CAA+B,UAAUC,YAAV,EAAwBC,WAAxB,EAAqC;AAAE,2BAAOD,aAC/ErC,IAD+E,CAC1E,YAAY;AAAE,+BAAOzD,MAAMe,oBAAN,CAA2BgF,WAA3B,CAAP;AAAiD,qBADW,CAAP;AACA,iBADtE,EACwErE,QAAQE,OAAR,EADxE,EAEF6B,IAFE,CAEG,YAAY;AAClB,wBAAIR,eAAeoC,SAAnB,EAA8B;AAC1B,+BAAO,IAAI3D,OAAJ,CAAY,UAAUE,OAAV,EAAmBD,MAAnB,EAA2B;AAC1CjC,kCAAM8B,IAAN,CAAW,8CAAX;AACAxB,kCAAMG,QAAN,CAAe6F,OAAf,CAAuB/C,eAAeoC,SAAtC,EAAiD,UAAU5D,KAAV,EAAiB;AAC9D,oCAAIA,KAAJ,EAAW;AACP/B,0CAAM+B,KAAN,CAAY,iCAAZ,EAA+CA,KAA/C;AACA,2CAAOE,OAAOF,KAAP,CAAP;AACH;AACD/B,sCAAM8B,IAAN,CAAW,mCAAX;AACA,uCAAOI,SAAP;AACH,6BAPD;AAQH,yBAVM,CAAP;AAWH;AACD,2BAAOF,QAAQE,OAAR,EAAP;AACH,iBAjBM,CAAP;AAkBH;AACJ,SApDD,EAqDKqE,KArDL,CAqDW,UAAUxE,KAAV,EAAiB;AACxB;AACA/B,kBAAM+B,KAAN,CAAY,oCAAZ,EAAkDA,KAAlD;AACH,SAxDD;AAyDH,KAjED;AAkEA7B,mBAAeZ,SAAf,CAAyB8B,0BAAzB,GAAsD,UAAUyB,KAAV,EAAiB;AACnE7C,cAAM8B,IAAN,CAAW,4BAAX,EAAyCe,KAAzC;AACA,YAAIlB,aAAakB,MAAMlB,UAAvB;AACA,YAAI,CAAC,KAAKoD,kBAAL,CAAwB,KAAxB,CAAD,IAAmC,CAACpD,UAAxC,EAAoD;AAChD;AACH;AACD,YAAI,KAAK0B,gBAAL,CAAsBmD,GAAtB,CAA0B7E,WAAWC,YAArC,CAAJ,EAAwD;AACpD,iBAAK4B,qBAAL,CAA2B,KAAKH,gBAAL,CAAsB9B,GAAtB,CAA0BI,WAAWC,YAArC,CAA3B;AACH;AACJ,KATD;AAUA1B,mBAAeZ,SAAf,CAAyB+B,oBAAzB,GAAgD,UAAUwB,KAAV,EAAiB;AAC7D7C,cAAM8B,IAAN,CAAW,sBAAX,EAAmCe,MAAM4D,MAAzC;AACA,YAAIA,SAAS5D,MAAM4D,MAAnB;AACA,YAAI9E,aAAa,CAAC8E,UAAU,EAAE9E,YAAY,IAAd,EAAX,EAAiCA,UAAlD;AACA,YAAI,CAAC,KAAKoD,kBAAL,CAAwB,KAAxB,CAAD,IAAmC,CAAC0B,MAApC,IAA8C9E,WAAWC,YAAX,KAA4B,KAAKmE,SAAnF,EAA8F;AAC1F;AACH;AACD,YAAI,CAAC,KAAK1C,gBAAL,CAAsBmD,GAAtB,CAA0B7E,WAAWC,YAArC,CAAL,EAAyD;AACrD5B,kBAAM2E,IAAN,CAAW,wDAAX;AACA,iBAAKnE,iBAAL,CAAuBoD,IAAvB,CAA4Bf,KAA5B;AACA;AACH;AACD,YAAIU,iBAAiB,KAAKF,gBAAL,CAAsB9B,GAAtB,CAA0BI,WAAWC,YAArC,CAArB;AACA5B,cAAM8B,IAAN,CAAW,wBAAX;AACA,aAAK4E,qBAAL,CAA2BD,MAA3B,EAAmC1C,IAAnC,CAAwC,UAAUS,UAAV,EAAsB;AAC1DjB,2BAAeiB,UAAf,GAA4BA,UAA5B;AACH,SAFD;AAGH,KAjBD;AAkBAtE,mBAAeZ,SAAf,CAAyBgC,sBAAzB,GAAkD,UAAUuB,KAAV,EAAiB;AAC/D7C,cAAM8B,IAAN,CAAW,wBAAX,EAAqCe,KAArC;AACA,YAAI4D,SAAS5D,MAAM4D,MAAnB;AACA,YAAI,CAAC,KAAK1B,kBAAL,CAAwB,KAAxB,CAAD,IAAmC,CAAC0B,MAAxC,EAAgD;AAC5C;AACH;AACD,YAAIlD,iBAAiB,KAAKF,gBAAL,CAAsB9B,GAAtB,CAA0BkF,OAAO9E,UAAP,CAAkBC,YAA5C,CAArB;AACA,YAAI,CAAC2B,cAAL,EAAqB;AACjBvD,kBAAM2E,IAAN,CAAW,6CAAX;AACA;AACH;AACD,aAAKgC,iCAAL,CAAuCpD,cAAvC,EAAuDgD,KAAvD,CAA6D,YAAY;AAAE,mBAAOvC,SAAP;AAAmB,SAA9F;AACH,KAZD;AAaA;AACA;AACA9D,mBAAeZ,SAAf,CAAyBkE,qBAAzB,GAAiD,UAAUD,cAAV,EAA0B;AACvE,aAAKF,gBAAL,CAAsBuD,MAAtB,CAA6BrD,eAAe8B,MAA5C;AACA,aAAKxB,gCAAL,CAAsCN,cAAtC,EAAsDgD,KAAtD,CAA4D,YAAY;AAAE,mBAAOvC,SAAP;AAAmB,SAA7F;AACA,aAAK2C,iCAAL,CAAuCpD,cAAvC,EAAuDgD,KAAvD,CAA6D,YAAY;AAAE,mBAAOvC,SAAP;AAAmB,SAA9F;AACH,KAJD;AAKA;AACA;AACA9D,mBAAeZ,SAAf,CAAyB2B,yBAAzB,GAAqD,UAAU+D,eAAV,EAA2B;AAC5E,YAAI1E,QAAQ,IAAZ;AACAN,cAAM8B,IAAN,CAAW,2BAAX;AACA,eAAO,KAAK+E,sBAAL,CAA4BC,qBAA5B,CAAkD9B,eAAlD,EACFjB,IADE,CACG,UAAUE,WAAV,EAAuB;AAC7B,gBAAIwC,SAAS,EAAET,aAAa,IAAf,EAAqBC,aAAa,IAAlC,EAAb;AACA,gBAAIhC,WAAJ,EAAiB;AACbjE,sBAAM8B,IAAN,CAAW,mCAAX,EAAgDmC,WAAhD;AACAA,4BAAY8C,SAAZ,GAAwBzD,OAAxB,CAAgC,UAAU0D,KAAV,EAAiB;AAC7C,wBAAIA,MAAMC,IAAN,KAAe,OAAnB,EAA4B;AACxBR,+BAAOT,WAAP,GAAqBgB,KAArB;AACH,qBAFD,MAGK,IAAIA,MAAMC,IAAN,KAAe,OAAnB,EAA4B;AAC7BR,+BAAOR,WAAP,GAAqBe,KAArB;AACH;AACJ,iBAPD;AAQH,aAVD,MAWK,IAAI1G,MAAMgC,cAAN,CAAqBmB,UAArB,KAAoC9D,iBAAiBuH,iBAAjB,CAAmCC,IAA3E,EAAiF;AAClFnH,sBAAM2E,IAAN,CAAW,6DAAX,EAA0EK,eAA1E;AACH;AACD,mBAAOyB,MAAP;AACH,SAlBM,CAAP;AAmBH,KAtBD;AAuBAvG,mBAAeZ,SAAf,CAAyB4B,oBAAzB,GAAgD,UAAUuF,MAAV,EAAkB;AAC9D,YAAIW,WAAW;AACXpB,yBAAaS,OAAOT,WAAP,GAAqBS,OAAOT,WAA5B,GAA0C,KAD5C;AAEXC,yBAAaQ,OAAOR,WAAP,GAAqBQ,OAAOR,WAA5B,GAA0C,KAF5C;AAGXoB,0BAAc,CAAC,CAACZ,OAAOR,WAHZ;AAIXqB,0BAAc,CAAC,CAACb,OAAOT,WAJZ;AAKXuB,0BAAc;AALH,SAAf;AAOA,eAAO,IAAIvF,OAAJ,CAAY,UAAUE,OAAV,EAAmBD,MAAnB,EAA2B;AAC1C,gBAAIuF,cAAchF,OAAOE,EAAP,CAAU+E,aAAV,CAAwBzD,SAAxB,EAAmCoD,QAAnC,EAA6C,UAAUrF,KAAV,EAAiB;AAC5E,oBAAIA,KAAJ,EAAW;AACPE,2BAAOF,KAAP;AACA;AACH;AACDyF,4BAAY5E,EAAZ,CAAe,iBAAf,EAAkC,UAAUC,KAAV,EAAiB;AAC/C7C,0BAAM8B,IAAN,CAAW,4BAAX,EAAyCe,KAAzC;AACA;AACA;AACAA,0BAAM6E,cAAN;AACH,iBALD;AAMAF,4BAAY5E,EAAZ,CAAe,qBAAf,EAAsC,UAAUC,KAAV,EAAiB;AACnD8E,6BAASC,cAAT,CAAwBJ,YAAY3C,EAApC,EAAwCgD,KAAxC,CAA8CC,OAA9C,GAAwD,MAAxD;AACAjF,0BAAMkF,OAAN,CAAcC,KAAd,GAAsB,IAAtB;AACH,iBAHD;AAIA9F,wBAAQsF,WAAR;AACH,aAhBiB,CAAlB;AAiBH,SAlBM,CAAP;AAmBH,KA3BD;AA4BAtH,mBAAeZ,SAAf,CAAyBuE,gCAAzB,GAA4D,UAAUN,cAAV,EAA0B;AAClF,YAAI,KAAKwB,kBAAL,CAAwB,KAAxB,KAAkCxB,eAAeoC,SAArD,EAAgE;AAC5D,iBAAKlF,QAAL,CAAcwH,SAAd,CAAwB1E,eAAeoC,SAAvC;AACH;AACDpC,uBAAeoC,SAAf,GAA2B,IAA3B;AACApC,uBAAesC,WAAf,GAA6B,IAA7B;AACA,eAAO7D,QAAQE,OAAR,EAAP;AACH,KAPD;AAQA;AACA;AACAhC,mBAAeZ,SAAf,CAAyBoH,qBAAzB,GAAiD,UAAUwB,YAAV,EAAwB;AACrE,YAAI5H,QAAQ,IAAZ;AACA,eAAO,IAAI0B,OAAJ,CAAY,UAAUE,OAAV,EAAmBD,MAAnB,EAA2B;AAC1C,gBAAI,CAAC3B,MAAMyE,kBAAN,CAAyB,KAAzB,CAAL,EAAsC;AAClC9C,uBAAO,oBAAP;AACA;AACH;AACD,gBAAIuC,aAAalE,MAAMG,QAAN,CAAe0H,SAAf,CAAyBD,YAAzB,EAAuC,IAAvC,EAA6C,IAA7C,EAAmD,UAAUE,GAAV,EAAe;AAC/E,oBAAIA,GAAJ,EAAS;AACLpI,0BAAM2E,IAAN,CAAW,2BAAX,EAAwCyD,GAAxC;AACAnG,2BAAOmG,GAAP;AACA;AACH;AACD5D,2BAAW5B,EAAX,CAAc,qBAAd,EAAqC,UAAUC,KAAV,EAAiB;AAClD8E,6BAASC,cAAT,CAAwBpD,WAAWK,EAAnC,EAAuCgD,KAAvC,CAA6CC,OAA7C,GAAuD,MAAvD;AACA,wBAAIC,UAAUlF,MAAMkF,OAApB;AACAA,4BAAQC,KAAR,GAAgB,IAAhB;AACA,wBAAIzE,iBAAiBjD,MAAM+C,gBAAN,CAAuB9B,GAAvB,CAA2B2G,aAAavG,UAAb,CAAwBC,YAAnD,CAArB;AACA,wBAAIyG,gBAAgBN,QAAQO,SAA5B;AACA/E,mCAAeiB,UAAf,GAA4BA,UAA5B;AACA,wBAAI,CAAC6D,aAAL,EAAoB;AAChBrI,8BAAM2E,IAAN,CAAW,2CAAX;AACA;AACH;AACD3E,0BAAM8B,IAAN,CAAW,iCAAX,EAA8CyB,eAAeiB,UAA7D,EAAyE6D,aAAzE;AACAA,kCAActB,SAAd,GAA0BzD,OAA1B,CAAkC,UAAUe,UAAV,EAAsB;AACpD/D,8BAAMiI,oBAAN,CAA2BhF,cAA3B,EAA2Cc,UAA3C;AACH,qBAFD;AAGA/D,0BAAMkI,yBAAN,CAAgCjF,cAAhC;AACH,iBAhBD;AAiBArB,wBAAQsC,UAAR;AACH,aAxBgB,CAAjB;AAyBH,SA9BM,CAAP;AA+BH,KAjCD;AAkCAtE,mBAAeZ,SAAf,CAAyBqH,iCAAzB,GAA6D,UAAUpD,cAAV,EAA0B;AACnF,YAAI,KAAKwB,kBAAL,CAAwB,KAAxB,KAAkCxB,eAAeiB,UAArD,EAAiE;AAC7D,iBAAK/D,QAAL,CAAcgI,WAAd,CAA0BlF,eAAeiB,UAAzC;AACH;AACD,eAAO,KAAKkE,gCAAL,CAAsCnF,cAAtC,EACFgD,KADE,CACI,YAAY;AAAE,mBAAOvG,MAAM2E,IAAN,CAAW,mDAAX,CAAP;AAAyE,SAD3F,EAEFZ,IAFE,CAEG,YAAY;AAClBR,2BAAeiB,UAAf,GAA4B,IAA5B;AACH,SAJM,CAAP;AAKH,KATD;AAUA;AACAtE,mBAAeZ,SAAf,CAAyByF,kBAAzB,GAA8C,UAAU4D,WAAV,EAAuB;AACjE,YAAIA,gBAAgB,KAAK,CAAzB,EAA4B;AAAEA,0BAAc,IAAd;AAAqB;AACnD,YAAIC,YAAY,CAAC,EAAE,KAAKnI,QAAL,IAAiB,KAAKA,QAAL,CAAckB,UAA/B,IAA6C,KAAKlB,QAAL,CAAckB,UAAd,CAAyBC,YAAxE,CAAjB;AACA,eAAO/B,SAASgJ,cAAT,CAAwBD,SAAxB,EAAmC,iCAAnC,EAAsED,WAAtE,CAAP;AACH,KAJD;AAKA,WAAOzI,cAAP;AACH,CAzWmC,CAyWlCJ,mBAAmBgJ,gBAzWe,CAApC;AA0WArJ,QAAQS,cAAR,GAAyBA,cAAzB;;AAEA","file":"SessionOpentok.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar guards_1 = require(\"@techsee/techsee-common/lib/core/guards\");\nvar MediaSessionBase_1 = require(\"./MediaSessionBase\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('OpentokSession');\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nvar OpentokSession = /** @class */ (function (_super) {\n __extends(OpentokSession, _super);\n function OpentokSession(sessionParams, streamFactory) {\n var _this = _super.call(this, sessionParams, streamFactory) || this;\n _this._lastStreamEvents = [];\n _this._session = null;\n _this._credentials = sessionParams.credentials;\n _this.connect = _this.connect.bind(_this);\n _this.disconnect = _this.disconnect.bind(_this);\n _this.onMediaStreamDestroyed = _this.onMediaStreamDestroyed.bind(_this);\n _this.onMediaStreamRenewed = _this.onMediaStreamRenewed.bind(_this);\n _this.createStreamForPublishing = _this.createStreamForPublishing.bind(_this);\n _this.createMediaPublisher = _this.createMediaPublisher.bind(_this);\n _this.connectionCreatedHandler = _this.connectionCreatedHandler.bind(_this);\n _this.connectionDestroyedHandler = _this.connectionDestroyedHandler.bind(_this);\n _this.streamCreatedHandler = _this.streamCreatedHandler.bind(_this);\n _this.streamDestroyedHandler = _this.streamDestroyedHandler.bind(_this);\n return _this;\n }\n Object.defineProperty(OpentokSession.prototype, \"id\", {\n get: function () {\n return this._session && this._session.sessionId ? this._session.sessionId : '';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OpentokSession.prototype, \"ownPeerId\", {\n get: function () {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n },\n enumerable: true,\n configurable: true\n });\n OpentokSession.prototype.sessionDisconnect = function () {\n if (this._session) {\n return this._session.disconnect();\n }\n };\n OpentokSession.prototype.connect = function () {\n var _this = this;\n trace.info('Connect to session', this._credentials);\n if (this._session) {\n trace.error('Session already exists');\n return Promise.reject('Cannot connect to session while another session is active');\n }\n return new Promise(function (resolve, reject) {\n var handleError = function (error) {\n _this._session && _this._session.off();\n _this._session = null;\n trace.error('handleConnect error:', error);\n reject(error);\n };\n var _a = _this._sessionParams.credentials, apiKey = _a.apiKey, sessionId = _a.sessionId;\n _this._session = window.OTSESSION = window.OT.initSession(apiKey, sessionId);\n _this._lastStreamEvents = [];\n _this._session.on('connectionCreated', _this.connectionCreatedHandler);\n _this._session.on('connectionDestroyed', _this.connectionDestroyedHandler);\n _this._session.on('streamCreated', _this.streamCreatedHandler);\n _this._session.on('streamDestroyed', _this.streamDestroyedHandler);\n _this._session.on('archiveStarted', function (event) {\n trace.info('archiveStarted event', event);\n _this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STARTED, event);\n });\n _this._session.on('archiveStopped', function (event) {\n trace.info('archiveStopped event', event);\n _this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STOPPED, event);\n });\n var connectHandler = function (error) {\n if (error) {\n handleError(error);\n return;\n }\n resolve();\n };\n _this._session.connect(_this._credentials.token, connectHandler);\n });\n };\n OpentokSession.prototype.disconnect = function () {\n var _this = this;\n return new Promise(function (resolve) {\n trace.info('Disconnecting from session');\n var currentSession = _this._session;\n _this._session = null;\n _this._peerConnections.forEach(function (peerConnection) {\n _this.destroyPeerConnection(peerConnection);\n });\n if (!currentSession) {\n trace.info('No active session - resolving');\n resolve();\n return;\n }\n currentSession.off();\n currentSession.disconnect();\n _this._lastStreamEvents = [];\n resolve();\n });\n };\n OpentokSession.prototype.onMediaStreamDestroyed = function (clientRole) {\n var _this = this;\n var promises = [];\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnection.peerRole === clientRole) {\n promises.push(_this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n return Promise.all(promises).then(function () { return undefined; });\n };\n OpentokSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)\n return Promise.resolve();\n };\n OpentokSession.prototype.replaceStreamTracks = function (mediaStream) {\n return Promise.reject(new Error('Not implemented'));\n };\n OpentokSession.prototype.getRemoteTrackStats = function (mediaTrack) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var peerConnectionOfTrack = _this.getPeerConnectionByMediaTrack(mediaTrack);\n if (!peerConnectionOfTrack || !peerConnectionOfTrack.subscriber) {\n reject(new Error('Cannot find peer or subscriber for getting stats'));\n }\n //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats\n peerConnectionOfTrack.subscriber.getStats(function (error, stats) {\n if (error) {\n trace.warn('Error getting stats', error);\n resolve({ trackId: mediaTrack.id, trackStats: {} });\n return;\n }\n resolve({ trackId: mediaTrack.id, trackStats: stats });\n });\n });\n };\n //#region OpenTok Events Handlers\n OpentokSession.prototype.connectionCreatedHandler = function (event) {\n var _this = this;\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n var destinationRole = JSON.parse(connection.data).clientRole;\n this.createStreamForPublishing(destinationRole)\n .then(function (streams) {\n var peerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR\n ? MediaConstants_1.SessionClientType.GUEST : MediaConstants_1.SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n if (connection.connectionId !== _this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n return peerConnection;\n }\n return _this.createMediaPublisher(streams)\n .then(function (publisher) {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n return peerConnection;\n });\n })\n .then(function (peerConnection) {\n _this._peerConnections.set(peerConnection.peerId, peerConnection);\n if (connection.connectionId === _this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n /*\n When publisher connect after others participants,\n make sure the publisher will not loose their stream to subscribe\n */\n return _this._lastStreamEvents.reduce(function (promiseChain, streamEvent) { return promiseChain\n .then(function () { return _this.streamCreatedHandler(streamEvent); }); }, Promise.resolve())\n .then(function () {\n if (peerConnection.publisher) {\n return new Promise(function (resolve, reject) {\n trace.info('Starting publish to peerConnection.publisher');\n _this._session.publish(peerConnection.publisher, function (error) {\n if (error) {\n trace.error('Publish to peerConnection error', error);\n return reject(error);\n }\n trace.info('Publish to peerConnection success');\n return resolve();\n });\n });\n }\n return Promise.resolve();\n });\n }\n })\n .catch(function (error) {\n //Need to handle fail cases during reliability\n trace.error('Error handling new peer connection', error);\n });\n };\n OpentokSession.prototype.connectionDestroyedHandler = function (event) {\n trace.info('connectionDestroyedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n if (this._peerConnections.has(connection.connectionId)) {\n this.destroyPeerConnection(this._peerConnections.get(connection.connectionId));\n }\n };\n OpentokSession.prototype.streamCreatedHandler = function (event) {\n trace.info('streamCreatedHandler', event.stream);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return;\n }\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist on this stage');\n this._lastStreamEvents.push(event);\n return;\n }\n var peerConnection = this._peerConnections.get(connection.connectionId);\n trace.info('Subscribing the stream');\n this.createMediaSubscriber(stream).then(function (subscriber) {\n peerConnection.subscriber = subscriber;\n });\n };\n OpentokSession.prototype.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n var peerConnection = this._peerConnections.get(stream.connection.connectionId);\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n return;\n }\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n };\n //#endregion\n //#region PeerConnection\n OpentokSession.prototype.destroyPeerConnection = function (peerConnection) {\n this._peerConnections.delete(peerConnection.peerId);\n this.destroyPublisherOnPeerConnection(peerConnection).catch(function () { return undefined; });\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n };\n //#endregion\n //#region Publisher\n OpentokSession.prototype.createStreamForPublishing = function (destinationRole) {\n var _this = this;\n trace.info('createStreamForPublishing');\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then(function (mediaStream) {\n var stream = { videoSource: null, audioSource: null };\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach(function (track) {\n if (track.kind === 'video') {\n stream.videoSource = track;\n }\n else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n }\n else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n return stream;\n });\n };\n OpentokSession.prototype.createMediaPublisher = function (stream) {\n var otParams = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource,\n showControls: false\n };\n return new Promise(function (resolve, reject) {\n var otPublisher = window.OT.initPublisher(undefined, otParams, function (error) {\n if (error) {\n reject(error);\n return;\n }\n otPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n //We preventing the default, in order to prevent stop the stream by OT.\n //We managing streams by ourselves and if we allow OT to close the stream, it cannot be reused.\n event.preventDefault();\n });\n otPublisher.on('videoElementCreated', function (event) {\n document.getElementById(otPublisher.id).style.display = 'none';\n event.element.muted = true;\n });\n resolve(otPublisher);\n });\n });\n };\n OpentokSession.prototype.destroyPublisherOnPeerConnection = function (peerConnection) {\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n this._session.unpublish(peerConnection.publisher);\n }\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n return Promise.resolve();\n };\n //#endregion\n //#region Subscriber\n OpentokSession.prototype.createMediaSubscriber = function (remoteStream) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n if (!_this.sessionExistsGuard(false)) {\n reject('Session not exists');\n return;\n }\n var subscriber = _this._session.subscribe(remoteStream, null, null, function (err) {\n if (err) {\n trace.warn('Error creating subscriber', err);\n reject(err);\n return;\n }\n subscriber.on('videoElementCreated', function (event) {\n document.getElementById(subscriber.id).style.display = 'none';\n var element = event.element;\n element.muted = true;\n var peerConnection = _this._peerConnections.get(remoteStream.connection.connectionId);\n var otMediaStream = element.srcObject;\n peerConnection.subscriber = subscriber;\n if (!otMediaStream) {\n trace.warn('MediaStream not found in OT video element');\n return;\n }\n trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);\n otMediaStream.getTracks().forEach(function (mediaTrack) {\n _this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n _this.registerPeersRemoteTracks(peerConnection);\n });\n resolve(subscriber);\n });\n });\n };\n OpentokSession.prototype.destroySubscriberOnPeerConnection = function (peerConnection) {\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session.unsubscribe(peerConnection.subscriber);\n }\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(function () { return trace.warn('Error removing remote streams from peerConnection'); })\n .then(function () {\n peerConnection.subscriber = null;\n });\n };\n //#endregion\n OpentokSession.prototype.sessionExistsGuard = function (shouldThrow) {\n if (shouldThrow === void 0) { shouldThrow = true; }\n var connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n return guards_1.throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n };\n return OpentokSession;\n}(MediaSessionBase_1.MediaSessionBase));\nexports.OpentokSession = OpentokSession;\n\n//# sourceMappingURL=SessionOpentok.js.map\n"]}
|