@techsee/techsee-media-service 0.9.5 → 0.10.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSession/MediaSessionBase.js"],"names":["Object","defineProperty","exports","value","MediaConstants_1","require","MediaTracer_1","trace","getMediaTracer","MediaSessionBase","sessionParams","streamFactory","_peerConnections","Map","_sessionParams","_sessionStreamsManager","prototype","addRemoteTrackToPeer","sourcePeerConnection","mediaTrack","kind","KnownMediaStreamKind","Video","peerRole","SessionClientRole","AGENT","trackType","toLowerCase","Audio","KnownMediaStream","AGENT_AUDIO_STREAM","USER_AUDIO_STREAM","USER_VIDEO_STREAM","remoteMediaTrack","isRegistered","remoteMediaTracks","push","registerPeersRemoteTracks","_this","info","forEach","addRemoteMediaTrack","then","catch","error","warn","unregisterPeersRemoteMediaTracks","peerConnection","promises","removalPromise","removeMediaTrack","Promise","all","undefined","getPeerConnectionByMediaTrack","peerConnectionOfTrack","remoteTrack","filter","track","id","length"],"mappings":"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","file":"MediaSessionBase.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSessionBase');\nvar MediaSessionBase = /** @class */ (function () {\n function MediaSessionBase(sessionParams, streamFactory) {\n this._peerConnections = new Map();\n this._sessionParams = sessionParams;\n this._sessionStreamsManager = streamFactory;\n this._peerConnections = new Map();\n }\n MediaSessionBase.prototype.addRemoteTrackToPeer = function (sourcePeerConnection, mediaTrack) {\n if (mediaTrack.kind === MediaConstants_1.KnownMediaStreamKind.Video &&\n sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT) {\n //Currently We don't support video streams from Agent side\n return;\n }\n var trackType = null;\n if (mediaTrack.kind.toLowerCase() === MediaConstants_1.KnownMediaStreamKind.Audio) {\n trackType = sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT\n ? MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM : MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;\n }\n else {\n trackType = MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;\n }\n var remoteMediaTrack = { mediaTrack: mediaTrack, trackType: trackType, isRegistered: false };\n sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);\n };\n MediaSessionBase.prototype.registerPeersRemoteTracks = function (sourcePeerConnection) {\n var _this = this;\n trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);\n sourcePeerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n if (!remoteMediaTrack.isRegistered) {\n trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);\n _this._sessionStreamsManager.addRemoteMediaTrack(remoteMediaTrack)\n .then(function () {\n remoteMediaTrack.isRegistered = true;\n })\n .catch(function (error) {\n trace.warn('Error adding remote media track to available streams', error);\n });\n }\n });\n };\n MediaSessionBase.prototype.unregisterPeersRemoteMediaTracks = function (peerConnection) {\n var _this = this;\n var promises = [];\n peerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n var removalPromise = _this._sessionStreamsManager.removeMediaTrack(remoteMediaTrack.mediaTrack)\n .then(function () { return remoteMediaTrack.isRegistered = false; })\n .catch(function () { return trace.warn('Error while removing remote media track', remoteMediaTrack); });\n promises.push(removalPromise);\n });\n return Promise.all(promises).then(function () { return undefined; });\n };\n MediaSessionBase.prototype.getPeerConnectionByMediaTrack = function (mediaTrack) {\n var peerConnectionOfTrack = null;\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnectionOfTrack !== null) {\n return;\n }\n var remoteTrack = peerConnection.remoteMediaTracks.filter(function (track) { return track.mediaTrack.id === mediaTrack.id; });\n if (remoteTrack.length === 1) {\n peerConnectionOfTrack = peerConnection;\n }\n });\n return peerConnectionOfTrack;\n };\n return MediaSessionBase;\n}());\nexports.MediaSessionBase = MediaSessionBase;\n\n//# sourceMappingURL=MediaSessionBase.js.map\n"]}
1
+ {"version":3,"sources":["MediaSession/MediaSessionBase.js"],"names":["Object","defineProperty","exports","value","MediaConstants_1","require","MediaTracer_1","events_1","trace","getMediaTracer","MediaSessionBase","sessionParams","streamFactory","_sessionParams","_sessionStreamsManager","_emitter","EventEmitter","_peerConnections","Map","prototype","registerEventCallback","event","callback","on","emitEvent","eventArgs","_this","setTimeout","emit","addRemoteTrackToPeer","sourcePeerConnection","mediaTrack","kind","KnownMediaStreamKind","Video","peerRole","SessionClientRole","AGENT","trackType","toLowerCase","Audio","KnownMediaStream","AGENT_AUDIO_STREAM","USER_AUDIO_STREAM","USER_VIDEO_STREAM","remoteMediaTrack","isRegistered","remoteMediaTracks","push","registerPeersRemoteTracks","info","forEach","addRemoteMediaTrack","then","catch","error","warn","unregisterPeersRemoteMediaTracks","peerConnection","promises","removalPromise","removeMediaTrack","Promise","all","undefined","getPeerConnectionByMediaTrack","peerConnectionOfTrack","remoteTrack","filter","track","id","length"],"mappings":"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","file":"MediaSessionBase.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar events_1 = require(\"events\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSessionBase');\nvar MediaSessionBase = /** @class */ (function () {\n function MediaSessionBase(sessionParams, streamFactory) {\n this._sessionParams = sessionParams;\n this._sessionStreamsManager = streamFactory;\n this._emitter = new events_1.EventEmitter();\n this._peerConnections = new Map();\n }\n MediaSessionBase.prototype.registerEventCallback = function (event, callback) {\n this._emitter.on(event, callback);\n };\n MediaSessionBase.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n MediaSessionBase.prototype.addRemoteTrackToPeer = function (sourcePeerConnection, mediaTrack) {\n if (mediaTrack.kind === MediaConstants_1.KnownMediaStreamKind.Video &&\n sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT) {\n //Currently We don't support video streams from Agent side\n return;\n }\n var trackType = null;\n if (mediaTrack.kind.toLowerCase() === MediaConstants_1.KnownMediaStreamKind.Audio) {\n trackType = sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT\n ? MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM : MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;\n }\n else {\n trackType = MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;\n }\n var remoteMediaTrack = { mediaTrack: mediaTrack, trackType: trackType, isRegistered: false };\n sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);\n };\n MediaSessionBase.prototype.registerPeersRemoteTracks = function (sourcePeerConnection) {\n var _this = this;\n trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);\n sourcePeerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n if (!remoteMediaTrack.isRegistered) {\n trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);\n _this._sessionStreamsManager.addRemoteMediaTrack(remoteMediaTrack)\n .then(function () {\n remoteMediaTrack.isRegistered = true;\n })\n .catch(function (error) {\n trace.warn('Error adding remote media track to available streams', error);\n });\n }\n });\n };\n MediaSessionBase.prototype.unregisterPeersRemoteMediaTracks = function (peerConnection) {\n var _this = this;\n var promises = [];\n peerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n var removalPromise = _this._sessionStreamsManager.removeMediaTrack(remoteMediaTrack.mediaTrack)\n .then(function () { return remoteMediaTrack.isRegistered = false; })\n .catch(function () { return trace.warn('Error while removing remote media track', remoteMediaTrack); });\n promises.push(removalPromise);\n });\n return Promise.all(promises).then(function () { return undefined; });\n };\n MediaSessionBase.prototype.getPeerConnectionByMediaTrack = function (mediaTrack) {\n var peerConnectionOfTrack = null;\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnectionOfTrack !== null) {\n return;\n }\n var remoteTrack = peerConnection.remoteMediaTracks.filter(function (track) { return track.mediaTrack.id === mediaTrack.id; });\n if (remoteTrack.length === 1) {\n peerConnectionOfTrack = peerConnection;\n }\n });\n return peerConnectionOfTrack;\n };\n return MediaSessionBase;\n}());\nexports.MediaSessionBase = MediaSessionBase;\n\n//# sourceMappingURL=MediaSessionBase.js.map\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaSession/SessionOpentok.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EACH,aAAa,EACb,sBAAsB,EAAE,yBAAyB,EACjD,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAmB,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAEzF,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAKvE,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;KACX;CACJ;AA+BD,aAAK,WAAW,GAAG,GAAG,CAAA;AAEtB,aAAK,YAAY,GAAG,GAAG,CAAA;AAEvB,UAAU,YAAY;IAClB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAChD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACtC;AAED,UAAU,cAAc;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;CACpB;AAGD,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,gBAAgB,CAAE,YAAW,aAAa;IAC3F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IAEnC,OAAO,CAAC,QAAQ,CAA8B;aAE1C,EAAE,EAAI,MAAM;qBAIJ,SAAS;gBAIT,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAiBhH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5F,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC;IAItD,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuB5E,OAAO,CAAC,wBAAwB;IA2EhC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,iCAAiC;IAczC,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,kBAAkB;CAK7B","file":"SessionOpentok.d.ts","sourcesContent":["import {Nullable} from '@techsee/techsee-common';\n\nimport {\n IMediaSession,\n ISessionStreamsManager, MediaSessionConfiguration,\n MediaSessionParams,\n RemoteTrackStats\n} from '../MediaContracts';\n\nimport {KnownMediaStream, SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport {IMediaSessionPeer, MediaSessionBase} from './MediaSessionBase';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\n\nconst trace = getMediaTracer('OpentokSession');\n\ndeclare global {\n interface Window {\n OT: any;\n }\n}\n\ninterface IOTSession {\n\n sessionId: string;\n\n connection: Nullable<OTConnection>;\n\n isConnected(): boolean;\n\n connect(token: string, cb: any): void;\n\n disconnect(): void;\n\n publish(publisher: OTPublisher, cb: any): void;\n\n unpublish(publisher: OTPublisher): void;\n\n subscribe(stream: any, container: any, uiProps: any, doneCb: any): OTSubscriber;\n\n unsubscribe(subscriber: OTSubscriber): void;\n\n getSubscribersForStream(stream: any): OTSubscriber[];\n\n off(): void;\n\n on(param: string, cb: any): void;\n\n once(param: string, cb: any): void;\n}\n\ntype OTPublisher = any\n\ntype OTSubscriber = any\n\ninterface OTConnection {\n connectionId: string;\n}\n\ninterface OTPeerConnection extends IMediaSessionPeer {\n localStream: Nullable<OTStreamSource>;\n connection: OTConnection;\n publisher: Nullable<OTPublisher>;\n subscriber: Nullable<OTSubscriber>;\n}\n\ninterface OTStreamSource {\n videoSource: any;\n audioSource: any;\n}\n\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nexport class OpentokSession extends MediaSessionBase<OTPeerConnection> implements IMediaSession {\n private readonly _credentials: any;\n\n private _session: Nullable<IOTSession> = null;\n\n get id(): string {\n return this._session && this._session.sessionId ? this._session.sessionId : '';\n }\n\n private get ownPeerId(): string {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n }\n\n constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration, streamFactory: ISessionStreamsManager) {\n super(sessionParams, streamFactory);\n this._credentials = sessionParams.credentials;\n\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\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 }\n\n connect(): Promise<void> {\n trace.info('Connect to session', this._credentials);\n\n if (this._session) {\n trace.error('Session already exists');\n\n return Promise.reject('Cannot connect to session while another session is active');\n }\n\n return new Promise((resolve, reject) => {\n const handleError = (error: any): void => {\n this._session && this._session!.off();\n this._session = null;\n trace.error('handleConnect error:', error);\n reject(error);\n };\n\n const {apiKey, sessionId} = this._sessionParams.credentials;\n\n this._session = (window as any).OTSESSION = window.OT.initSession(apiKey, sessionId);\n\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\n const connectHandler = (error: any): void => {\n if (error) {\n handleError(error);\n\n return;\n }\n\n resolve();\n };\n\n this._session!.connect(this._credentials.token, connectHandler);\n });\n }\n\n disconnect(): Promise<void> {\n return new Promise((resolve) => {\n trace.info('Disconnecting from session');\n const currentSession = this._session;\n\n this._session = null;\n\n this._peerConnections.forEach((peerConnection) => {\n this.destroyPeerConnection(peerConnection);\n });\n\n if (!currentSession) {\n trace.info('No active session - resolving');\n resolve();\n\n return;\n }\n currentSession.off();\n currentSession.disconnect();\n resolve();\n });\n }\n\n onMediaStreamDestroyed(clientRole: SessionClientRole): Promise<void> {\n const promises: Promise<void>[] = [];\n\n this._peerConnections.forEach((peerConnection) => {\n if (peerConnection.peerRole === clientRole) {\n promises.push(this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n\n return Promise.all(promises).then(() => undefined);\n }\n\n onMediaStreamRenewed(clientRole: SessionClientRole, mediaStream: MediaStream): Promise<void> {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)\n return Promise.resolve();\n }\n\n replaceStreamTracks(mediaStream: Nullable<MediaStream>) {\n return Promise.reject(new Error('Not implemented'));\n }\n\n getRemoteTrackStats(mediaTrack: MediaStreamTrack): Promise<RemoteTrackStats> {\n return new Promise((resolve: any, reject: any) => {\n const peerConnectionOfTrack = this.getPeerConnectionByMediaTrack(mediaTrack);\n\n if (!peerConnectionOfTrack || !peerConnectionOfTrack.subscriber) {\n reject(new Error('Cannot find peer or subscriber for getting stats'));\n }\n\n //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats\n peerConnectionOfTrack!.subscriber.getStats((error: any, stats: any) => {\n if (error) {\n trace.warn('Error getting stats', error);\n resolve({trackId: mediaTrack.id, trackStats: {}});\n\n return;\n }\n resolve({trackId: mediaTrack.id, trackStats: stats});\n });\n });\n }\n\n //#region OpenTok Events Handlers\n\n private connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\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\n const destinationRole = this.calculateDestinationRole();\n\n this.createStreamForPublishing(destinationRole)\n .then((streams: OTStreamSource) => {\n const peerConnection: OTPeerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: this._sessionParams.clientType === SessionClientType.INITIATOR\n ? SessionClientType.GUEST : SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n\n if (!streams.videoSource && !streams.audioSource) {\n trace.info('Peer connection without publisher was created', peerConnection);\n\n return peerConnection;\n }\n\n const streamName = destinationRole === SessionClientRole.USER\n ? KnownMediaStream.AGENT_AUDIO_STREAM : KnownMediaStream.USER_VIDEO_STREAM;\n\n\n return this.createMediaPublisher(streams, streamName)\n .then((publisher: OTPublisher) => {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n\n return peerConnection;\n });\n })\n .then((peerConnection: OTPeerConnection) => {\n this._peerConnections.set(peerConnection.peerId, peerConnection);\n\n if (peerConnection.publisher) {\n return new Promise<void>((resolve, reject) => {\n trace.info('Starting publish to peerConnection.publisher');\n this._session!.publish(peerConnection.publisher, (error: any) => {\n if (error) {\n trace.error('Publish to peerConnection error', error);\n\n return reject(error);\n }\n trace.info('Publish to peerConnection success');\n\n return resolve();\n });\n });\n }\n\n return Promise.resolve();\n })\n .catch((error: any) => {\n //Need to handle fail cases during reliability\n trace.error('Error handling new peer connection', error);\n });\n }\n\n private connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n if (this._peerConnections.has(connection.connectionId)) {\n this.destroyPeerConnection(this._peerConnections.get(connection.connectionId)!);\n }\n }\n\n private streamCreatedHandler(event: any): void {\n trace.info('streamCreatedHandler', event.stream);\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist on this stage');\n\n return;\n }\n\n const peerConnection = this._peerConnections.get(connection.connectionId)!;\n\n trace.info('Subscribing the stream');\n\n this.createMediaSubscriber(stream).then((subcriber: OTSubscriber) => {\n peerConnection.subscriber = subcriber;\n peerConnection.subscriber.on('videoElementCreated', (args: any) => {\n const {element} = args;\n const otMediaStream: MediaStream = element.srcObject;\n\n if (!otMediaStream) {\n trace.warn('MediaStream not found in OT video element');\n\n return;\n }\n\n trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);\n otMediaStream.getTracks().forEach((mediaTrack: MediaStreamTrack) => {\n this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n\n this.registerPeersRemoteTracks(peerConnection);\n });\n });\n }\n\n private streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n\n const peerConnection = this._peerConnections.get(stream.connection.connectionId);\n\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n\n return;\n }\n\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() => undefined);\n }\n\n //#endregion\n\n //#region PeerConnection\n\n private destroyPeerConnection(peerConnection: OTPeerConnection): void {\n this._peerConnections.delete(peerConnection.peerId);\n this.destroyPublisherOnPeerConnection(peerConnection).catch(() => undefined);\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() => undefined);\n }\n\n //#endregion\n\n //#region Publisher\n\n private createStreamForPublishing(destinationRole: SessionClientRole): Promise<OTStreamSource> {\n trace.info('createStreamForPublishing');\n\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then((mediaStream: Nullable<MediaStream>) => {\n\n const stream: OTStreamSource = {videoSource: null, audioSource: null};\n\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach((track) => {\n if (track.kind === 'video') {\n stream.videoSource = track;\n } else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n } else if (this._sessionParams.clientRole === SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n\n return stream;\n });\n }\n\n private createMediaPublisher(stream: OTStreamSource, streamName: string): Promise<OTPublisher> {\n const 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\n return new Promise((resolve, reject) => {\n const otPublisher = window.OT.initPublisher(undefined, otParams, (error: any) => {\n if (error) {\n reject(error);\n\n return;\n }\n otPublisher.on('streamDestroyed', (event: any) => {\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', (event: any) => {\n document.getElementById(otPublisher.id)!.style.display = 'none';\n event.element.muted = true;\n });\n resolve(otPublisher);\n });\n });\n }\n\n private destroyPublisherOnPeerConnection(peerConnection: OTPeerConnection): Promise<void> {\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n this._session!.unpublish(peerConnection.publisher);\n }\n\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n\n return Promise.resolve();\n }\n\n //#endregion\n\n //#region Subscriber\n\n private createMediaSubscriber(remoteStream: any): Promise<OTSubscriber> {\n return new Promise((resolve: any, reject: any) => {\n if (!this.sessionExistsGuard(false)) {\n reject('Session not exists');\n\n return;\n }\n\n const subscriber: OTSubscriber = this._session!.subscribe(remoteStream, null, null, (err: any) => {\n if (err) {\n trace.warn('Error creating subscriber', err);\n reject(err);\n\n return;\n }\n\n subscriber.on('videoElementCreated', (event: any) => {\n document.getElementById(subscriber.id)!.style.display = 'none';\n event.element.muted = true;\n });\n\n resolve(subscriber);\n });\n });\n }\n\n private destroySubscriberOnPeerConnection(peerConnection: OTPeerConnection): Promise<void> {\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session!.unsubscribe(peerConnection.subscriber);\n }\n\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(() => trace.warn('Error removing remote streams from peerConnection'))\n .then(() => {\n peerConnection.subscriber = null;\n });\n }\n\n //#endregion\n\n private calculateDestinationRole(): SessionClientRole {\n if (this._sessionParams.clientRole === SessionClientRole.USER) {\n const isAgentConnected = false;\n\n return !isAgentConnected ? SessionClientRole.AGENT : SessionClientRole.OBSERVER;\n }\n\n return SessionClientRole.USER;\n }\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n\n return throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/MediaSession/SessionOpentok.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EACH,aAAa,EACb,sBAAsB,EAAE,yBAAyB,EACjD,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAmB,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAEzF,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAKvE,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;KACX;CACJ;AA+BD,aAAK,WAAW,GAAG,GAAG,CAAA;AAEtB,aAAK,YAAY,GAAG,GAAG,CAAA;AAEvB,UAAU,YAAY;IAClB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAChD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACtC;AAED,UAAU,cAAc;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;CACpB;AAGD,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,gBAAgB,CAAE,YAAW,aAAa;IAC3F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IAEnC,OAAO,CAAC,QAAQ,CAA8B;aAE1C,EAAE,EAAI,MAAM;qBAIJ,SAAS;gBAIT,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAiBhH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5F,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC;IAItD,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuB5E,OAAO,CAAC,wBAAwB;IA2EhC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,iCAAiC;IAczC,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,kBAAkB;CAK7B","file":"SessionOpentok.d.ts","sourcesContent":["import {Nullable} from '@techsee/techsee-common';\n\nimport {\n IMediaSession,\n ISessionStreamsManager, MediaSessionConfiguration,\n MediaSessionParams,\n RemoteTrackStats\n} from '../MediaContracts';\n\nimport {KnownMediaStream, SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport {IMediaSessionPeer, MediaSessionBase} from './MediaSessionBase';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\n\nconst trace = getMediaTracer('OpentokSession');\n\ndeclare global {\n interface Window {\n OT: any;\n }\n}\n\ninterface IOTSession {\n\n sessionId: string;\n\n connection: Nullable<OTConnection>;\n\n isConnected(): boolean;\n\n connect(token: string, cb: any): void;\n\n disconnect(): void;\n\n publish(publisher: OTPublisher, cb: any): void;\n\n unpublish(publisher: OTPublisher): void;\n\n subscribe(stream: any, container: any, uiProps: any, doneCb: any): OTSubscriber;\n\n unsubscribe(subscriber: OTSubscriber): void;\n\n getSubscribersForStream(stream: any): OTSubscriber[];\n\n off(): void;\n\n on(param: string, cb: any): void;\n\n once(param: string, cb: any): void;\n}\n\ntype OTPublisher = any\n\ntype OTSubscriber = any\n\ninterface OTConnection {\n connectionId: string;\n}\n\ninterface OTPeerConnection extends IMediaSessionPeer {\n localStream: Nullable<OTStreamSource>;\n connection: OTConnection;\n publisher: Nullable<OTPublisher>;\n subscriber: Nullable<OTSubscriber>;\n}\n\ninterface OTStreamSource {\n videoSource: any;\n audioSource: any;\n}\n\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nexport class OpentokSession extends MediaSessionBase<OTPeerConnection> implements IMediaSession {\n private readonly _credentials: any;\n\n private _session: Nullable<IOTSession> = null;\n\n get id(): string {\n return this._session && this._session.sessionId ? this._session.sessionId : '';\n }\n\n private get ownPeerId(): string {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n }\n\n constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration, streamFactory: ISessionStreamsManager) {\n super(sessionParams, streamFactory);\n this._credentials = sessionParams.credentials;\n\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\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 }\n\n connect(): Promise<void> {\n trace.info('Connect to session', this._credentials);\n\n if (this._session) {\n trace.error('Session already exists');\n\n return Promise.reject('Cannot connect to session while another session is active');\n }\n\n return new Promise((resolve, reject) => {\n const handleError = (error: any): void => {\n this._session && this._session!.off();\n this._session = null;\n trace.error('handleConnect error:', error);\n reject(error);\n };\n\n const {apiKey, sessionId} = this._sessionParams.credentials;\n\n this._session = (window as any).OTSESSION = window.OT.initSession(apiKey, sessionId);\n\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\n const connectHandler = (error: any): void => {\n if (error) {\n handleError(error);\n\n return;\n }\n\n resolve();\n };\n\n this._session!.connect(this._credentials.token, connectHandler);\n });\n }\n\n disconnect(): Promise<void> {\n return new Promise((resolve) => {\n trace.info('Disconnecting from session');\n const currentSession = this._session;\n\n this._session = null;\n\n this._peerConnections.forEach((peerConnection) => {\n this.destroyPeerConnection(peerConnection);\n });\n\n if (!currentSession) {\n trace.info('No active session - resolving');\n resolve();\n\n return;\n }\n currentSession.off();\n currentSession.disconnect();\n resolve();\n });\n }\n\n onMediaStreamDestroyed(clientRole: SessionClientRole): Promise<void> {\n const promises: Promise<void>[] = [];\n\n this._peerConnections.forEach((peerConnection) => {\n if (peerConnection.peerRole === clientRole) {\n promises.push(this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n\n return Promise.all(promises).then(() => undefined);\n }\n\n onMediaStreamRenewed(clientRole: SessionClientRole, mediaStream: MediaStream): Promise<void> {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)\n return Promise.resolve();\n }\n\n replaceStreamTracks(mediaStream: Nullable<MediaStream>) {\n return Promise.reject(new Error('Not implemented'));\n }\n\n getRemoteTrackStats(mediaTrack: MediaStreamTrack): Promise<RemoteTrackStats> {\n return new Promise((resolve: any, reject: any) => {\n const peerConnectionOfTrack = this.getPeerConnectionByMediaTrack(mediaTrack);\n\n if (!peerConnectionOfTrack || !peerConnectionOfTrack.subscriber) {\n reject(new Error('Cannot find peer or subscriber for getting stats'));\n }\n\n //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats\n peerConnectionOfTrack!.subscriber.getStats((error: any, stats: any) => {\n if (error) {\n trace.warn('Error getting stats', error);\n resolve({trackId: mediaTrack.id, trackStats: {}});\n\n return;\n }\n resolve({trackId: mediaTrack.id, trackStats: stats});\n });\n });\n }\n\n //#region OpenTok Events Handlers\n\n private connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\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\n const destinationRole = this.calculateDestinationRole();\n\n this.createStreamForPublishing(destinationRole)\n .then((streams: OTStreamSource) => {\n const peerConnection: OTPeerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: this._sessionParams.clientType === SessionClientType.INITIATOR\n ? SessionClientType.GUEST : SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n\n if (!streams.videoSource && !streams.audioSource) {\n trace.info('Peer connection without publisher was created', peerConnection);\n\n return peerConnection;\n }\n\n const streamName = destinationRole === SessionClientRole.USER\n ? KnownMediaStream.AGENT_AUDIO_STREAM : KnownMediaStream.USER_VIDEO_STREAM;\n\n\n return this.createMediaPublisher(streams, streamName)\n .then((publisher: OTPublisher) => {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n\n return peerConnection;\n });\n })\n .then((peerConnection: OTPeerConnection) => {\n this._peerConnections.set(peerConnection.peerId, peerConnection);\n\n if (peerConnection.publisher) {\n return new Promise<void>((resolve, reject) => {\n trace.info('Starting publish to peerConnection.publisher');\n this._session!.publish(peerConnection.publisher, (error: any) => {\n if (error) {\n trace.error('Publish to peerConnection error', error);\n\n return reject(error);\n }\n trace.info('Publish to peerConnection success');\n\n return resolve();\n });\n });\n }\n\n return Promise.resolve();\n })\n .catch((error: any) => {\n //Need to handle fail cases during reliability\n trace.error('Error handling new peer connection', error);\n });\n }\n\n private connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n if (this._peerConnections.has(connection.connectionId)) {\n this.destroyPeerConnection(this._peerConnections.get(connection.connectionId)!);\n }\n }\n\n private streamCreatedHandler(event: any): void {\n trace.info('streamCreatedHandler', event.stream);\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist on this stage');\n\n return;\n }\n\n const peerConnection = this._peerConnections.get(connection.connectionId)!;\n\n trace.info('Subscribing the stream');\n\n this.createMediaSubscriber(stream).then((subscriber: OTSubscriber) => {\n peerConnection.subscriber = subscriber;\n peerConnection.subscriber.on('videoElementCreated', (args: any) => {\n const {element} = args;\n const otMediaStream: MediaStream = element.srcObject;\n\n if (!otMediaStream) {\n trace.warn('MediaStream not found in OT video element');\n\n return;\n }\n\n trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);\n otMediaStream.getTracks().forEach((mediaTrack: MediaStreamTrack) => {\n this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n\n this.registerPeersRemoteTracks(peerConnection);\n });\n });\n }\n\n private streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n\n const peerConnection = this._peerConnections.get(stream.connection.connectionId);\n\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n\n return;\n }\n\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() => undefined);\n }\n\n //#endregion\n\n //#region PeerConnection\n\n private destroyPeerConnection(peerConnection: OTPeerConnection): void {\n this._peerConnections.delete(peerConnection.peerId);\n this.destroyPublisherOnPeerConnection(peerConnection).catch(() => undefined);\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() => undefined);\n }\n\n //#endregion\n\n //#region Publisher\n\n private createStreamForPublishing(destinationRole: SessionClientRole): Promise<OTStreamSource> {\n trace.info('createStreamForPublishing');\n\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then((mediaStream: Nullable<MediaStream>) => {\n\n const stream: OTStreamSource = {videoSource: null, audioSource: null};\n\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach((track) => {\n if (track.kind === 'video') {\n stream.videoSource = track;\n } else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n } else if (this._sessionParams.clientRole === SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n\n return stream;\n });\n }\n\n private createMediaPublisher(stream: OTStreamSource, streamName: string): Promise<OTPublisher> {\n const 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\n return new Promise((resolve, reject) => {\n const otPublisher = window.OT.initPublisher(undefined, otParams, (error: any) => {\n if (error) {\n reject(error);\n\n return;\n }\n otPublisher.on('streamDestroyed', (event: any) => {\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', (event: any) => {\n document.getElementById(otPublisher.id)!.style.display = 'none';\n event.element.muted = true;\n });\n resolve(otPublisher);\n });\n });\n }\n\n private destroyPublisherOnPeerConnection(peerConnection: OTPeerConnection): Promise<void> {\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n this._session!.unpublish(peerConnection.publisher);\n }\n\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n\n return Promise.resolve();\n }\n\n //#endregion\n\n //#region Subscriber\n\n private createMediaSubscriber(remoteStream: any): Promise<OTSubscriber> {\n return new Promise((resolve: any, reject: any) => {\n if (!this.sessionExistsGuard(false)) {\n reject('Session not exists');\n\n return;\n }\n\n const subscriber: OTSubscriber = this._session!.subscribe(remoteStream, null, null, (err: any) => {\n if (err) {\n trace.warn('Error creating subscriber', err);\n reject(err);\n\n return;\n }\n\n subscriber.on('videoElementCreated', (event: any) => {\n document.getElementById(subscriber.id)!.style.display = 'none';\n event.element.muted = true;\n });\n\n resolve(subscriber);\n });\n });\n }\n\n private destroySubscriberOnPeerConnection(peerConnection: OTPeerConnection): Promise<void> {\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session!.unsubscribe(peerConnection.subscriber);\n }\n\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(() => trace.warn('Error removing remote streams from peerConnection'))\n .then(() => {\n peerConnection.subscriber = null;\n });\n }\n\n //#endregion\n\n private calculateDestinationRole(): SessionClientRole {\n if (this._sessionParams.clientRole === SessionClientRole.USER) {\n const isAgentConnected = false;\n\n return !isAgentConnected ? SessionClientRole.AGENT : SessionClientRole.OBSERVER;\n }\n\n return SessionClientRole.USER;\n }\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n\n return throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n }\n}\n"]}
@@ -226,8 +226,8 @@ var OpentokSession = /** @class */function (_super) {
226
226
  }
227
227
  var peerConnection = this._peerConnections.get(connection.connectionId);
228
228
  trace.info('Subscribing the stream');
229
- this.createMediaSubscriber(stream).then(function (subcriber) {
230
- peerConnection.subscriber = subcriber;
229
+ this.createMediaSubscriber(stream).then(function (subscriber) {
230
+ peerConnection.subscriber = subscriber;
231
231
  peerConnection.subscriber.on('videoElementCreated', function (args) {
232
232
  var element = args.element;
233
233
  var otMediaStream = element.srcObject;
@@ -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","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","subcriber","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.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 (subcriber) {\n peerConnection.subscriber = subcriber;\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","_session","_credentials","credentials","connect","bind","disconnect","onMediaStreamDestroyed","onMediaStreamRenewed","createStreamForPublishing","createMediaPublisher","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","get","sessionId","enumerable","configurable","connection","connectionId","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.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,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(isOpenTokService: boolean): Promise<boolean>;
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":"AAEA,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;QACR,QAAQ,EAAE,GAAG,CAAC;KACjB;CACJ;AAeD,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,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAcxF;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,GAAG,MAAM,IAAI,CAyCxF;AAED,wBAAgB,sBAAsB,SAQrC","file":"Compatibility.d.ts","sourcesContent":["declare const require: any;\n\ndeclare global {\n interface Window {\n OT: any;\n OTPlugin: any;\n }\n}\nimport isEqual from 'lodash/isEqual';\n\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(isOpenTokService: boolean): Promise<boolean> {\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 ((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/src/js/adapter_core'); // eslint-disable-line global-require\n } else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\n"]}
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;AAeD,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//@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/src/js/adapter_core'); // eslint-disable-line global-require\n } else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\n"]}
@@ -4,6 +4,7 @@ var __importDefault = undefined && undefined.__importDefault || function (mod) {
4
4
  return mod && mod.__esModule ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ var MediaConstants_1 = require("../MediaConstants");
7
8
  var isEqual_1 = __importDefault(require("lodash/isEqual"));
8
9
  //@ts-ignore
9
10
  var ts_environment_detect_1 = require("@techsee/techsee-common/lib/helpers/ts-environment-detect");
@@ -53,7 +54,9 @@ function enumerateMediaDevices() {
53
54
  });
54
55
  }
55
56
  exports.enumerateMediaDevices = enumerateMediaDevices;
56
- function isVideoPlaySupportedOnDevice(isOpenTokService) {
57
+ function isVideoPlaySupportedOnDevice(mediaServiceType) {
58
+ var isOpenTokService = mediaServiceType === MediaConstants_1.MediaServiceType.OPENTOK;
59
+ var isMediaServer = mediaServiceType === MediaConstants_1.MediaServiceType.MEDIASERVER;
57
60
  if (!isIE11) {
58
61
  return Promise.resolve(true);
59
62
  }
@@ -62,6 +65,9 @@ function isVideoPlaySupportedOnDevice(isOpenTokService) {
62
65
  return window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled();
63
66
  });
64
67
  }
68
+ if (isMediaServer) {
69
+ return Promise.resolve(false);
70
+ }
65
71
  if (window.WebRTCAdapter) {
66
72
  return Promise.resolve(true);
67
73
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaUtils/Compatibility.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","isEqual_1","require","ts_environment_detect_1","MediaTracer_1","trace","getMediaTracer","environmentDetect","TsEnvironmentDetect","isIE11","monitoredIeElements","Map","WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS","WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL","_isOTDefined","window","OT","e","waitForOpenTokIsLoaded","Promise","resolve","isDefined","reduce","Array","delay","then","reject","Error","enumerateMediaDevices","getDevices","error","devices","navigator","mediaDevices","enumerateDevices","catch","isVideoPlaySupportedOnDevice","isOpenTokService","OTPlugin","isInstalled","WebRTCAdapter","onMediaElementResize","mediaElement","onResizeHandler","checkTimeoutPtr","unsubscribeIE","clearTimeout","delete","addEventListener","set","videoWidth","videoHeight","checkElementSize_1","lastElementSize","get","currentSize","setTimeout","default","removeEventListener","registerWebRTCAdapters","isChrome","majorVersion","warn"],"mappings":"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","file":"Compatibility.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isEqual_1 = __importDefault(require(\"lodash/isEqual\"));\n//@ts-ignore\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('Compatibility');\nvar environmentDetect = new ts_environment_detect_1.TsEnvironmentDetect();\nvar isIE11 = environmentDetect.isIE11();\nvar monitoredIeElements = new Map();\n// Grace period to wait in the unlikely case that Opentok has not finished initializing,\n// and a session initialization was requested\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = 10;\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = 500;\nfunction _isOTDefined() {\n try {\n return !!window.OT;\n }\n catch (e) {\n return false;\n }\n}\nfunction waitForOpenTokIsLoaded() {\n if (_isOTDefined()) {\n return Promise.resolve();\n }\n var isDefined = false;\n return Promise.reduce(new Array(exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS), function () {\n if (isDefined || _isOTDefined()) {\n isDefined = true;\n return Promise.resolve();\n }\n return Promise.delay(exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL);\n }, 0)\n .then(function () { return isDefined || Promise.reject(new Error('OT is undefined')); });\n}\nexports.waitForOpenTokIsLoaded = waitForOpenTokIsLoaded;\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if ((typeof window.OT !== 'undefined') && window.OT && window.OT.getDevices) {\n window.OT.getDevices(function (error, devices) { return (error ? reject(error) : resolve(devices)); });\n }\n else if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n else {\n reject(new Error('Enumerating media devices is not supported'));\n }\n });\n}\nexports.enumerateMediaDevices = enumerateMediaDevices;\nfunction isVideoPlaySupportedOnDevice(isOpenTokService) {\n if (!isIE11) {\n return Promise.resolve(true);\n }\n if (isOpenTokService) {\n return waitForOpenTokIsLoaded().then(function () { return window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled(); });\n }\n if (window.WebRTCAdapter) {\n return Promise.resolve(true);\n }\n return Promise.resolve(false);\n}\nexports.isVideoPlaySupportedOnDevice = isVideoPlaySupportedOnDevice;\nfunction onMediaElementResize(mediaElement, onResizeHandler) {\n var checkTimeoutPtr = null;\n var unsubscribeIE = function () {\n clearTimeout(checkTimeoutPtr);\n monitoredIeElements.delete(mediaElement);\n };\n if (!isIE11) {\n mediaElement.addEventListener('resize', onResizeHandler, false);\n }\n else {\n monitoredIeElements.set(mediaElement, {\n videoWidth: mediaElement.videoWidth,\n videoHeight: mediaElement.videoHeight\n });\n var checkElementSize_1 = function () {\n var lastElementSize = monitoredIeElements.get(mediaElement);\n if (!lastElementSize) {\n unsubscribeIE();\n }\n else {\n var currentSize = { videoWidth: mediaElement.videoWidth, videoHeight: mediaElement.videoHeight };\n checkTimeoutPtr = setTimeout(checkElementSize_1, 500);\n if (!isEqual_1.default(currentSize, lastElementSize)) {\n monitoredIeElements.set(mediaElement, lastElementSize);\n setTimeout(onResizeHandler);\n }\n }\n };\n checkElementSize_1();\n }\n return function () {\n if (!isIE11) {\n mediaElement && mediaElement.removeEventListener('resize', onResizeHandler);\n }\n else {\n unsubscribeIE();\n }\n };\n}\nexports.onMediaElementResize = onMediaElementResize;\nfunction registerWebRTCAdapters() {\n if (isIE11) {\n require('../webrtc-ie-shim.js');\n }\n else if (!(environmentDetect.isChrome() && (environmentDetect.majorVersion() < 49))) {\n require('webrtc-adapter/src/js/adapter_core'); // eslint-disable-line global-require\n }\n else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\nexports.registerWebRTCAdapters = registerWebRTCAdapters;\n\n//# sourceMappingURL=Compatibility.js.map\n"]}
1
+ {"version":3,"sources":["MediaUtils/Compatibility.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","MediaConstants_1","require","isEqual_1","ts_environment_detect_1","MediaTracer_1","trace","getMediaTracer","environmentDetect","TsEnvironmentDetect","isIE11","monitoredIeElements","Map","WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS","WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL","_isOTDefined","window","OT","e","waitForOpenTokIsLoaded","Promise","resolve","isDefined","reduce","Array","delay","then","reject","Error","enumerateMediaDevices","getDevices","error","devices","navigator","mediaDevices","enumerateDevices","catch","isVideoPlaySupportedOnDevice","mediaServiceType","isOpenTokService","MediaServiceType","OPENTOK","isMediaServer","MEDIASERVER","OTPlugin","isInstalled","WebRTCAdapter","onMediaElementResize","mediaElement","onResizeHandler","checkTimeoutPtr","unsubscribeIE","clearTimeout","delete","addEventListener","set","videoWidth","videoHeight","checkElementSize_1","lastElementSize","get","currentSize","setTimeout","default","removeEventListener","registerWebRTCAdapters","isChrome","majorVersion","warn"],"mappings":"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","file":"Compatibility.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar isEqual_1 = __importDefault(require(\"lodash/isEqual\"));\n//@ts-ignore\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('Compatibility');\nvar environmentDetect = new ts_environment_detect_1.TsEnvironmentDetect();\nvar isIE11 = environmentDetect.isIE11();\nvar monitoredIeElements = new Map();\n// Grace period to wait in the unlikely case that Opentok has not finished initializing,\n// and a session initialization was requested\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = 10;\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = 500;\nfunction _isOTDefined() {\n try {\n return !!window.OT;\n }\n catch (e) {\n return false;\n }\n}\nfunction waitForOpenTokIsLoaded() {\n if (_isOTDefined()) {\n return Promise.resolve();\n }\n var isDefined = false;\n return Promise.reduce(new Array(exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS), function () {\n if (isDefined || _isOTDefined()) {\n isDefined = true;\n return Promise.resolve();\n }\n return Promise.delay(exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL);\n }, 0)\n .then(function () { return isDefined || Promise.reject(new Error('OT is undefined')); });\n}\nexports.waitForOpenTokIsLoaded = waitForOpenTokIsLoaded;\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if ((typeof window.OT !== 'undefined') && window.OT && window.OT.getDevices) {\n window.OT.getDevices(function (error, devices) { return (error ? reject(error) : resolve(devices)); });\n }\n else if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n else {\n reject(new Error('Enumerating media devices is not supported'));\n }\n });\n}\nexports.enumerateMediaDevices = enumerateMediaDevices;\nfunction isVideoPlaySupportedOnDevice(mediaServiceType) {\n var isOpenTokService = mediaServiceType === MediaConstants_1.MediaServiceType.OPENTOK;\n var isMediaServer = mediaServiceType === MediaConstants_1.MediaServiceType.MEDIASERVER;\n if (!isIE11) {\n return Promise.resolve(true);\n }\n if (isOpenTokService) {\n return waitForOpenTokIsLoaded().then(function () { return window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled(); });\n }\n if (isMediaServer) {\n return Promise.resolve(false);\n }\n if (window.WebRTCAdapter) {\n return Promise.resolve(true);\n }\n return Promise.resolve(false);\n}\nexports.isVideoPlaySupportedOnDevice = isVideoPlaySupportedOnDevice;\nfunction onMediaElementResize(mediaElement, onResizeHandler) {\n var checkTimeoutPtr = null;\n var unsubscribeIE = function () {\n clearTimeout(checkTimeoutPtr);\n monitoredIeElements.delete(mediaElement);\n };\n if (!isIE11) {\n mediaElement.addEventListener('resize', onResizeHandler, false);\n }\n else {\n monitoredIeElements.set(mediaElement, {\n videoWidth: mediaElement.videoWidth,\n videoHeight: mediaElement.videoHeight\n });\n var checkElementSize_1 = function () {\n var lastElementSize = monitoredIeElements.get(mediaElement);\n if (!lastElementSize) {\n unsubscribeIE();\n }\n else {\n var currentSize = { videoWidth: mediaElement.videoWidth, videoHeight: mediaElement.videoHeight };\n checkTimeoutPtr = setTimeout(checkElementSize_1, 500);\n if (!isEqual_1.default(currentSize, lastElementSize)) {\n monitoredIeElements.set(mediaElement, lastElementSize);\n setTimeout(onResizeHandler);\n }\n }\n };\n checkElementSize_1();\n }\n return function () {\n if (!isIE11) {\n mediaElement && mediaElement.removeEventListener('resize', onResizeHandler);\n }\n else {\n unsubscribeIE();\n }\n };\n}\nexports.onMediaElementResize = onMediaElementResize;\nfunction registerWebRTCAdapters() {\n if (isIE11) {\n require('../webrtc-ie-shim.js');\n }\n else if (!(environmentDetect.isChrome() && (environmentDetect.majorVersion() < 49))) {\n require('webrtc-adapter/src/js/adapter_core'); // eslint-disable-line global-require\n }\n else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\nexports.registerWebRTCAdapters = registerWebRTCAdapters;\n\n//# sourceMappingURL=Compatibility.js.map\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techsee/techsee-media-service",
3
- "version": "0.9.5",
3
+ "version": "0.10.1",
4
4
  "description": "Techsee Media Service Client",
5
5
  "author": "TechSee",
6
6
  "main": "lib/index.js",
@@ -22,6 +22,7 @@
22
22
  "bluebird": "~3.7.2",
23
23
  "kurento-utils": "6.6.2",
24
24
  "lodash": "4.13.1",
25
+ "openvidu-browser": "~2.15.0",
25
26
  "socket.io-client": "2.1.1",
26
27
  "webrtc-adapter": "6.3.0"
27
28
  },